@pine-ds/core 4.5.0 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/attributes.js +1 -1
- package/components/mock-pds-modal.js +1 -1
- package/components/pds-combobox.js +1 -1
- package/components/pds-container.js +1 -1
- package/components/pds-copytext.js +1 -1
- package/components/pds-datepicker.js +1 -1
- package/components/pds-divider.js +1 -1
- package/components/pds-drawer-content.js +1 -1
- package/components/pds-drawer-footer.js +1 -1
- package/components/pds-drawer-header.js +1 -1
- package/components/pds-drawer.js +1 -1
- package/components/pds-dropdown-menu-item.js +1 -1
- package/components/pds-dropdown-menu-separator.js +1 -1
- package/components/pds-dropdown-menu.js +1 -1
- package/components/pds-filter.js +1 -1
- package/components/pds-filters.js +1 -1
- package/components/pds-icon2.js +1 -1
- package/components/pds-image.js +1 -1
- package/components/pds-input2.js +1 -1
- package/components/pds-link2.js +1 -1
- package/components/pds-loader2.js +1 -1
- package/components/pds-modal-content.js +1 -1
- package/components/pds-modal-footer.js +1 -1
- package/components/pds-modal-header.js +1 -1
- package/components/pds-modal2.js +1 -1
- package/components/pds-multiselect.js +1 -1
- package/components/pds-popover.js +1 -1
- package/components/pds-progress.js +1 -1
- package/components/pds-property.js +1 -1
- package/components/pds-radio-group.js +1 -1
- package/components/pds-radio.js +1 -1
- package/components/pds-row.js +1 -1
- package/components/pds-select.js +1 -1
- package/components/pds-sortable-item.js +1 -1
- package/components/pds-sortable.js +1 -1
- package/components/pds-switch.js +1 -1
- package/components/pds-tab.js +1 -1
- package/components/pds-table-body.js +1 -1
- package/components/pds-table-cell2.js +1 -1
- package/components/pds-table-head-cell2.js +1 -1
- package/components/pds-table-head.js +1 -1
- package/components/pds-table-row.js +1 -1
- package/components/pds-tabpanel.js +1 -1
- package/components/pds-tabs.js +1 -1
- package/components/pds-text2.js +1 -1
- package/components/pds-textarea.js +1 -1
- package/components/pds-toast.js +1 -1
- package/components/pds-tooltip.js +1 -1
- package/dist/cjs/{attributes-DXvaSETR.js → attributes-BJ7KBHql.js} +18 -11
- package/dist/cjs/{index-D-QQKB0y.js → index-5Azb8EQG.js} +1 -1
- package/dist/cjs/{index-BQjWfQXw.js → index-jl_Q819j.js} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/keep-hydrated-CiXgkEYd.js +196 -0
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/mock-pds-modal.cjs.entry.js +3 -3
- package/dist/cjs/pds-accordion.cjs.entry.js +3 -3
- package/dist/cjs/pds-alert.cjs.entry.js +2 -2
- package/dist/cjs/pds-avatar.cjs.entry.js +3 -3
- package/dist/cjs/pds-box.cjs.entry.js +3 -3
- package/dist/cjs/pds-button.cjs.entry.js +3 -3
- package/dist/cjs/pds-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/pds-chip.cjs.entry.js +4 -4
- package/dist/cjs/pds-combobox.cjs.entry.js +187 -28
- package/dist/cjs/pds-container.cjs.entry.js +3 -3
- package/dist/cjs/pds-copytext.cjs.entry.js +5 -5
- package/dist/cjs/pds-datepicker.cjs.entry.js +5 -5
- package/dist/cjs/pds-divider.cjs.entry.js +3 -3
- package/dist/cjs/pds-drawer-content.cjs.entry.js +3 -3
- package/dist/cjs/pds-drawer-footer.cjs.entry.js +3 -3
- package/dist/cjs/pds-drawer-header.cjs.entry.js +3 -3
- package/dist/cjs/pds-drawer.cjs.entry.js +25 -12
- package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +3 -3
- package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +3 -3
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js +24 -12
- package/dist/cjs/pds-filter.cjs.entry.js +4 -4
- package/dist/cjs/pds-filters.cjs.entry.js +3 -3
- package/dist/cjs/pds-icon.cjs.entry.js +27 -4
- package/dist/cjs/pds-image.cjs.entry.js +4 -4
- package/dist/cjs/pds-input.cjs.entry.js +6 -6
- package/dist/cjs/pds-link.cjs.entry.js +5 -5
- package/dist/cjs/pds-loader.cjs.entry.js +4 -4
- package/dist/cjs/pds-modal-content.cjs.entry.js +4 -4
- package/dist/cjs/pds-modal-footer.cjs.entry.js +3 -3
- package/dist/cjs/pds-modal-header.cjs.entry.js +3 -3
- package/dist/cjs/pds-modal.cjs.entry.js +118 -33
- package/dist/cjs/pds-multiselect.cjs.entry.js +9 -8
- package/dist/cjs/pds-popover.cjs.entry.js +227 -37
- package/dist/cjs/pds-progress.cjs.entry.js +4 -4
- package/dist/cjs/pds-property.cjs.entry.js +3 -3
- package/dist/cjs/pds-radio-group.cjs.entry.js +6 -6
- package/dist/cjs/pds-radio.cjs.entry.js +7 -7
- package/dist/cjs/pds-row.cjs.entry.js +4 -4
- package/dist/cjs/pds-select.cjs.entry.js +5 -5
- package/dist/cjs/pds-sortable-item.cjs.entry.js +5 -5
- package/dist/cjs/pds-sortable.cjs.entry.js +4 -4
- package/dist/cjs/pds-switch.cjs.entry.js +7 -7
- package/dist/cjs/pds-tab.cjs.entry.js +13 -2
- package/dist/cjs/pds-table-body.cjs.entry.js +3 -3
- package/dist/cjs/pds-table-cell.cjs.entry.js +4 -4
- package/dist/cjs/pds-table-head-cell.cjs.entry.js +5 -5
- package/dist/cjs/pds-table-head.cjs.entry.js +3 -3
- package/dist/cjs/pds-table-row.cjs.entry.js +3 -3
- package/dist/cjs/pds-table.cjs.entry.js +2 -2
- package/dist/cjs/pds-tabpanel.cjs.entry.js +15 -3
- package/dist/cjs/pds-tabs.cjs.entry.js +111 -7
- package/dist/cjs/pds-text.cjs.entry.js +3 -3
- package/dist/cjs/pds-textarea.cjs.entry.js +8 -8
- package/dist/cjs/pds-toast.cjs.entry.js +5 -5
- package/dist/cjs/pds-tooltip.cjs.entry.js +4 -4
- package/dist/cjs/pine-core.cjs.js +3 -3
- package/dist/collection/components/pds-combobox/grouped-options-panel.js +21 -3
- package/dist/collection/components/pds-combobox/pds-combobox.css +42 -13
- package/dist/collection/components/pds-combobox/pds-combobox.js +166 -23
- package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +45 -0
- package/dist/collection/components/pds-container/pds-container.js +1 -1
- package/dist/collection/components/pds-copytext/pds-copytext.js +1 -1
- package/dist/collection/components/pds-datepicker/pds-datepicker.js +2 -2
- package/dist/collection/components/pds-divider/pds-divider.js +1 -1
- package/dist/collection/components/pds-drawer/pds-drawer-content/pds-drawer-content.js +1 -1
- package/dist/collection/components/pds-drawer/pds-drawer-footer/pds-drawer-footer.js +1 -1
- package/dist/collection/components/pds-drawer/pds-drawer-header/pds-drawer-header.js +1 -1
- package/dist/collection/components/pds-drawer/pds-drawer.css +4 -1
- package/dist/collection/components/pds-drawer/pds-drawer.js +54 -17
- package/dist/collection/components/pds-drawer/stories/pds-drawer.stories.js +6 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +1 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.js +1 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.css +19 -5
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +30 -9
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +1 -1
- package/dist/collection/components/pds-filters/pds-filters.js +1 -1
- package/dist/collection/components/pds-image/pds-image.js +2 -2
- package/dist/collection/components/pds-input/pds-input.js +2 -2
- package/dist/collection/components/pds-link/pds-link.js +2 -2
- package/dist/collection/components/pds-loader/pds-loader.js +1 -1
- package/dist/collection/components/pds-modal/pds-modal-content/pds-modal-content.js +2 -2
- package/dist/collection/components/pds-modal/pds-modal-footer/pds-modal-footer.js +1 -1
- package/dist/collection/components/pds-modal/pds-modal-header/pds-modal-header.js +1 -1
- package/dist/collection/components/pds-modal/pds-modal.js +117 -32
- package/dist/collection/components/pds-modal/test/mock-pds-modal.js +1 -1
- package/dist/collection/components/pds-multiselect/pds-multiselect.js +8 -7
- package/dist/collection/components/pds-popover/pds-popover.js +185 -35
- package/dist/collection/components/pds-progress/pds-progress.js +1 -1
- package/dist/collection/components/pds-property/pds-property.js +1 -1
- package/dist/collection/components/pds-radio/pds-radio.js +3 -3
- package/dist/collection/components/pds-radio-group/pds-radio-group.js +3 -3
- package/dist/collection/components/pds-row/pds-row.js +1 -1
- package/dist/collection/components/pds-select/pds-select.js +1 -1
- package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.js +1 -1
- package/dist/collection/components/pds-sortable/pds-sortable.js +1 -1
- package/dist/collection/components/pds-switch/pds-switch.js +3 -3
- package/dist/collection/components/pds-table/pds-table-body/pds-table-body.js +1 -1
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +2 -2
- package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +1 -1
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +2 -2
- package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +1 -1
- package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js +11 -0
- package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.js +13 -1
- package/dist/collection/components/pds-tabs/pds-tabs.js +111 -7
- package/dist/collection/components/pds-text/pds-text.js +1 -1
- package/dist/collection/components/pds-textarea/pds-textarea.js +4 -4
- package/dist/collection/components/pds-toast/pds-toast.js +3 -3
- package/dist/collection/components/pds-tooltip/pds-tooltip.js +2 -2
- package/dist/collection/utils/attributes.js +18 -11
- package/dist/collection/utils/css.js +41 -0
- package/dist/collection/utils/keep-hydrated.js +133 -6
- package/dist/docs.json +56 -12
- package/dist/esm/{attributes-CF5K2pxn.js → attributes-WXw_I_uJ.js} +18 -11
- package/dist/esm/{index-DxI-61GK.js → index-BJXk71tO.js} +1 -1
- package/dist/esm/{index-2HMD-zUO.js → index-Cw9J31qd.js} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/keep-hydrated-BLG6RDBt.js +190 -0
- package/dist/esm/loader.js +4 -4
- package/dist/esm/mock-pds-modal.entry.js +3 -3
- package/dist/esm/pds-accordion.entry.js +3 -3
- package/dist/esm/pds-alert.entry.js +2 -2
- package/dist/esm/pds-avatar.entry.js +3 -3
- package/dist/esm/pds-box.entry.js +3 -3
- package/dist/esm/pds-button.entry.js +3 -3
- package/dist/esm/pds-checkbox.entry.js +4 -4
- package/dist/esm/pds-chip.entry.js +4 -4
- package/dist/esm/pds-combobox.entry.js +187 -28
- package/dist/esm/pds-container.entry.js +3 -3
- package/dist/esm/pds-copytext.entry.js +5 -5
- package/dist/esm/pds-datepicker.entry.js +5 -5
- package/dist/esm/pds-divider.entry.js +3 -3
- package/dist/esm/pds-drawer-content.entry.js +3 -3
- package/dist/esm/pds-drawer-footer.entry.js +3 -3
- package/dist/esm/pds-drawer-header.entry.js +3 -3
- package/dist/esm/pds-drawer.entry.js +25 -12
- package/dist/esm/pds-dropdown-menu-item.entry.js +3 -3
- package/dist/esm/pds-dropdown-menu-separator.entry.js +3 -3
- package/dist/esm/pds-dropdown-menu.entry.js +24 -12
- package/dist/esm/pds-filter.entry.js +4 -4
- package/dist/esm/pds-filters.entry.js +3 -3
- package/dist/esm/pds-icon.entry.js +27 -4
- package/dist/esm/pds-image.entry.js +4 -4
- package/dist/esm/pds-input.entry.js +6 -6
- package/dist/esm/pds-link.entry.js +5 -5
- package/dist/esm/pds-loader.entry.js +4 -4
- package/dist/esm/pds-modal-content.entry.js +4 -4
- package/dist/esm/pds-modal-footer.entry.js +3 -3
- package/dist/esm/pds-modal-header.entry.js +3 -3
- package/dist/esm/pds-modal.entry.js +118 -33
- package/dist/esm/pds-multiselect.entry.js +9 -8
- package/dist/esm/pds-popover.entry.js +228 -38
- package/dist/esm/pds-progress.entry.js +4 -4
- package/dist/esm/pds-property.entry.js +3 -3
- package/dist/esm/pds-radio-group.entry.js +6 -6
- package/dist/esm/pds-radio.entry.js +7 -7
- package/dist/esm/pds-row.entry.js +4 -4
- package/dist/esm/pds-select.entry.js +5 -5
- package/dist/esm/pds-sortable-item.entry.js +5 -5
- package/dist/esm/pds-sortable.entry.js +4 -4
- package/dist/esm/pds-switch.entry.js +7 -7
- package/dist/esm/pds-tab.entry.js +13 -2
- package/dist/esm/pds-table-body.entry.js +3 -3
- package/dist/esm/pds-table-cell.entry.js +4 -4
- package/dist/esm/pds-table-head-cell.entry.js +5 -5
- package/dist/esm/pds-table-head.entry.js +3 -3
- package/dist/esm/pds-table-row.entry.js +3 -3
- package/dist/esm/pds-table.entry.js +2 -2
- package/dist/esm/pds-tabpanel.entry.js +15 -3
- package/dist/esm/pds-tabs.entry.js +111 -7
- package/dist/esm/pds-text.entry.js +3 -3
- package/dist/esm/pds-textarea.entry.js +8 -8
- package/dist/esm/pds-toast.entry.js +5 -5
- package/dist/esm/pds-tooltip.entry.js +4 -4
- package/dist/esm/pine-core.js +4 -4
- package/dist/esm-es5/attributes-WXw_I_uJ.js +1 -0
- package/dist/esm-es5/{index-2HMD-zUO.js → index-Cw9J31qd.js} +2 -2
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/keep-hydrated-BLG6RDBt.js +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/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-checkbox.entry.js +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-container.entry.js +1 -1
- package/dist/esm-es5/pds-copytext.entry.js +1 -1
- package/dist/esm-es5/pds-datepicker.entry.js +1 -1
- package/dist/esm-es5/pds-divider.entry.js +1 -1
- package/dist/esm-es5/pds-drawer-content.entry.js +1 -1
- package/dist/esm-es5/pds-drawer-footer.entry.js +1 -1
- package/dist/esm-es5/pds-drawer-header.entry.js +1 -1
- package/dist/esm-es5/pds-drawer.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-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-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-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-sortable-item.entry.js +1 -1
- package/dist/esm-es5/pds-sortable.entry.js +2 -2
- package/dist/esm-es5/pds-switch.entry.js +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-head-cell.entry.js +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-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/pine-core.js +1 -1
- package/dist/pine-core/index.esm.js +1 -1
- package/dist/pine-core/{p-9a7ee7cb.system.entry.js → p-0092444c.system.entry.js} +1 -1
- package/dist/pine-core/{p-d576e542.system.entry.js → p-01aa382c.system.entry.js} +1 -1
- package/dist/pine-core/{p-d69cfaa4.entry.js → p-02088776.entry.js} +1 -1
- package/dist/pine-core/p-049f126a.entry.js +1 -0
- package/dist/pine-core/{p-8b9d8fb5.system.entry.js → p-080cb087.system.entry.js} +1 -1
- package/dist/pine-core/{p-99317375.system.entry.js → p-0913f696.system.entry.js} +1 -1
- package/dist/pine-core/{p-5737182f.entry.js → p-0a84d220.entry.js} +1 -1
- package/dist/pine-core/{p-4c9cccdb.system.entry.js → p-0b71ecb6.system.entry.js} +2 -2
- package/dist/pine-core/{p-37d73369.system.entry.js → p-1437585e.system.entry.js} +1 -1
- package/dist/pine-core/p-153ba77b.entry.js +1 -0
- package/dist/pine-core/{p-22f041ee.system.entry.js → p-1ee86d87.system.entry.js} +1 -1
- package/dist/pine-core/{p-5decd81f.entry.js → p-208c7dbf.entry.js} +1 -1
- package/dist/pine-core/p-21fe6ee1.system.entry.js +1 -0
- package/dist/pine-core/p-24fbbb74.system.entry.js +1 -0
- package/dist/pine-core/{p-51dff046.system.entry.js → p-258770cf.system.entry.js} +1 -1
- package/dist/pine-core/{p-1f2e5958.entry.js → p-258d5e83.entry.js} +1 -1
- package/dist/pine-core/{p-4e05a4f0.entry.js → p-26642718.entry.js} +1 -1
- package/dist/pine-core/{p-1b13f69c.system.entry.js → p-2ac2457b.system.entry.js} +1 -1
- package/dist/pine-core/p-2cb5483a.system.entry.js +1 -0
- package/dist/pine-core/{p-1f263c0b.system.entry.js → p-341c38f1.system.entry.js} +1 -1
- package/dist/pine-core/{p-bd7da23e.system.entry.js → p-3a959459.system.entry.js} +1 -1
- package/dist/pine-core/{p-1e464117.entry.js → p-432d5ec7.entry.js} +1 -1
- package/dist/pine-core/{p-0de74105.entry.js → p-4849fda7.entry.js} +1 -1
- package/dist/pine-core/{p-f30d6192.system.entry.js → p-4d03d1e2.system.entry.js} +1 -1
- package/dist/pine-core/{p-2cb02706.entry.js → p-4de8f333.entry.js} +1 -1
- package/dist/pine-core/{p-152245fa.system.entry.js → p-4f94b4f1.system.entry.js} +1 -1
- package/dist/pine-core/{p-66cfef6d.system.entry.js → p-4fa63723.system.entry.js} +1 -1
- package/dist/pine-core/p-4fd454f6.entry.js +1 -0
- package/dist/pine-core/{p-70c6f0ed.system.entry.js → p-5442d983.system.entry.js} +1 -1
- package/dist/pine-core/{p-8027db25.entry.js → p-550c2fd3.entry.js} +1 -1
- package/dist/pine-core/{p-7d01e719.entry.js → p-55224683.entry.js} +1 -1
- package/dist/pine-core/{p-65e30a4c.entry.js → p-57a2f927.entry.js} +1 -1
- package/dist/pine-core/{p-721297b5.system.entry.js → p-5870b092.system.entry.js} +1 -1
- package/dist/pine-core/p-5a10784e.system.entry.js +3 -0
- package/dist/pine-core/{p-6d83ad2d.system.entry.js → p-5c90091e.system.entry.js} +1 -1
- package/dist/pine-core/p-602c197f.entry.js +1 -0
- package/dist/pine-core/{p-45fcc5b7.entry.js → p-6bf853c9.entry.js} +1 -1
- package/dist/pine-core/{p-5d014059.entry.js → p-6d3610f9.entry.js} +1 -1
- package/dist/pine-core/{p-343546b1.system.entry.js → p-6eec23a7.system.entry.js} +1 -1
- package/dist/pine-core/{p-5132b8a1.entry.js → p-72865997.entry.js} +1 -1
- package/dist/pine-core/p-74a05bcc.entry.js +1 -0
- package/dist/pine-core/p-75ee0403.entry.js +1 -0
- package/dist/pine-core/p-77395d62.system.entry.js +1 -0
- package/dist/pine-core/p-7a287635.system.entry.js +1 -0
- package/dist/pine-core/p-7a5b21d2.system.entry.js +1 -0
- package/dist/pine-core/{p-a83a6618.system.entry.js → p-7bf6563a.system.entry.js} +1 -1
- package/dist/pine-core/{p-71e3a89e.system.entry.js → p-8191498f.system.entry.js} +1 -1
- package/dist/pine-core/{p-0166c620.entry.js → p-82cf4ec6.entry.js} +1 -1
- package/dist/pine-core/{p-16c2aa63.entry.js → p-84e9b7da.entry.js} +1 -1
- package/dist/pine-core/{p-bdf68e53.system.entry.js → p-86040cac.system.entry.js} +1 -1
- package/dist/pine-core/p-875b0436.system.entry.js +1 -0
- package/dist/pine-core/{p-87f91e02.system.entry.js → p-8c8cc079.system.entry.js} +1 -1
- package/dist/pine-core/{p-ba1b79c7.system.entry.js → p-8cc302aa.system.entry.js} +1 -1
- package/dist/pine-core/{p-5b7f7760.entry.js → p-8d292b48.entry.js} +1 -1
- package/dist/pine-core/{p-650ccffb.entry.js → p-8f531063.entry.js} +1 -1
- package/dist/pine-core/p-9109b90a.entry.js +1 -0
- package/dist/pine-core/p-92ae6082.entry.js +1 -0
- package/dist/pine-core/p-94593f20.system.entry.js +1 -0
- package/dist/pine-core/p-945fb0b1.entry.js +1 -0
- package/dist/pine-core/{p-04fe5da7.system.entry.js → p-9880d251.system.entry.js} +1 -1
- package/dist/pine-core/p-99459e27.entry.js +1 -0
- package/dist/pine-core/{p-9835c74b.entry.js → p-9ab95438.entry.js} +1 -1
- package/dist/pine-core/{p-a6d09102.system.entry.js → p-9af131d6.system.entry.js} +1 -1
- package/dist/pine-core/{p-59491f98.entry.js → p-9dcd2cdb.entry.js} +1 -1
- package/dist/pine-core/{p-c00e46a5.system.entry.js → p-9e0f920a.system.entry.js} +1 -1
- package/dist/pine-core/p-BGLP3keB.js +1 -0
- package/dist/pine-core/p-BLG6RDBt.js +1 -0
- package/dist/pine-core/p-BR5nujVX.system.js +1 -0
- package/dist/pine-core/{p-BJlg6wq7.system.js → p-CGRdQc49.system.js} +2 -2
- package/dist/pine-core/{p-DeIDZHrg.js → p-CmSJytt1.js} +2 -2
- package/dist/pine-core/p-CuSNnuFu.system.js +1 -0
- package/dist/pine-core/{p-YQa3CeL9.system.js → p-Cy8cvR7I.system.js} +1 -1
- package/dist/pine-core/p-XW4H0W6i.system.js +1 -0
- package/dist/pine-core/p-a0344e30.entry.js +2 -0
- package/dist/pine-core/p-a0960b3d.system.entry.js +1 -0
- package/dist/pine-core/p-a1230a74.system.entry.js +1 -0
- package/dist/pine-core/{p-fbea5703.entry.js → p-a19cd59c.entry.js} +1 -1
- package/dist/pine-core/p-a787b34a.system.entry.js +1 -0
- package/dist/pine-core/p-a826f290.entry.js +1 -0
- package/dist/pine-core/{p-1ec4eeaf.system.entry.js → p-a85a6ab9.system.entry.js} +1 -1
- package/dist/pine-core/p-acce8eb2.entry.js +1 -0
- package/dist/pine-core/p-b1548a20.entry.js +1 -0
- package/dist/pine-core/p-b60ac7eb.system.entry.js +1 -0
- package/dist/pine-core/{p-93877d4a.entry.js → p-b69f04b7.entry.js} +1 -1
- package/dist/pine-core/p-b75b0d09.system.entry.js +1 -0
- package/dist/pine-core/{p-02857936.entry.js → p-b8e8a4ce.entry.js} +1 -1
- package/dist/pine-core/{p-622e91e3.entry.js → p-b914dde8.entry.js} +2 -2
- package/dist/pine-core/{p-5bc670be.system.entry.js → p-ba1f65c2.system.entry.js} +1 -1
- package/dist/pine-core/p-bb68431a.entry.js +1 -0
- package/dist/pine-core/{p-c8e89b61.system.entry.js → p-bd67156b.system.entry.js} +1 -1
- package/dist/pine-core/{p-db4319fd.entry.js → p-beb23781.entry.js} +1 -1
- package/dist/pine-core/p-bf30dec0.entry.js +1 -0
- package/dist/pine-core/p-bf5887e8.system.entry.js +1 -0
- package/dist/pine-core/{p-91f712f4.system.entry.js → p-bf7ee3b7.system.entry.js} +1 -1
- package/dist/pine-core/{p-b5838211.system.entry.js → p-c5c9ed36.system.entry.js} +1 -1
- package/dist/pine-core/{p-21115986.system.entry.js → p-cb6a3e4c.system.entry.js} +1 -1
- package/dist/pine-core/{p-1cf1fced.entry.js → p-cde8eb81.entry.js} +1 -1
- package/dist/pine-core/{p-1d75a9b1.system.entry.js → p-cf08a6dd.system.entry.js} +1 -1
- package/dist/pine-core/p-cfd012d4.entry.js +1 -0
- package/dist/pine-core/{p-5e8d73d4.entry.js → p-d2c91e7a.entry.js} +1 -1
- package/dist/pine-core/{p-7bbfb965.system.entry.js → p-db17c626.system.entry.js} +1 -1
- package/dist/pine-core/p-e0917a26.entry.js +1 -0
- package/dist/pine-core/p-e21ff692.entry.js +1 -0
- package/dist/pine-core/p-e5420660.entry.js +1 -0
- package/dist/pine-core/{p-585832b1.entry.js → p-e800a2b1.entry.js} +1 -1
- package/dist/pine-core/{p-8b0fbeb3.entry.js → p-e836a041.entry.js} +1 -1
- package/dist/pine-core/{p-506d3e80.entry.js → p-e8cb76e8.entry.js} +1 -1
- package/dist/pine-core/p-ea4d4741.system.entry.js +1 -0
- package/dist/pine-core/{p-419f57c9.entry.js → p-eb5465ce.entry.js} +1 -1
- package/dist/pine-core/{p-63119d23.entry.js → p-ebd0bff2.entry.js} +1 -1
- package/dist/pine-core/p-f029b7da.system.entry.js +1 -0
- package/dist/pine-core/{p-e337f32c.system.entry.js → p-f0d24298.system.entry.js} +1 -1
- package/dist/pine-core/{p-9b9f66b7.entry.js → p-f1702281.entry.js} +1 -1
- package/dist/pine-core/{p-238e5171.system.entry.js → p-f25e4731.system.entry.js} +1 -1
- package/dist/pine-core/{p-37d95be9.entry.js → p-f2c253d8.entry.js} +1 -1
- package/dist/pine-core/{p-a22091c4.system.entry.js → p-f77905aa.system.entry.js} +1 -1
- package/dist/pine-core/{p-bef04e15.system.entry.js → p-fc25b956.system.entry.js} +1 -1
- package/dist/pine-core/{p-f06ca8df.entry.js → p-ff3de72e.entry.js} +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-combobox/combobox-interface.d.ts +8 -1
- package/dist/types/components/pds-combobox/grouped-options-panel.d.ts +7 -1
- package/dist/types/components/pds-combobox/pds-combobox.d.ts +32 -0
- package/dist/types/components/pds-drawer/pds-drawer.d.ts +21 -9
- package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu.d.ts +5 -0
- package/dist/types/components/pds-modal/pds-modal.d.ts +10 -3
- package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +2 -1
- package/dist/types/components/pds-popover/pds-popover.d.ts +31 -1
- package/dist/types/components/pds-tabs/pds-tab/pds-tab.d.ts +3 -0
- package/dist/types/components/pds-tabs/pds-tabpanel/pds-tabpanel.d.ts +3 -0
- package/dist/types/components/pds-tabs/pds-tabs.d.ts +14 -2
- package/dist/types/components.d.ts +50 -35
- package/dist/types/utils/attributes.d.ts +2 -2
- package/dist/types/utils/css.d.ts +7 -0
- package/dist/types/utils/keep-hydrated.d.ts +29 -2
- package/dist/vscode.html-data.json +13 -6
- package/hydrate/index.js +961 -213
- package/hydrate/index.mjs +961 -213
- package/package.json +2 -2
- package/dist/cjs/keep-hydrated-iLS88j1Z.js +0 -67
- package/dist/esm/keep-hydrated-Dv7ssOTc.js +0 -63
- package/dist/esm-es5/attributes-CF5K2pxn.js +0 -1
- package/dist/esm-es5/keep-hydrated-Dv7ssOTc.js +0 -1
- package/dist/pine-core/p-1cd0acf0.system.entry.js +0 -1
- package/dist/pine-core/p-207c94da.entry.js +0 -1
- package/dist/pine-core/p-2357758d.system.entry.js +0 -1
- package/dist/pine-core/p-281efc69.entry.js +0 -1
- package/dist/pine-core/p-2ac9e90a.system.entry.js +0 -1
- package/dist/pine-core/p-2f539379.system.entry.js +0 -3
- package/dist/pine-core/p-347ae53c.system.entry.js +0 -1
- package/dist/pine-core/p-34b575b6.entry.js +0 -2
- package/dist/pine-core/p-3b1d8fae.entry.js +0 -1
- package/dist/pine-core/p-4414d442.system.entry.js +0 -1
- package/dist/pine-core/p-4e67e68e.entry.js +0 -1
- package/dist/pine-core/p-539ef98c.entry.js +0 -1
- package/dist/pine-core/p-56576b6e.entry.js +0 -1
- package/dist/pine-core/p-5ac84b2f.entry.js +0 -1
- package/dist/pine-core/p-63854c10.system.entry.js +0 -1
- package/dist/pine-core/p-73bc6e9f.system.entry.js +0 -1
- package/dist/pine-core/p-798839f7.system.entry.js +0 -1
- package/dist/pine-core/p-7e115d33.system.entry.js +0 -1
- package/dist/pine-core/p-834c678e.system.entry.js +0 -1
- package/dist/pine-core/p-912487fa.entry.js +0 -1
- package/dist/pine-core/p-969488f5.system.entry.js +0 -1
- package/dist/pine-core/p-9bcdfac2.entry.js +0 -1
- package/dist/pine-core/p-9d33bb05.entry.js +0 -1
- package/dist/pine-core/p-BMFBF3sJ.system.js +0 -1
- package/dist/pine-core/p-D2MUS7JO.js +0 -1
- package/dist/pine-core/p-D2yHYrxQ.system.js +0 -1
- package/dist/pine-core/p-Dv7ssOTc.js +0 -1
- package/dist/pine-core/p-TyevV8iv.system.js +0 -1
- package/dist/pine-core/p-afd5e2d7.entry.js +0 -1
- package/dist/pine-core/p-bde53290.system.entry.js +0 -1
- package/dist/pine-core/p-bf1aea9f.system.entry.js +0 -1
- package/dist/pine-core/p-c9395f43.system.entry.js +0 -1
- package/dist/pine-core/p-d5dd5599.entry.js +0 -1
- package/dist/pine-core/p-dc81ffff.entry.js +0 -1
- package/dist/pine-core/p-e46f7541.system.entry.js +0 -1
- package/dist/pine-core/p-e7ba30dd.system.entry.js +0 -1
- package/dist/pine-core/p-ed3dd3d2.entry.js +0 -1
- package/dist/pine-core/p-eee4f146.entry.js +0 -1
- package/dist/pine-core/p-f01e35e2.entry.js +0 -1
- package/dist/pine-core/p-f2e0da9a.entry.js +0 -1
- package/dist/pine-core/p-fc6ac917.entry.js +0 -1
- package/dist/pine-core/p-ffe276ef.entry.js +0 -1
- /package/dist/esm-es5/{index-DxI-61GK.js → index-BJXk71tO.js} +0 -0
- /package/dist/pine-core/{p-DxI-61GK.js → p-BJXk71tO.js} +0 -0
- /package/dist/pine-core/{p-CnO10OxH.system.js → p-n3_ytl_p.system.js} +0 -0
package/hydrate/index.mjs
CHANGED
|
@@ -150,6 +150,109 @@ const isStencilClass = (el, name) => {
|
|
|
150
150
|
const classNamesOf = (classes) => typeof classes === 'string'
|
|
151
151
|
? classes.split(/\s+/).filter(Boolean)
|
|
152
152
|
: Object.keys(classes).filter((name) => classes[name]);
|
|
153
|
+
// Each restore that writes something counts. A real strip costs one, but a script that undoes the
|
|
154
|
+
// restore as soon as it lands (from a MutationObserver) keeps both going forever, all in
|
|
155
|
+
// microtasks, so the page never renders or takes input. More writes than this before the next task
|
|
156
|
+
// means that kind of fight. A script that undoes it from a timer or animation frame gets a fresh
|
|
157
|
+
// budget each task; the page stays responsive then, so that fight isn't capped.
|
|
158
|
+
const MAX_RESTORES_PER_TASK = 5;
|
|
159
|
+
// Callbacks waiting for the next task, all run by one message. A MessageChannel message isn't slowed
|
|
160
|
+
// down like a timer is in a background tab (or frozen by test fake timers); a timer is the fallback
|
|
161
|
+
// where it's missing. One message for all of them, so a morph that strips many hosts doesn't open a
|
|
162
|
+
// channel for each.
|
|
163
|
+
const nextTaskCallbacks = new Set();
|
|
164
|
+
const runNextTaskCallbacks = () => {
|
|
165
|
+
const callbacks = Array.from(nextTaskCallbacks);
|
|
166
|
+
nextTaskCallbacks.clear();
|
|
167
|
+
callbacks.forEach((callback) => callback());
|
|
168
|
+
};
|
|
169
|
+
const onNextTask = (callback) => {
|
|
170
|
+
nextTaskCallbacks.add(callback);
|
|
171
|
+
if (nextTaskCallbacks.size > 1)
|
|
172
|
+
return;
|
|
173
|
+
if (typeof MessageChannel === 'undefined') {
|
|
174
|
+
setTimeout(runNextTaskCallbacks);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const channel = new MessageChannel();
|
|
178
|
+
channel.port1.onmessage = () => {
|
|
179
|
+
channel.port1.close();
|
|
180
|
+
runNextTaskCallbacks();
|
|
181
|
+
};
|
|
182
|
+
channel.port2.postMessage(null);
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* The restore kind for a host's own classes, styles and attributes, shared by a component's own
|
|
186
|
+
* host restore and `keepPineHydrated`: one fight on a host's classes stops both, and warns once.
|
|
187
|
+
*/
|
|
188
|
+
const HOST_RESTORE = 'host';
|
|
189
|
+
/**
|
|
190
|
+
* Remembers the Stencil classes an element has had, and returns all of them. A restore can't read
|
|
191
|
+
* them from the latest mutation alone: after a script's last strip they're gone from its old value
|
|
192
|
+
* too, and the next change would restore nothing.
|
|
193
|
+
*/
|
|
194
|
+
const stencilClassesOf = (seen, el, oldValue) => {
|
|
195
|
+
[...classNamesOf(oldValue !== null && oldValue !== void 0 ? oldValue : ''), ...Array.from(el.classList)]
|
|
196
|
+
.filter((name) => isStencilClass(el, name))
|
|
197
|
+
.forEach((name) => seen.add(name));
|
|
198
|
+
return Array.from(seen);
|
|
199
|
+
};
|
|
200
|
+
// What each element has already been warned about, by kind of restore. A host with its own restore
|
|
201
|
+
// is also watched for its Stencil classes, so one fight on its classes stops both and needs one
|
|
202
|
+
// warning; a fight over a trigger's ARIA is a different kind, and warns on its own. On the global
|
|
203
|
+
// object, like `OBSERVER` below, so two copies of Pine on a page share it.
|
|
204
|
+
const WARNED = Symbol.for('@pine-ds/core/restoreWarnings');
|
|
205
|
+
const warnedKinds = () => {
|
|
206
|
+
var _a;
|
|
207
|
+
const store = globalThis;
|
|
208
|
+
return ((_a = store[WARNED]) !== null && _a !== void 0 ? _a : (store[WARNED] = new WeakMap()));
|
|
209
|
+
};
|
|
210
|
+
/** Whether `el` was already warned about for `kind`; records it if not. */
|
|
211
|
+
const alreadyWarned = (el, kind) => {
|
|
212
|
+
var _a;
|
|
213
|
+
const kinds = (_a = warnedKinds().get(el)) !== null && _a !== void 0 ? _a : new Set();
|
|
214
|
+
warnedKinds().set(el, kinds);
|
|
215
|
+
if (kinds.has(kind))
|
|
216
|
+
return true;
|
|
217
|
+
kinds.add(kind);
|
|
218
|
+
return false;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Wraps a restore callback, which returns whether it wrote anything, so that it writes at most
|
|
222
|
+
* `MAX_RESTORES_PER_TASK` times before the next task (until the message posted after its first write
|
|
223
|
+
* runs). Past that, another script is undoing every restore as soon as it lands, so it stops and
|
|
224
|
+
* lets that script win rather than hang the page. What that script left stays until something
|
|
225
|
+
* changes the element again: the count resets on the next task, so a later change is restored, but
|
|
226
|
+
* nothing is restored on its own. The first give-up warns, logging `el` so it can be found in
|
|
227
|
+
* devtools; later ones, and other restores of the same `kind` giving up on the same element, are
|
|
228
|
+
* silent.
|
|
229
|
+
* @param restore - Puts back what something removed; returns `true` if it wrote anything
|
|
230
|
+
* @param warning - What the console warning says was given up
|
|
231
|
+
* @param el - The element being restored, logged with the warning
|
|
232
|
+
* @param kind - What's being restored; one warning per element for each kind
|
|
233
|
+
*/
|
|
234
|
+
const limitRestores = (restore, warning, el, kind = warning) => {
|
|
235
|
+
let writes = 0;
|
|
236
|
+
let warned = false;
|
|
237
|
+
return (...args) => {
|
|
238
|
+
if (writes >= MAX_RESTORES_PER_TASK) {
|
|
239
|
+
if (!warned) {
|
|
240
|
+
warned = true;
|
|
241
|
+
if (el && alreadyWarned(el, kind))
|
|
242
|
+
return;
|
|
243
|
+
// The warning as an argument, not the format string: it carries the tag name, which the HTML
|
|
244
|
+
// parser lets contain `%`.
|
|
245
|
+
console.warn('%s', warning, el);
|
|
246
|
+
}
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (!restore(...args))
|
|
250
|
+
return;
|
|
251
|
+
if (writes === 0)
|
|
252
|
+
onNextTask(() => (writes = 0));
|
|
253
|
+
writes += 1;
|
|
254
|
+
};
|
|
255
|
+
};
|
|
153
256
|
// On the global object, not in this module, so a page with two copies of Pine (the CDN build and a
|
|
154
257
|
// bundled `@pine-ds/react`) still has one observer.
|
|
155
258
|
const OBSERVER = Symbol.for('@pine-ds/core/keepPineHydrated');
|
|
@@ -160,8 +263,9 @@ const OBSERVER = Symbol.for('@pine-ds/core/keepPineHydrated');
|
|
|
160
263
|
* host restore of their own. It only restores classes the element had, so it never runs ahead of
|
|
161
264
|
* Stencil. It can't see inside shadow roots, which a morph doesn't reach either.
|
|
162
265
|
*
|
|
163
|
-
* A script that removes `hydrated` on purpose sees it come back
|
|
164
|
-
* appears
|
|
266
|
+
* A script that removes `hydrated` on purpose sees it come back. One that removes it every time it
|
|
267
|
+
* appears (from a `MutationObserver`, say) wins after a few rounds, and the component logs a console
|
|
268
|
+
* warning. The component then stays hidden, as that script left it, until its class changes again.
|
|
165
269
|
*
|
|
166
270
|
* Pine's global script calls this, so the CDN and `dist` builds get it on load. The custom-elements
|
|
167
271
|
* build (`@pine-ds/core/components/*`, `@pine-ds/react`) has no global script: call it once yourself.
|
|
@@ -174,14 +278,37 @@ const keepPineHydrated = () => {
|
|
|
174
278
|
const store = globalThis;
|
|
175
279
|
if (store[OBSERVER])
|
|
176
280
|
return;
|
|
281
|
+
// One capped restore per element, so a script fighting one component doesn't stop the others,
|
|
282
|
+
// and the Stencil classes each one has had.
|
|
283
|
+
const restores = new WeakMap();
|
|
284
|
+
const seen = new WeakMap();
|
|
285
|
+
const restoreFor = (el) => {
|
|
286
|
+
let restore = restores.get(el);
|
|
287
|
+
if (!restore) {
|
|
288
|
+
restore = limitRestores((names) => {
|
|
289
|
+
const missing = names.filter((name) => !el.classList.contains(name));
|
|
290
|
+
if (missing.length > 0)
|
|
291
|
+
el.classList.add(...missing);
|
|
292
|
+
return missing.length > 0;
|
|
293
|
+
}, `${el.localName}: stopped putting back its hydrated and scope classes, as another script keeps removing them.`, el, HOST_RESTORE);
|
|
294
|
+
restores.set(el, restore);
|
|
295
|
+
}
|
|
296
|
+
return restore;
|
|
297
|
+
};
|
|
177
298
|
const observer = new MutationObserver((records) => {
|
|
178
299
|
records.forEach(({ target, oldValue }) => {
|
|
179
300
|
const el = target;
|
|
180
|
-
if (
|
|
301
|
+
if (!el.localName.startsWith('pds-'))
|
|
181
302
|
return;
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
303
|
+
// No old value is a `class` being added. Stencil's first `hydrated` arrives that way, which
|
|
304
|
+
// needs nothing; for an element already seen, it's the class coming back after a removal.
|
|
305
|
+
if (oldValue == null && !seen.has(el))
|
|
306
|
+
return;
|
|
307
|
+
if (!seen.has(el))
|
|
308
|
+
seen.set(el, new Set());
|
|
309
|
+
const names = stencilClassesOf(seen.get(el), el, oldValue);
|
|
310
|
+
if (names.length > 0)
|
|
311
|
+
restoreFor(el)(names);
|
|
185
312
|
});
|
|
186
313
|
});
|
|
187
314
|
// The document rather than its root element, so replacing `<html>` doesn't end the watch.
|
|
@@ -5603,7 +5730,7 @@ class MockPdsModal {
|
|
|
5603
5730
|
'pds-modal__backdrop': true,
|
|
5604
5731
|
'open': this.open,
|
|
5605
5732
|
};
|
|
5606
|
-
return (hAsync("div", { key: '
|
|
5733
|
+
return (hAsync("div", { key: '3a526f6883d7e7df35985a145962f656621535c1', class: backdropClasses }, hAsync("div", { key: '3af0487dc8c8831903cd7c22ffbf3e708b067ad7', class: modalClasses, role: "dialog", "aria-modal": "true", "aria-labelledby": this.componentId ? `${this.componentId}-heading` : null, part: "modal" }, hAsync("div", { key: '94e6205042ee91dac0823901cc97b79e93a515f2', class: "pds-modal__header" }, hAsync("slot", { key: 'ca04b575ccceabd431e3f5c57189f17f9aae6089', name: "header" })), hAsync("div", { key: 'f8327a261e70b622add1dd4ee21b5f8e8d91e603', class: "pds-modal-content" }, hAsync("slot", { key: 'a1a9c30d0f5479b0004ace4544e3d96ae87465be' })), hAsync("div", { key: 'af5fa59922047eeec7cbf0a0e1ee4b472b16079c', class: "pds-modal__footer" }, hAsync("slot", { key: '3c469bf94bb3a26dfd8046a5eda481f9d55edca1', name: "footer" })))));
|
|
5607
5734
|
}
|
|
5608
5735
|
get el() { return getElement(this); }
|
|
5609
5736
|
static get style() { return pdsModalCss$1(); }
|
|
@@ -5625,7 +5752,7 @@ class MockPdsModal {
|
|
|
5625
5752
|
}; }
|
|
5626
5753
|
}
|
|
5627
5754
|
|
|
5628
|
-
/* pds-icons v10.
|
|
5755
|
+
/* pds-icons v10.6.0, ES Modules */
|
|
5629
5756
|
|
|
5630
5757
|
const addCircle = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' class='pdsicon'><path fill-rule='evenodd' d='M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18M1 12C1 5.925 5.925 1 12 1s11 4.925 11 11-4.925 11-11 11S1 18.075 1 12m11-5a1 1 0 0 1 1 1v3h3a1 1 0 1 1 0 2h-3v3a1 1 0 1 1-2 0v-3H8a1 1 0 1 1 0-2h3V8a1 1 0 0 1 1-1'/></svg>";
|
|
5631
5758
|
const calendarSimple = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' class='pdsicon'><path fill-rule='evenodd' d='M8 1a1 1 0 0 1 1 1v1h6V2a1 1 0 1 1 2 0v1.002c.476.003.891.013 1.252.042.562.046 1.079.145 1.564.392a4 4 0 0 1 1.748 1.748c.247.485.346 1.002.392 1.564C22 7.29 22 7.954 22 8.758v8.483c0 .805 0 1.47-.044 2.01-.046.563-.145 1.08-.392 1.565a4 4 0 0 1-1.748 1.748c-.485.247-1.002.346-1.564.392-.541.044-1.206.044-2.01.044H7.758c-.805 0-1.47 0-2.01-.044-.563-.046-1.08-.145-1.565-.392a4 4 0 0 1-1.748-1.748c-.247-.485-.346-1.002-.392-1.564C2 18.71 2 18.046 2 17.242V8.758c0-.805 0-1.47.044-2.01.046-.563.145-1.08.392-1.565a4 4 0 0 1 1.748-1.748c.485-.247 1.002-.346 1.564-.392.361-.03.777-.04 1.252-.042V2a1 1 0 0 1 1-1M7 5.002c-.446.003-.795.012-1.089.036-.438.035-.663.1-.819.18a2 2 0 0 0-.874.874c-.08.156-.145.38-.18.819C4 7.361 4 7.943 4 8.8V9h16v-.2c0-.857 0-1.439-.038-1.889-.035-.438-.1-.663-.18-.819a2 2 0 0 0-.874-.874c-.156-.08-.38-.145-.819-.18A15 15 0 0 0 17 5.002V6a1 1 0 1 1-2 0V5H9v1a1 1 0 1 1-2 0zM20 11H4v6.2c0 .857 0 1.439.038 1.889.035.438.1.663.18.819a2 2 0 0 0 .874.874c.156.08.38.145.819.18C6.361 21 6.943 21 7.8 21h8.4c.857 0 1.439 0 1.889-.038.438-.035.663-.1.819-.18a2 2 0 0 0 .874-.874c.08-.156.145-.38.18-.819.037-.45.038-1.032.038-1.889z'/></svg>";
|
|
@@ -6070,7 +6197,7 @@ const debounce = (func, wait = 0) => {
|
|
|
6070
6197
|
* @param options.semanticMap - Optional mapping of semantic names to CSS variables
|
|
6071
6198
|
* @returns Normalized color value or undefined for invalid inputs
|
|
6072
6199
|
*/
|
|
6073
|
-
const normalizeColorValue = (value, options) => {
|
|
6200
|
+
const normalizeColorValue$1 = (value, options) => {
|
|
6074
6201
|
if (!value)
|
|
6075
6202
|
return undefined;
|
|
6076
6203
|
const trimmed = value.trim();
|
|
@@ -6114,7 +6241,7 @@ const setColor = (color, customColors) => {
|
|
|
6114
6241
|
// Merge defaults with any custom overrides so defaults are preserved
|
|
6115
6242
|
const semanticMap = Object.assign(Object.assign({}, defaultColors), (customColors || {}));
|
|
6116
6243
|
// Use the shared normalizer so components accept semantic names, raw tokens, var(...), or literals
|
|
6117
|
-
const resolved = normalizeColorValue(color, { semanticMap });
|
|
6244
|
+
const resolved = normalizeColorValue$1(color, { semanticMap });
|
|
6118
6245
|
// Ensure we never return an undefined style value; if unresolved, omit the property
|
|
6119
6246
|
if (!resolved)
|
|
6120
6247
|
return {};
|
|
@@ -6130,10 +6257,14 @@ const setColor = (color, customColors) => {
|
|
|
6130
6257
|
* @param attributes - Attribute names and the values they should have
|
|
6131
6258
|
*/
|
|
6132
6259
|
const setAttributesIfChanged = (el, attributes) => {
|
|
6260
|
+
let wrote = false;
|
|
6133
6261
|
Object.entries(attributes).forEach(([name, value]) => {
|
|
6134
|
-
if (el.getAttribute(name) !== value)
|
|
6262
|
+
if (el.getAttribute(name) !== value) {
|
|
6135
6263
|
el.setAttribute(name, value);
|
|
6264
|
+
wrote = true;
|
|
6265
|
+
}
|
|
6136
6266
|
});
|
|
6267
|
+
return wrote;
|
|
6137
6268
|
};
|
|
6138
6269
|
/**
|
|
6139
6270
|
* Puts back any of `expected`'s classes or style properties that are missing from `el`. It only
|
|
@@ -6146,10 +6277,9 @@ const restoreHostStyling = (el, { classes, styles }) => {
|
|
|
6146
6277
|
const missing = classes.filter((name) => !el.classList.contains(name));
|
|
6147
6278
|
if (missing.length > 0)
|
|
6148
6279
|
el.classList.add(...missing);
|
|
6149
|
-
Object.entries(styles).
|
|
6150
|
-
|
|
6151
|
-
|
|
6152
|
-
});
|
|
6280
|
+
const missingStyles = Object.entries(styles).filter(([name, value]) => value && el.style.getPropertyValue(name) === '');
|
|
6281
|
+
missingStyles.forEach(([name, value]) => el.style.setProperty(name, value));
|
|
6282
|
+
return missing.length > 0 || missingStyles.length > 0;
|
|
6153
6283
|
};
|
|
6154
6284
|
/**
|
|
6155
6285
|
* Watches a component's own host and puts back what it rendered when something strips it. A DOM
|
|
@@ -6166,16 +6296,18 @@ const restoreHostStyling = (el, { classes, styles }) => {
|
|
|
6166
6296
|
const keepHostStyling = (el, expected) => {
|
|
6167
6297
|
if (typeof MutationObserver === 'undefined')
|
|
6168
6298
|
return null;
|
|
6169
|
-
const
|
|
6299
|
+
const tag = el.tagName.toLowerCase();
|
|
6300
|
+
const seenStencilClasses = new Set();
|
|
6301
|
+
const observer = new MutationObserver(limitRestores((records) => {
|
|
6170
6302
|
const styling = expected();
|
|
6171
6303
|
// A strip takes Stencil's own classes too: without `hydrated` Stencil hides the component, and
|
|
6172
6304
|
// without its scope classes a scoped component's CSS stops matching. Put back only the ones that
|
|
6173
6305
|
// were there, so this never runs ahead of Stencil. `keepPineHydrated` does the same for every
|
|
6174
6306
|
// component, but the custom-elements build only runs it if the consumer calls it, so keep this.
|
|
6175
6307
|
const stencilClasses = records
|
|
6176
|
-
.filter((record) => record.attributeName === 'class'
|
|
6177
|
-
.flatMap((record) =>
|
|
6178
|
-
restoreHostStyling(el, Object.assign(Object.assign({}, styling), { classes: [...styling.classes, ...stencilClasses] }));
|
|
6308
|
+
.filter((record) => record.attributeName === 'class')
|
|
6309
|
+
.flatMap((record) => stencilClassesOf(seenStencilClasses, el, record.oldValue));
|
|
6310
|
+
let wrote = restoreHostStyling(el, Object.assign(Object.assign({}, styling), { classes: [...styling.classes, ...stencilClasses] }));
|
|
6179
6311
|
// An attribute the component still renders comes back with the value it had, which is what
|
|
6180
6312
|
// Stencil wrote (a boolean `true` lands as an empty value). One it stopped rendering stays
|
|
6181
6313
|
// removed, since that was Stencil's own write.
|
|
@@ -6185,8 +6317,10 @@ const keepHostStyling = (el, expected) => {
|
|
|
6185
6317
|
if (oldValue == null || rendered == null || rendered === false || el.hasAttribute(name))
|
|
6186
6318
|
return;
|
|
6187
6319
|
el.setAttribute(name, oldValue);
|
|
6320
|
+
wrote = true;
|
|
6188
6321
|
});
|
|
6189
|
-
|
|
6322
|
+
return wrote;
|
|
6323
|
+
}, `${tag}: stopped restoring its host, as another script keeps changing it. Use props instead.`, el, HOST_RESTORE));
|
|
6190
6324
|
observer.observe(el, { attributes: true, attributeOldValue: true });
|
|
6191
6325
|
return observer;
|
|
6192
6326
|
};
|
|
@@ -6444,8 +6578,8 @@ class PdsBox {
|
|
|
6444
6578
|
this.sizeXl == undefined ? 'pds-box' : ''}
|
|
6445
6579
|
`;
|
|
6446
6580
|
// Normalize so pds-box accepts --token, var(--token), or literals (no semantic names)
|
|
6447
|
-
const normalizedBackground = normalizeColorValue(this.backgroundColor);
|
|
6448
|
-
const normalizedBorder = normalizeColorValue(this.borderColor);
|
|
6581
|
+
const normalizedBackground = normalizeColorValue$1(this.backgroundColor);
|
|
6582
|
+
const normalizedBorder = normalizeColorValue$1(this.borderColor);
|
|
6449
6583
|
const boxInlineStyles = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (normalizedBackground && { '--color-background-box': normalizedBackground })), (normalizedBorder && { '--color-border-box': normalizedBorder })), (this.minHeight && { '--sizing-min-height-box': this.minHeight })), (this.minWidth && { '--sizing-min-width-box': this.minWidth })), (this.flex && !['none', 'grow', 'shrink'].includes(this.flex) && { 'flex': this.flex }));
|
|
6450
6584
|
this.hostKeeper.record(boxClasses, boxInlineStyles);
|
|
6451
6585
|
return (hAsync(Host, { key: 'dc4d939daf38b24ecbfa0eb0a95ab67b97a85665', class: boxClasses, style: boxInlineStyles }));
|
|
@@ -9233,11 +9367,11 @@ class PdsChip {
|
|
|
9233
9367
|
}
|
|
9234
9368
|
// Custom properties rather than inline colors on the dot/icon, so a
|
|
9235
9369
|
// consumer's ::part(dot) or ::part(icon) rule still wins over the prop.
|
|
9236
|
-
const dotColor = normalizeColorValue(this.dotColor, { semanticMap: SENTIMENT_DOT_COLORS });
|
|
9370
|
+
const dotColor = normalizeColorValue$1(this.dotColor, { semanticMap: SENTIMENT_DOT_COLORS });
|
|
9237
9371
|
if (dotColor !== undefined) {
|
|
9238
9372
|
styles['--pds-chip-dot-color'] = dotColor;
|
|
9239
9373
|
}
|
|
9240
|
-
const iconColor = normalizeColorValue(this.iconColor, { semanticMap: SENTIMENT_DOT_COLORS });
|
|
9374
|
+
const iconColor = normalizeColorValue$1(this.iconColor, { semanticMap: SENTIMENT_DOT_COLORS });
|
|
9241
9375
|
if (iconColor !== undefined) {
|
|
9242
9376
|
styles['--pds-chip-icon-color'] = iconColor;
|
|
9243
9377
|
}
|
|
@@ -10734,7 +10868,14 @@ const PINE_ICON_NAME$1 = /^[a-z0-9-]+$/i;
|
|
|
10734
10868
|
* only ever passed to `pds-icon` as `name`.
|
|
10735
10869
|
*/
|
|
10736
10870
|
function groupIconOf(optgroup) {
|
|
10737
|
-
|
|
10871
|
+
return iconOf(optgroup);
|
|
10872
|
+
}
|
|
10873
|
+
/** An option's `data-icon` when it's a Pine icon name, or null; the same check as a group's. */
|
|
10874
|
+
function optionIconOf(option) {
|
|
10875
|
+
return iconOf(option);
|
|
10876
|
+
}
|
|
10877
|
+
function iconOf(element) {
|
|
10878
|
+
const icon = element.getAttribute('data-icon');
|
|
10738
10879
|
return icon !== null && PINE_ICON_NAME$1.test(icon) ? icon : null;
|
|
10739
10880
|
}
|
|
10740
10881
|
/** An option is disabled by its own `disabled` or its optgroup's, as in a native select. */
|
|
@@ -10752,8 +10893,12 @@ function isGroupDisabled(group) {
|
|
|
10752
10893
|
* Groups the combobox's filtered items for the panel: each optgroup becomes one entry holding its
|
|
10753
10894
|
* options, and ungrouped options stay where they are. Indexes count options in list order, the
|
|
10754
10895
|
* same as the inline listbox, so `data-option-index` means the same thing in every mode.
|
|
10896
|
+
*
|
|
10897
|
+
* `position`, when given, orders the entries instead: an ungrouped option or an optgroup it knows
|
|
10898
|
+
* goes where it reports, and the rest keep their place after those. Options from the `options` prop
|
|
10899
|
+
* use it, so a row the data lists between two groups is drawn between them.
|
|
10755
10900
|
*/
|
|
10756
|
-
function buildPanelEntries(items) {
|
|
10901
|
+
function buildPanelEntries(items, position) {
|
|
10757
10902
|
const entries = [];
|
|
10758
10903
|
const groups = new Map();
|
|
10759
10904
|
let index = 0;
|
|
@@ -10775,7 +10920,14 @@ function buildPanelEntries(items) {
|
|
|
10775
10920
|
entries.push({ kind: 'option', option, index: index++ });
|
|
10776
10921
|
}
|
|
10777
10922
|
});
|
|
10778
|
-
|
|
10923
|
+
if (position === undefined)
|
|
10924
|
+
return entries;
|
|
10925
|
+
const at = (entry) => { var _a; return (_a = position(entry.kind === 'group' ? entry.group.optgroup : entry.option)) !== null && _a !== void 0 ? _a : Infinity; };
|
|
10926
|
+
// Array.prototype.sort is stable, so entries with no position keep their order.
|
|
10927
|
+
return entries.sort((a, b) => {
|
|
10928
|
+
const [first, second] = [at(a), at(b)];
|
|
10929
|
+
return first === second ? 0 : first < second ? -1 : 1;
|
|
10930
|
+
});
|
|
10779
10931
|
}
|
|
10780
10932
|
/** The label of the optgroup an option sits in, or null for an ungrouped option. */
|
|
10781
10933
|
function groupLabelOf(option) {
|
|
@@ -10983,7 +11135,7 @@ class FlyoutController {
|
|
|
10983
11135
|
}
|
|
10984
11136
|
}
|
|
10985
11137
|
|
|
10986
|
-
const pdsComboboxCss = () => `:host{display:block}:host([aria-disabled=true]) .pds-combobox__input-icon{color:var(--pine-color-text-disabled);pointer-events:none}.pds-combobox{position:relative}.pds-combobox__label{color:var(--pine-color-text-label);display:block;font:var(--pine-typography-body-medium);letter-spacing:var(--pine-letter-spacing);-webkit-margin-after:var(--pine-dimension-2xs);margin-block-end:var(--pine-dimension-2xs)}.pds-combobox__input-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;position:relative;width:100%}.pds-combobox__input{background:var(--pine-color-background-container);border:var(--pine-border);border-radius:var(--pine-dimension-125);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--pine-color-text-strong);-ms-flex:1;flex:1;font:var(--pine-typography-body-medium);padding:var(--pine-dimension-xs) var(--pine-dimension-450) var(--pine-dimension-xs) var(--pine-dimension-150);-webkit-transition:border-color var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease;width:100%}.pds-combobox__input:hover:not(:disabled){border-color:var(--pine-color-border-hover)}.pds-combobox__input:disabled{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);color:var(--pine-color-text-disabled);cursor:not-allowed}.pds-combobox__input:disabled::-webkit-input-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled::-moz-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled:-ms-input-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled::-ms-input-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled::placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:focus-visible{border-color:var(--pine-color-border-active);outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-combobox__input::-webkit-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input::-moz-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input:-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input::-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input::placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input.pds-combobox__input--invalid{background:var(--pine-color-red-050);border-color:var(--pine-color-border-danger)}:host-context([data-theme=dark]) .pds-combobox__input.pds-combobox__input--invalid{background:var(--pine-color-red-950)}.pds-combobox__input.pds-combobox__input--invalid:hover:not(:disabled){border-color:var(--pine-color-border-danger)}.pds-combobox__input.pds-combobox__input--invalid:focus-visible{outline-color:var(--pine-color-focus-ring-danger)}.pds-combobox__input-icon{color:var(--pine-color-text-secondary);inset-inline-end:var(--pine-dimension-150);pointer-events:none;position:absolute;z-index:calc(var(--pine-z-index-raised) - 1)}.pds-combobox__helper{color:var(--pine-color-text-message);font:var(--pine-typography-body-sm-medium);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs)}.pds-combobox__error{-ms-flex-align:start;align-items:flex-start;color:var(--pine-color-text-message-danger);display:-ms-flexbox;display:flex;font:var(--pine-typography-body-sm-medium);gap:var(--pine-dimension-2xs);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs)}.pds-combobox__error pds-icon{-ms-flex-negative:0;flex-shrink:0;-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025)}.pds-combobox__listbox{background:var(--pine-color-background-overlay);border:0;border-radius:var(--pine-dimension-125);-webkit-box-shadow:var(--pine-box-shadow);box-shadow:var(--pine-box-shadow);list-style:none;margin:0;min-width:220px;overflow-y:auto;padding:var(--pine-dimension-xs);position:absolute;z-index:var(--pine-z-index-raised)}.pds-combobox__option{-ms-flex-align:center;align-items:center;background:transparent;border-radius:var(--pine-dimension-125);color:var(--pine-color-text-secondary);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);-ms-flex-pack:justify;justify-content:space-between;padding:var(--pine-dimension-xs) var(--pine-dimension-sm);position:relative;-webkit-transition:background 0.15s;transition:background 0.15s}.pds-combobox__option[aria-selected=true]{background:var(--pine-color-background-muted)}.pds-combobox__option:focus-visible{outline:0}.pds-combobox__option.pds-combobox__option--layout .pds-combobox__option-layout-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__option.pds-combobox__option--chip .pds-combobox__option-chip{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__option:last-child{-webkit-margin-after:0;margin-block-end:0}.pds-combobox__option--highlighted,.pds-combobox__option[selected],.pds-combobox__option--selected{background:var(--pine-color-background-muted)}.pds-combobox__option--disabled,.pds-combobox__group-row--disabled>.pds-combobox__group-row-trigger,.pds-combobox__group-back--disabled>.pds-combobox__group-back-trigger,.pds-combobox__group--disabled>.pds-combobox__group-label{color:var(--pine-color-text-disabled)}.pds-combobox__option--disabled{cursor:not-allowed}.pds-combobox__option--disabled .pds-combobox__option-chip,.pds-combobox__option--disabled .pds-combobox__option-layout-wrapper{opacity:0.5}.pds-combobox__option-check{color:currentColor;font-size:var(--pine-dimension-150);-webkit-margin-start:var(--pine-dimension-150);margin-inline-start:var(--pine-dimension-150)}.pds-combobox__group-label{color:var(--pine-color-text-tertiary);cursor:default;font:var(--pine-typography-heading-caption);-webkit-margin-after:var(--pine-dimension-2xs);margin-block-end:var(--pine-dimension-2xs);-webkit-margin-before:var(--pine-dimension-150);margin-block-start:var(--pine-dimension-150);padding:var(--pine-dimension-2xs) var(--pine-dimension-sm);text-transform:uppercase}.pds-combobox__group-label:first-child{-webkit-margin-before:0;margin-block-start:0}.pds-combobox__group{list-style:none;-webkit-margin-before:var(--pine-dimension-150);margin-block-start:var(--pine-dimension-150)}.pds-combobox__group:first-child{-webkit-margin-before:0;margin-block-start:0}.pds-combobox__group-list{list-style:none;margin:0;padding:0}.pds-combobox__listbox--grouped .pds-combobox__group-list{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs)}.pds-combobox__group-label--with-icon{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs)}.pds-combobox__group-icon{-ms-flex-negative:0;flex-shrink:0}.pds-combobox__group-row{list-style:none;position:relative}.pds-combobox__group-row-trigger{-ms-flex-align:center;align-items:center;border-radius:var(--pine-dimension-125);color:var(--pine-color-text-secondary);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);gap:var(--pine-dimension-xs);-ms-flex-pack:justify;justify-content:space-between;padding:var(--pine-dimension-xs) var(--pine-dimension-sm);-webkit-transition:background 0.15s;transition:background 0.15s}.pds-combobox__group-row--open>.pds-combobox__group-row-trigger,.pds-combobox__group-row--has-selection>.pds-combobox__group-row-trigger,.pds-combobox__group-row--highlighted>.pds-combobox__group-row-trigger,.pds-combobox__group-back--highlighted>.pds-combobox__group-row-trigger,.pds-combobox__group-row-trigger:hover{background:var(--pine-color-background-muted)}.pds-combobox__listbox--drill-in,.pds-combobox__listbox--drill-out{overflow-x:hidden}.pds-combobox__listbox--drill-in>.pds-combobox__group-back{-webkit-animation:pds-combobox-drill-from-end var(--pine-motion-duration-base) var(--pine-motion-easing-out);animation:pds-combobox-drill-from-end var(--pine-motion-duration-base) var(--pine-motion-easing-out)}.pds-combobox__listbox--drill-out>li{-webkit-animation:pds-combobox-drill-from-start var(--pine-motion-duration-base) var(--pine-motion-easing-out);animation:pds-combobox-drill-from-start var(--pine-motion-duration-base) var(--pine-motion-easing-out)}@-webkit-keyframes pds-combobox-drill-from-end{from{opacity:0;-webkit-transform:translateX(var(--pine-dimension-sm));transform:translateX(var(--pine-dimension-sm))}}@keyframes pds-combobox-drill-from-end{from{opacity:0;-webkit-transform:translateX(var(--pine-dimension-sm));transform:translateX(var(--pine-dimension-sm))}}@-webkit-keyframes pds-combobox-drill-from-start{from{opacity:0;-webkit-transform:translateX(calc(var(--pine-dimension-sm) * -1));transform:translateX(calc(var(--pine-dimension-sm) * -1))}}@keyframes pds-combobox-drill-from-start{from{opacity:0;-webkit-transform:translateX(calc(var(--pine-dimension-sm) * -1));transform:translateX(calc(var(--pine-dimension-sm) * -1))}}.pds-combobox__group-row--keyboard>.pds-combobox__group-row-trigger,.pds-combobox__group-back--keyboard>.pds-combobox__group-row-trigger{outline:var(--pine-outline-focus);outline-offset:calc(var(--pine-border-width) * -2)}.pds-combobox__group-row-label{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs);min-width:0}.pds-combobox__group-row-caret{-ms-flex-negative:0;flex-shrink:0}.pds-combobox__listbox--grouped,.pds-combobox__flyout{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs);padding:var(--pine-dimension-2xs)}.pds-combobox__flyout{background:var(--pine-color-background-overlay);border-radius:var(--pine-dimension-125);-webkit-box-shadow:var(--pine-box-shadow);box-shadow:var(--pine-box-shadow);list-style:none;margin:0;overflow-y:auto;position:fixed;visibility:hidden;width:-webkit-max-content;width:-moz-max-content;width:max-content;z-index:1}.pds-combobox__listbox--with-search{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:0}.pds-combobox__listbox-options{-ms-flex:1;flex:1;list-style:none;margin:0;min-height:0;overflow-y:auto;padding:var(--pine-dimension-xs)}.pds-combobox__listbox-options.pds-combobox__listbox--grouped{padding:var(--pine-dimension-2xs)}.pds-combobox__panel-search{-ms-flex-align:center;align-items:center;-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;gap:var(--pine-dimension-xs);padding:var(--pine-dimension-sm)}.pds-combobox__panel-search pds-icon{color:var(--pine-color-text-muted);-ms-flex-negative:0;flex-shrink:0}.pds-combobox__panel-search:focus-within{border-block-end-color:var(--pine-color-border-active)}.pds-combobox__panel-search-input{background:transparent;border:0;color:var(--pine-color-text-strong);-ms-flex:1;flex:1;font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);min-width:0;outline:none;padding:0}.pds-combobox__panel-search-input::-webkit-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input::-moz-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input:-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input::-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input::placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__group-back{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs);list-style:none}.pds-combobox__group-back-trigger{-ms-flex-pack:start;justify-content:flex-start}.pds-combobox__listbox-options--drilled-in.pds-combobox__listbox--grouped{-webkit-padding-before:0;padding-block-start:0}.pds-combobox__listbox-options--drilled-in:focus{outline:none}.pds-combobox__listbox-options--drilled-in:focus .pds-combobox__group-back-trigger{border-block-end-color:var(--pine-color-border-active)}:where(.pds-combobox__listbox-options--drilled-in) .pds-combobox__group-back-trigger{background-color:var(--pine-color-background-overlay);-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);border-radius:0;color:var(--pine-color-text-strong);font:var(--pine-typography-body);inset-block-start:0;letter-spacing:var(--pine-letter-spacing);margin-inline:calc(var(--pine-dimension-2xs) * -1);padding:var(--pine-dimension-sm);position:-webkit-sticky;position:sticky;z-index:1}.pds-combobox__drill-in-options{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs);list-style:none;margin:0;padding:0}.visually-hidden{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pds-combobox__loading{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-150)}.pds-combobox__empty{color:var(--pine-color-text-tertiary);padding:var(--pine-dimension-150) var(--pine-dimension-sm);text-align:center}.pds-combobox__load-more{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-150)}:host(.pds-combobox-dropdown-portal) .pds-combobox__listbox{position:fixed;z-index:var(--pine-z-index-priority)}.pds-combobox__button-trigger{-ms-flex-align:center;align-items:center;background:var(--color-background-default, var(--pine-color-secondary));border:var(--pine-border);border-radius:var(--pine-border-radius-full);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--color-text-default, var(--pine-color-text-inverse-emphasis));cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);-ms-flex-pack:justify;justify-content:space-between;min-height:var(--pine-dimension-450);outline:none;padding:0 var(--pine-dimension-sm);-webkit-transition:border-color 0.15s, background 0.15s, -webkit-box-shadow 0.15s;transition:border-color 0.15s, background 0.15s, -webkit-box-shadow 0.15s;transition:border-color 0.15s, box-shadow 0.15s, background 0.15s;transition:border-color 0.15s, box-shadow 0.15s, background 0.15s, -webkit-box-shadow 0.15s;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pds-combobox__button-trigger .pds-combobox__button-trigger-layout-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.pds-combobox__button-trigger .trigger-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__button-trigger:focus-visible{border-color:var(--color-border-focus, var(--pine-color-border));-webkit-box-shadow:0 0 0 2px var(--color-outline, var(--pine-color-focus-ring));box-shadow:0 0 0 2px var(--color-outline, var(--pine-color-focus-ring))}.pds-combobox__button-trigger:hover{background:var(--color-background-hover, var(--pine-color-secondary-hover));border-color:var(--color-border-hover, var(--pine-color-border-hover))}.pds-combobox__button-trigger[aria-disabled=true],.pds-combobox__button-trigger:disabled{background:var(--color-background-disabled, var(--pine-color-secondary-disabled));border-color:var(--color-border-disabled, var(--pine-color-border-disabled));color:var(--color-text-disabled, var(--pine-color-text-secondary-disabled));cursor:not-allowed;opacity:0.6}.pds-combobox__button-trigger-label{color:inherit;-ms-flex:1 1 auto;flex:1 1 auto;text-align:start}.pds-combobox__button-trigger--input-shape{border-radius:var(--pine-dimension-125);font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);min-height:var(--pine-dimension-450);padding:calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-150)}.pds-combobox__button-trigger--secondary.pds-combobox__button-trigger--input-shape:not([aria-disabled=true]) .pds-combobox__button-trigger-label--placeholder{color:var(--pine-color-text-muted)}.pds-combobox__button-trigger-chevron{color:currentColor;-webkit-margin-start:var(--pine-dimension-150);margin-inline-start:var(--pine-dimension-150)}.pds-combobox__button-trigger--primary{--color-background-default:var(--pine-color-primary);--color-background-hover:var(--pine-color-primary-hover);--color-background-disabled:var(--pine-color-primary-disabled);--color-border-default:var(--pine-color-primary);--color-border-hover:var(--pine-color-primary-hover);--color-border-disabled:var(--pine-color-primary-disabled);--color-border-focus:var(--pine-color-primary);--color-text-default:var(--pine-color-text-primary);--color-text-disabled:var(--pine-color-text-primary-disabled);--color-outline:var(--pine-color-focus-ring)}.pds-combobox__button-trigger--accent{--color-background-default:var(--pine-color-accent);--color-background-hover:var(--pine-color-accent-hover);--color-background-disabled:var(--pine-color-accent-disabled);--color-border-default:var(--pine-color-accent);--color-border-hover:var(--pine-color-accent-hover);--color-border-disabled:var(--pine-color-accent-disabled);--color-border-focus:var(--pine-color-accent);--color-text-default:var(--pine-color-text-primary);--color-text-disabled:var(--pine-color-text-accent-disabled);--color-outline:var(--pine-color-focus-ring)}.pds-combobox__button-trigger--secondary{--color-background-default:var(--pine-color-secondary);--color-background-hover:var(--pine-color-secondary-hover);--color-background-disabled:var(--pine-color-secondary-disabled);--color-border-default:var(--pine-color-border);--color-border-hover:var(--pine-color-border-hover);--color-border-disabled:var(--pine-color-border-disabled);--color-border-focus:var(--pine-color-border);--color-text-default:var(--pine-color-text-secondary);--color-text-disabled:var(--pine-color-text-secondary-disabled);--color-outline:var(--pine-color-focus-ring)}.pds-combobox__button-trigger--destructive{--color-background-default:var(--pine-color-danger);--color-background-hover:var(--pine-color-danger-hover);--color-background-disabled:var(--pine-color-danger-disabled);--color-border-default:var(--pine-color-danger);--color-border-hover:var(--pine-color-danger-hover);--color-border-disabled:var(--pine-color-danger-disabled);--color-border-focus:var(--pine-color-danger);--color-text-default:var(--pine-color-white);--color-text-disabled:var(--pine-color-text-danger-disabled);--color-outline:var(--pine-color-focus-ring-danger)}[data-layout]{border-radius:var(--pine-dimension-125);padding-block:var(--pine-dimension-xs)}.pds-combobox__chip-trigger{-ms-flex-align:center;align-items:center;border-radius:var(--pine-dimension-sm);-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:-ms-inline-flexbox;display:inline-flex;font:var(--pine-typography-body-medium);-ms-flex-pack:justify;justify-content:space-between;outline:none;padding-block:var(--pine-dimension-025);padding-inline:var(--pine-dimension-150);-webkit-transition:all 0.15s ease;transition:all 0.15s ease;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pds-combobox__chip-trigger .pds-combobox__chip-trigger-layout-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.pds-combobox__chip-trigger .trigger-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__chip-trigger:focus-visible{outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-combobox__chip-trigger[aria-disabled=true]{cursor:not-allowed;opacity:0.6}.pds-combobox__chip-trigger-label{color:inherit;-ms-flex:1 1 auto;flex:1 1 auto;text-align:start}.pds-combobox__chip-trigger-chevron{color:currentColor;-webkit-margin-start:var(--pine-dimension-150);margin-inline-start:var(--pine-dimension-150)}.pds-combobox__chip-trigger-icon{-webkit-margin-end:var(--pine-dimension-2xs);margin-inline-end:var(--pine-dimension-2xs)}.pds-combobox__chip-trigger--neutral,.pds-combobox__chip-trigger--accent,.pds-combobox__chip-trigger--success,.pds-combobox__chip-trigger--warning,.pds-combobox__chip-trigger--danger,.pds-combobox__chip-trigger--info{background:var(--chip-bg);border:var(--pine-border-width) solid var(--chip-border);color:var(--chip-text)}.pds-combobox__chip-trigger--neutral:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--accent:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--success:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--warning:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--danger:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--info:hover:not([aria-disabled=true]){background:var(--chip-bg-hover)}.pds-combobox__chip-trigger--neutral:focus-visible,.pds-combobox__chip-trigger--accent:focus-visible,.pds-combobox__chip-trigger--success:focus-visible,.pds-combobox__chip-trigger--warning:focus-visible,.pds-combobox__chip-trigger--danger:focus-visible,.pds-combobox__chip-trigger--info:focus-visible{border-color:var(--chip-border)}.pds-combobox__chip-trigger--neutral{--chip-bg:var(--pine-chip-color-neutral);--chip-bg-hover:var(--pine-chip-color-neutral-hover);--chip-border:var(--pine-chip-color-neutral-hover);--chip-text:var(--pine-color-text-neutral)}.pds-combobox__chip-trigger--accent{--chip-bg:var(--pine-chip-color-accent);--chip-bg-hover:var(--pine-chip-color-accent-hover);--chip-border:var(--pine-chip-color-accent-hover);--chip-text:var(--pine-color-text-accent)}.pds-combobox__chip-trigger--success{--chip-bg:var(--pine-chip-color-success);--chip-bg-hover:var(--pine-chip-color-success-hover);--chip-border:var(--pine-chip-color-success-hover);--chip-text:var(--pine-color-text-success)}.pds-combobox__chip-trigger--warning{--chip-bg:var(--pine-chip-color-warning);--chip-bg-hover:var(--pine-chip-color-warning-hover);--chip-border:var(--pine-chip-color-warning-hover);--chip-text:var(--pine-color-text-warning)}.pds-combobox__chip-trigger--danger{--chip-bg:var(--pine-chip-color-danger);--chip-bg-hover:var(--pine-chip-color-danger-hover);--chip-border:var(--pine-chip-color-danger-hover);--chip-text:var(--pine-color-text-danger)}.pds-combobox__chip-trigger--info{--chip-bg:var(--pine-chip-color-info);--chip-bg-hover:var(--pine-chip-color-info-hover);--chip-border:var(--pine-chip-color-info-hover);--chip-text:var(--pine-color-text-info)}.pds-combobox__chip-trigger--brand{background:-webkit-gradient(linear, left top, right top, from(#FF3E14), to(#6B62F2));background:linear-gradient(90deg, #FF3E14 0%, #6B62F2 100%);border:0;color:var(--pine-color-text-neutral);padding:1px;position:relative}.pds-combobox__chip-trigger--brand .pds-combobox__chip-trigger-label{background:rgba(255, 255, 255, 0.9);border-radius:calc(var(--pine-dimension-sm) - 1px);color:var(--pine-color-text-neutral);font-weight:var(--pine-font-weight-medium);padding:var(--pine-dimension-025) var(--pine-dimension-150);position:relative;z-index:1}.pds-combobox__chip-trigger--brand .pds-combobox__chip-trigger-chevron{position:relative;z-index:1}.pds-combobox__chip-trigger--brand:hover:not([aria-disabled=true]) .pds-combobox__chip-trigger-label{background:rgba(255, 255, 255, 0.8)}.pds-combobox__chip-trigger--dropdown:not(.pds-combobox__chip-trigger--brand){padding:var(--pine-dimension-none)}.pds-combobox__chip-trigger--dropdown:not(.pds-combobox__chip-trigger--brand) .pds-combobox__chip-trigger-label{padding:var(--pine-dimension-025) var(--pine-dimension-150)}.pds-combobox__chip-trigger--large .pds-combobox__chip-trigger-label{font-family:var(--pine-font-family-heading);font-size:var(--pine-font-size-heading-6);font-weight:var(--pine-font-weight-medium);letter-spacing:var(--pine-letter-spacing-heading-6)}.pds-combobox__chip-trigger--dot .pds-combobox__chip-trigger-label::before{border:var(--pine-border-width) solid transparent;border-radius:var(--pine-border-radius-full);content:"";display:inline-block;height:var(--pine-dimension-2xs);-webkit-margin-end:var(--pine-dimension-2xs);margin-inline-end:var(--pine-dimension-2xs);width:var(--pine-dimension-2xs)}`;
|
|
11138
|
+
const pdsComboboxCss = () => `:host{display:block}:host([aria-disabled=true]) .pds-combobox__input-icon{color:var(--pine-color-text-disabled);pointer-events:none}.pds-combobox{position:relative}.pds-combobox__label{color:var(--pine-color-text-label);display:block;font:var(--pine-typography-body-medium);letter-spacing:var(--pine-letter-spacing);-webkit-margin-after:var(--pine-dimension-2xs);margin-block-end:var(--pine-dimension-2xs)}.pds-combobox__input-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;position:relative;width:100%}.pds-combobox__input{background:var(--pine-color-background-container);border:var(--pine-border);border-radius:var(--pine-dimension-125);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--pine-color-text-strong);-ms-flex:1;flex:1;font:var(--pine-typography-body-medium);padding:var(--pine-dimension-xs) var(--pine-dimension-450) var(--pine-dimension-xs) var(--pine-dimension-150);-webkit-transition:border-color var(--pine-motion-duration-base) ease;transition:border-color var(--pine-motion-duration-base) ease;width:100%}.pds-combobox__input:hover:not(:disabled){border-color:var(--pine-color-border-hover)}.pds-combobox__input:disabled{background:var(--pine-color-background-container-disabled);border-color:var(--pine-color-border-disabled);color:var(--pine-color-text-disabled);cursor:not-allowed}.pds-combobox__input:disabled::-webkit-input-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled::-moz-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled:-ms-input-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled::-ms-input-placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:disabled::placeholder{color:var(--pine-color-text-placeholder-disabled)}.pds-combobox__input:focus-visible{border-color:var(--pine-color-border-active);outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-combobox__input::-webkit-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input::-moz-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input:-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input::-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input::placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__input.pds-combobox__input--invalid{background:var(--pine-color-red-050);border-color:var(--pine-color-border-danger)}:host-context([data-theme=dark]) .pds-combobox__input.pds-combobox__input--invalid{background:var(--pine-color-red-950)}.pds-combobox__input.pds-combobox__input--invalid:hover:not(:disabled){border-color:var(--pine-color-border-danger)}.pds-combobox__input.pds-combobox__input--invalid:focus-visible{outline-color:var(--pine-color-focus-ring-danger)}.pds-combobox__input-icon{color:var(--pine-color-text-secondary);inset-inline-end:var(--pine-dimension-150);pointer-events:none;position:absolute;z-index:calc(var(--pine-z-index-raised) - 1)}.pds-combobox__helper{color:var(--pine-color-text-message);font:var(--pine-typography-body-sm-medium);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs)}.pds-combobox__error{-ms-flex-align:start;align-items:flex-start;color:var(--pine-color-text-message-danger);display:-ms-flexbox;display:flex;font:var(--pine-typography-body-sm-medium);gap:var(--pine-dimension-2xs);-webkit-margin-before:var(--pine-dimension-2xs);margin-block-start:var(--pine-dimension-2xs)}.pds-combobox__error pds-icon{-ms-flex-negative:0;flex-shrink:0;-webkit-margin-before:var(--pine-dimension-025);margin-block-start:var(--pine-dimension-025)}.pds-combobox__listbox{background:var(--pine-color-background-overlay);border:0;border-radius:var(--pine-dimension-125);-webkit-box-shadow:var(--pine-box-shadow);box-shadow:var(--pine-box-shadow);list-style:none;margin:0;min-width:220px;overflow-y:auto;padding:var(--pine-dimension-xs);position:absolute;z-index:var(--pine-z-index-raised)}.pds-combobox__option{-ms-flex-align:center;align-items:center;background:transparent;border-radius:var(--pine-dimension-125);color:var(--pine-color-text-secondary);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);-ms-flex-pack:justify;justify-content:space-between;padding:var(--pine-dimension-xs) var(--pine-dimension-sm);position:relative;-webkit-transition:background 0.15s;transition:background 0.15s}.pds-combobox__option[aria-selected=true]{background:var(--pine-color-background-muted)}.pds-combobox__option:focus-visible{outline:0}.pds-combobox__option.pds-combobox__option--layout .pds-combobox__option-layout-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__option.pds-combobox__option--chip .pds-combobox__option-chip{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__option:last-child{-webkit-margin-after:0;margin-block-end:0}.pds-combobox__option--highlighted,.pds-combobox__option[selected],.pds-combobox__option--selected{background:var(--pine-color-background-muted)}.pds-combobox__option--disabled,.pds-combobox__group-row--disabled>.pds-combobox__group-row-trigger,.pds-combobox__group-back--disabled>.pds-combobox__group-back-trigger,.pds-combobox__group--disabled>.pds-combobox__group-label{color:var(--pine-color-text-disabled)}.pds-combobox__option--disabled{cursor:not-allowed}.pds-combobox__option--disabled .pds-combobox__option-chip,.pds-combobox__option--disabled .pds-combobox__option-layout-wrapper{opacity:0.5}.pds-combobox__option-label{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs);min-width:0;overflow-wrap:anywhere}.pds-combobox__option-icon{-ms-flex-negative:0;flex-shrink:0}.pds-combobox__option-check{color:currentColor;font-size:var(--pine-dimension-150);-webkit-margin-start:var(--pine-dimension-150);margin-inline-start:var(--pine-dimension-150)}.pds-combobox__group-label{color:var(--pine-color-text-tertiary);cursor:default;font:var(--pine-typography-heading-caption);-webkit-margin-after:var(--pine-dimension-2xs);margin-block-end:var(--pine-dimension-2xs);-webkit-margin-before:var(--pine-dimension-150);margin-block-start:var(--pine-dimension-150);padding:var(--pine-dimension-2xs) var(--pine-dimension-sm);text-transform:uppercase}.pds-combobox__group-label:first-child{-webkit-margin-before:0;margin-block-start:0}.pds-combobox__group{list-style:none;-webkit-margin-before:var(--pine-dimension-150);margin-block-start:var(--pine-dimension-150)}.pds-combobox__group:first-child{-webkit-margin-before:0;margin-block-start:0}.pds-combobox__group-list{list-style:none;margin:0;padding:0}.pds-combobox__listbox--grouped .pds-combobox__group-list{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs)}.pds-combobox__group-label--with-icon{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs)}.pds-combobox__group-icon{-ms-flex-negative:0;flex-shrink:0}.pds-combobox__group-row{list-style:none;position:relative}.pds-combobox__group-row-trigger{-ms-flex-align:center;align-items:center;border-radius:var(--pine-dimension-125);color:var(--pine-color-text-secondary);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);gap:var(--pine-dimension-xs);-ms-flex-pack:justify;justify-content:space-between;padding:var(--pine-dimension-xs) var(--pine-dimension-sm);-webkit-transition:background 0.15s;transition:background 0.15s}.pds-combobox__group-row--open>.pds-combobox__group-row-trigger,.pds-combobox__group-row--has-selection>.pds-combobox__group-row-trigger,.pds-combobox__group-row--highlighted>.pds-combobox__group-row-trigger,.pds-combobox__group-back--highlighted>.pds-combobox__group-row-trigger{background:var(--pine-color-background-muted)}.pds-combobox__listbox--pointer-hover .pds-combobox__group-row-trigger:hover{background:var(--pine-color-background-muted)}.pds-combobox__listbox--drill-in,.pds-combobox__listbox--drill-out{overflow-x:hidden}.pds-combobox__listbox--drill-in,.pds-combobox__listbox--drill-out:dir(rtl){--pds-combobox-drill-from:var(--pine-dimension-sm)}.pds-combobox__listbox--drill-out,.pds-combobox__listbox--drill-in:dir(rtl){--pds-combobox-drill-from:calc(var(--pine-dimension-sm) * -1)}.pds-combobox__listbox--drill-in .pds-combobox__drill-in-options>li,.pds-combobox__listbox--drill-in .pds-combobox__group-back-trigger,.pds-combobox__listbox--drill-out>li{-webkit-animation:pds-combobox-drill var(--pine-motion-duration-base) var(--pine-motion-easing-out);animation:pds-combobox-drill var(--pine-motion-duration-base) var(--pine-motion-easing-out)}@-webkit-keyframes pds-combobox-drill{from{opacity:0;-webkit-transform:translateX(var(--pds-combobox-drill-from));transform:translateX(var(--pds-combobox-drill-from))}}@keyframes pds-combobox-drill{from{opacity:0;-webkit-transform:translateX(var(--pds-combobox-drill-from));transform:translateX(var(--pds-combobox-drill-from))}}.pds-combobox__group-row--keyboard>.pds-combobox__group-row-trigger,.pds-combobox__group-back--keyboard>.pds-combobox__group-row-trigger{outline:var(--pine-outline-focus);outline-offset:calc(var(--pine-border-width) * -2)}.pds-combobox__group-row-label{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs);min-width:0}.pds-combobox__group-row-caret{-ms-flex-negative:0;flex-shrink:0}.pds-combobox__listbox--grouped,.pds-combobox__flyout{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs);padding:var(--pine-dimension-2xs)}.pds-combobox__flyout{background:var(--pine-color-background-overlay);border-radius:var(--pine-dimension-125);-webkit-box-shadow:var(--pine-box-shadow);box-shadow:var(--pine-box-shadow);list-style:none;margin:0;overflow-y:auto;position:fixed;visibility:hidden;width:-webkit-max-content;width:-moz-max-content;width:max-content;z-index:1}.pds-combobox__listbox--with-search{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:0}.pds-combobox__listbox-options{-ms-flex:1;flex:1;list-style:none;margin:0;min-height:0;overflow-y:auto;padding:var(--pine-dimension-xs)}.pds-combobox__listbox-options.pds-combobox__listbox--grouped{padding:var(--pine-dimension-2xs)}.pds-combobox__panel-search{-ms-flex-align:center;align-items:center;-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;gap:var(--pine-dimension-xs);padding:var(--pine-dimension-sm)}.pds-combobox__panel-search pds-icon{color:var(--pine-color-text-muted);-ms-flex-negative:0;flex-shrink:0}.pds-combobox__panel-search:focus-within{border-block-end-color:var(--pine-color-border-active)}.pds-combobox__panel-search-input{background:transparent;border:0;color:var(--pine-color-text-strong);-ms-flex:1;flex:1;font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);min-width:0;outline:none;padding:0}.pds-combobox__panel-search-input::-webkit-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input::-moz-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input:-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input::-ms-input-placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__panel-search-input::placeholder{color:var(--pine-color-text-placeholder)}.pds-combobox__group-back{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs);list-style:none}.pds-combobox__group-back-trigger{-ms-flex-pack:start;justify-content:flex-start}.pds-combobox__listbox-options--drilled-in.pds-combobox__listbox--grouped{-webkit-padding-before:0;padding-block-start:0}.pds-combobox__listbox-options--drilled-in:focus{outline:none}.pds-combobox__listbox-options--drilled-in:focus .pds-combobox__group-back-trigger{border-block-end-color:var(--pine-color-border-active)}:where(.pds-combobox__listbox-options--drilled-in) .pds-combobox__group-back-trigger{background-color:var(--pine-color-background-overlay);-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border);border-block-end-color:var(--pine-color-border-subtle);border-radius:0;color:var(--pine-color-text-strong);font:var(--pine-typography-body);inset-block-start:0;letter-spacing:var(--pine-letter-spacing);margin-inline:calc(var(--pine-dimension-2xs) * -1);padding:var(--pine-dimension-sm);position:-webkit-sticky;position:sticky;z-index:1}.pds-combobox__drill-in-options{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-2xs);list-style:none;margin:0;padding:0}.visually-hidden{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pds-combobox__loading{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-150)}.pds-combobox__empty{color:var(--pine-color-text-tertiary);padding:var(--pine-dimension-150) var(--pine-dimension-sm);text-align:center}.pds-combobox__load-more{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:var(--pine-dimension-150)}:host(.pds-combobox-dropdown-portal) .pds-combobox__listbox{position:fixed;z-index:var(--pine-z-index-priority)}.pds-combobox__button-trigger{-ms-flex-align:center;align-items:center;background:var(--color-background-default, var(--pine-color-secondary));border:var(--pine-border);border-radius:var(--pine-border-radius-full);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--color-text-default, var(--pine-color-text-inverse-emphasis));cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-medium);-ms-flex-pack:justify;justify-content:space-between;min-height:var(--pine-dimension-450);outline:none;padding:0 var(--pine-dimension-sm);-webkit-transition:border-color 0.15s, background 0.15s, -webkit-box-shadow 0.15s;transition:border-color 0.15s, background 0.15s, -webkit-box-shadow 0.15s;transition:border-color 0.15s, box-shadow 0.15s, background 0.15s;transition:border-color 0.15s, box-shadow 0.15s, background 0.15s, -webkit-box-shadow 0.15s;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pds-combobox__button-trigger .pds-combobox__button-trigger-layout-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.pds-combobox__button-trigger .trigger-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__button-trigger:focus-visible{border-color:var(--color-border-focus, var(--pine-color-border));-webkit-box-shadow:0 0 0 2px var(--color-outline, var(--pine-color-focus-ring));box-shadow:0 0 0 2px var(--color-outline, var(--pine-color-focus-ring))}.pds-combobox__button-trigger:hover{background:var(--color-background-hover, var(--pine-color-secondary-hover));border-color:var(--color-border-hover, var(--pine-color-border-hover))}.pds-combobox__button-trigger[aria-disabled=true],.pds-combobox__button-trigger:disabled{background:var(--color-background-disabled, var(--pine-color-secondary-disabled));border-color:var(--color-border-disabled, var(--pine-color-border-disabled));color:var(--color-text-disabled, var(--pine-color-text-secondary-disabled));cursor:not-allowed;opacity:0.6}.pds-combobox__button-trigger-label{color:inherit;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;overflow-wrap:anywhere;text-align:start}.pds-combobox__button-trigger-label--with-icon{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;gap:var(--pine-dimension-xs)}.pds-combobox__button-trigger-icon{-ms-flex-negative:0;flex-shrink:0}.pds-combobox__button-trigger--input-shape{border-radius:var(--pine-dimension-125);font:var(--pine-typography-body);letter-spacing:var(--pine-letter-spacing);min-height:var(--pine-dimension-450);padding:calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-150)}.pds-combobox__button-trigger--secondary.pds-combobox__button-trigger--input-shape:not([aria-disabled=true]) .pds-combobox__button-trigger-label--placeholder{color:var(--pine-color-text-muted)}.pds-combobox__button-trigger-chevron{color:currentColor;-webkit-margin-start:var(--pine-dimension-150);margin-inline-start:var(--pine-dimension-150)}.pds-combobox__button-trigger--primary{--color-background-default:var(--pine-color-primary);--color-background-hover:var(--pine-color-primary-hover);--color-background-disabled:var(--pine-color-primary-disabled);--color-border-default:var(--pine-color-primary);--color-border-hover:var(--pine-color-primary-hover);--color-border-disabled:var(--pine-color-primary-disabled);--color-border-focus:var(--pine-color-primary);--color-text-default:var(--pine-color-text-primary);--color-text-disabled:var(--pine-color-text-primary-disabled);--color-outline:var(--pine-color-focus-ring)}.pds-combobox__button-trigger--accent{--color-background-default:var(--pine-color-accent);--color-background-hover:var(--pine-color-accent-hover);--color-background-disabled:var(--pine-color-accent-disabled);--color-border-default:var(--pine-color-accent);--color-border-hover:var(--pine-color-accent-hover);--color-border-disabled:var(--pine-color-accent-disabled);--color-border-focus:var(--pine-color-accent);--color-text-default:var(--pine-color-text-primary);--color-text-disabled:var(--pine-color-text-accent-disabled);--color-outline:var(--pine-color-focus-ring)}.pds-combobox__button-trigger--secondary{--color-background-default:var(--pine-color-secondary);--color-background-hover:var(--pine-color-secondary-hover);--color-background-disabled:var(--pine-color-secondary-disabled);--color-border-default:var(--pine-color-border);--color-border-hover:var(--pine-color-border-hover);--color-border-disabled:var(--pine-color-border-disabled);--color-border-focus:var(--pine-color-border);--color-text-default:var(--pine-color-text-secondary);--color-text-disabled:var(--pine-color-text-secondary-disabled);--color-outline:var(--pine-color-focus-ring)}.pds-combobox__button-trigger--destructive{--color-background-default:var(--pine-color-danger);--color-background-hover:var(--pine-color-danger-hover);--color-background-disabled:var(--pine-color-danger-disabled);--color-border-default:var(--pine-color-danger);--color-border-hover:var(--pine-color-danger-hover);--color-border-disabled:var(--pine-color-danger-disabled);--color-border-focus:var(--pine-color-danger);--color-text-default:var(--pine-color-white);--color-text-disabled:var(--pine-color-text-danger-disabled);--color-outline:var(--pine-color-focus-ring-danger)}[data-layout]{border-radius:var(--pine-dimension-125);padding-block:var(--pine-dimension-xs)}.pds-combobox__chip-trigger{-ms-flex-align:center;align-items:center;border-radius:var(--pine-dimension-sm);-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:-ms-inline-flexbox;display:inline-flex;font:var(--pine-typography-body-medium);-ms-flex-pack:justify;justify-content:space-between;outline:none;padding-block:var(--pine-dimension-025);padding-inline:var(--pine-dimension-150);-webkit-transition:all 0.15s ease;transition:all 0.15s ease;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pds-combobox__chip-trigger .pds-combobox__chip-trigger-layout-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.pds-combobox__chip-trigger .trigger-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;width:100%}.pds-combobox__chip-trigger:focus-visible{outline:var(--pine-outline-focus);outline-offset:var(--pine-border-width)}.pds-combobox__chip-trigger[aria-disabled=true]{cursor:not-allowed;opacity:0.6}.pds-combobox__chip-trigger-label{color:inherit;-ms-flex:1 1 auto;flex:1 1 auto;text-align:start}.pds-combobox__chip-trigger-chevron{color:currentColor;-webkit-margin-start:var(--pine-dimension-150);margin-inline-start:var(--pine-dimension-150)}.pds-combobox__chip-trigger-icon{-webkit-margin-end:var(--pine-dimension-2xs);margin-inline-end:var(--pine-dimension-2xs)}.pds-combobox__chip-trigger--neutral,.pds-combobox__chip-trigger--accent,.pds-combobox__chip-trigger--success,.pds-combobox__chip-trigger--warning,.pds-combobox__chip-trigger--danger,.pds-combobox__chip-trigger--info{background:var(--chip-bg);border:var(--pine-border-width) solid var(--chip-border);color:var(--chip-text)}.pds-combobox__chip-trigger--neutral:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--accent:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--success:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--warning:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--danger:hover:not([aria-disabled=true]),.pds-combobox__chip-trigger--info:hover:not([aria-disabled=true]){background:var(--chip-bg-hover)}.pds-combobox__chip-trigger--neutral:focus-visible,.pds-combobox__chip-trigger--accent:focus-visible,.pds-combobox__chip-trigger--success:focus-visible,.pds-combobox__chip-trigger--warning:focus-visible,.pds-combobox__chip-trigger--danger:focus-visible,.pds-combobox__chip-trigger--info:focus-visible{border-color:var(--chip-border)}.pds-combobox__chip-trigger--neutral{--chip-bg:var(--pine-chip-color-neutral);--chip-bg-hover:var(--pine-chip-color-neutral-hover);--chip-border:var(--pine-chip-color-neutral-hover);--chip-text:var(--pine-color-text-neutral)}.pds-combobox__chip-trigger--accent{--chip-bg:var(--pine-chip-color-accent);--chip-bg-hover:var(--pine-chip-color-accent-hover);--chip-border:var(--pine-chip-color-accent-hover);--chip-text:var(--pine-color-text-accent)}.pds-combobox__chip-trigger--success{--chip-bg:var(--pine-chip-color-success);--chip-bg-hover:var(--pine-chip-color-success-hover);--chip-border:var(--pine-chip-color-success-hover);--chip-text:var(--pine-color-text-success)}.pds-combobox__chip-trigger--warning{--chip-bg:var(--pine-chip-color-warning);--chip-bg-hover:var(--pine-chip-color-warning-hover);--chip-border:var(--pine-chip-color-warning-hover);--chip-text:var(--pine-color-text-warning)}.pds-combobox__chip-trigger--danger{--chip-bg:var(--pine-chip-color-danger);--chip-bg-hover:var(--pine-chip-color-danger-hover);--chip-border:var(--pine-chip-color-danger-hover);--chip-text:var(--pine-color-text-danger)}.pds-combobox__chip-trigger--info{--chip-bg:var(--pine-chip-color-info);--chip-bg-hover:var(--pine-chip-color-info-hover);--chip-border:var(--pine-chip-color-info-hover);--chip-text:var(--pine-color-text-info)}.pds-combobox__chip-trigger--brand{background:-webkit-gradient(linear, left top, right top, from(#FF3E14), to(#6B62F2));background:linear-gradient(90deg, #FF3E14 0%, #6B62F2 100%);border:0;color:var(--pine-color-text-neutral);padding:1px;position:relative}.pds-combobox__chip-trigger--brand .pds-combobox__chip-trigger-label{background:rgba(255, 255, 255, 0.9);border-radius:calc(var(--pine-dimension-sm) - 1px);color:var(--pine-color-text-neutral);font-weight:var(--pine-font-weight-medium);padding:var(--pine-dimension-025) var(--pine-dimension-150);position:relative;z-index:1}.pds-combobox__chip-trigger--brand .pds-combobox__chip-trigger-chevron{position:relative;z-index:1}.pds-combobox__chip-trigger--brand:hover:not([aria-disabled=true]) .pds-combobox__chip-trigger-label{background:rgba(255, 255, 255, 0.8)}.pds-combobox__chip-trigger--dropdown:not(.pds-combobox__chip-trigger--brand){padding:var(--pine-dimension-none)}.pds-combobox__chip-trigger--dropdown:not(.pds-combobox__chip-trigger--brand) .pds-combobox__chip-trigger-label{padding:var(--pine-dimension-025) var(--pine-dimension-150)}.pds-combobox__chip-trigger--large .pds-combobox__chip-trigger-label{font-family:var(--pine-font-family-heading);font-size:var(--pine-font-size-heading-6);font-weight:var(--pine-font-weight-medium);letter-spacing:var(--pine-letter-spacing-heading-6)}.pds-combobox__chip-trigger--dot .pds-combobox__chip-trigger-label::before{border:var(--pine-border-width) solid transparent;border-radius:var(--pine-border-radius-full);content:"";display:inline-block;height:var(--pine-dimension-2xs);-webkit-margin-end:var(--pine-dimension-2xs);margin-inline-end:var(--pine-dimension-2xs);width:var(--pine-dimension-2xs)}`;
|
|
10987
11139
|
|
|
10988
11140
|
/**
|
|
10989
11141
|
* @slot option - Option elements for the combobox dropdown
|
|
@@ -11191,6 +11343,17 @@ class PdsCombobox {
|
|
|
11191
11343
|
this.highlightedGroup = null;
|
|
11192
11344
|
/** The keys, not the pointer, moved the highlight last; the focus ring shows only then. */
|
|
11193
11345
|
this.keyboardNavigating = false;
|
|
11346
|
+
/**
|
|
11347
|
+
* A drill-in group row the first arrow showed rather than moved past. `aria-activedescendant`
|
|
11348
|
+
* already pointed at it, so the status region says it instead.
|
|
11349
|
+
*/
|
|
11350
|
+
this.revealedGroupLabel = null;
|
|
11351
|
+
/**
|
|
11352
|
+
* The pointer in the panel can hover: a mouse or pen, not touch. Touch browsers keep a tapped row
|
|
11353
|
+
* hovered, so group rows shade on `:hover` only for a pointer that can hover. Checked on the
|
|
11354
|
+
* pointer itself rather than `(hover: hover)`, which a touch-first device with a trackpad fails.
|
|
11355
|
+
*/
|
|
11356
|
+
this.pointerCanHover = true;
|
|
11194
11357
|
/**
|
|
11195
11358
|
* What's typed in the dropdown's own search field (`panelSearch`).
|
|
11196
11359
|
*/
|
|
@@ -11235,6 +11398,11 @@ class PdsCombobox {
|
|
|
11235
11398
|
});
|
|
11236
11399
|
/** The groups in the flyout panel's last render, so a row's index finds its optgroup. */
|
|
11237
11400
|
this.renderedGroups = [];
|
|
11401
|
+
/**
|
|
11402
|
+
* Where each ungrouped option and optgroup built from the `options` prop came in the data, so
|
|
11403
|
+
* the flyout and drill-in panels draw them in that order. Slotted markup is already in order.
|
|
11404
|
+
*/
|
|
11405
|
+
this.panelPositions = new WeakMap();
|
|
11238
11406
|
/** Room for a flyout was checked for this open. */
|
|
11239
11407
|
this.flyoutRoomChecked = false;
|
|
11240
11408
|
/** The highlighted option sits in a flyout that hasn't rendered yet; focus it after the next render. */
|
|
@@ -11248,10 +11416,14 @@ class PdsCombobox {
|
|
|
11248
11416
|
* the list shows every option until the user types (then normal filtering applies).
|
|
11249
11417
|
*/
|
|
11250
11418
|
this.expandFilterListWhileOpen = false;
|
|
11419
|
+
this.onPanelPointer = (event) => {
|
|
11420
|
+
const canHover = event.pointerType !== 'touch';
|
|
11421
|
+
if (this.pointerCanHover !== canHover)
|
|
11422
|
+
this.pointerCanHover = canHover;
|
|
11423
|
+
};
|
|
11251
11424
|
this.onDrillAnimationEnd = (event) => {
|
|
11252
|
-
var _a;
|
|
11253
11425
|
// Only the slide's own end: slotted consumer content can animate inside the list too.
|
|
11254
|
-
if (
|
|
11426
|
+
if (event.animationName === 'pds-combobox-drill')
|
|
11255
11427
|
this.drillDirection = null;
|
|
11256
11428
|
};
|
|
11257
11429
|
/** `<label for>` only works on the input trigger; for a div trigger a click on the label focuses it. */
|
|
@@ -11451,6 +11623,9 @@ class PdsCombobox {
|
|
|
11451
11623
|
};
|
|
11452
11624
|
// Handler for button trigger click
|
|
11453
11625
|
this.onButtonTriggerClick = () => {
|
|
11626
|
+
// The button and chip triggers are divs, so a click reaches them even while disabled.
|
|
11627
|
+
if (this.disabled)
|
|
11628
|
+
return;
|
|
11454
11629
|
this.isOpen = !this.isOpen;
|
|
11455
11630
|
if (this.isOpen) {
|
|
11456
11631
|
this.prepareExpandFilterListOnOpen();
|
|
@@ -11470,6 +11645,13 @@ class PdsCombobox {
|
|
|
11470
11645
|
};
|
|
11471
11646
|
// Handler for button trigger keyboard events
|
|
11472
11647
|
this.onButtonTriggerKeyDown = (e) => {
|
|
11648
|
+
// Disabled takes it out of the tab order, but setFocus() or a click can still focus it.
|
|
11649
|
+
if (this.disabled) {
|
|
11650
|
+
// Keep Space from scrolling the page, as on a native disabled button.
|
|
11651
|
+
if (e.key === ' ')
|
|
11652
|
+
e.preventDefault();
|
|
11653
|
+
return;
|
|
11654
|
+
}
|
|
11473
11655
|
// Escape closes an open group before the dropdown. Other keys reach the tree through handleKeyDown.
|
|
11474
11656
|
if (this.isOpen && e.key === 'Escape' && this.handleGroupedPanelKey(e))
|
|
11475
11657
|
return;
|
|
@@ -11490,8 +11672,9 @@ class PdsCombobox {
|
|
|
11490
11672
|
}, 0);
|
|
11491
11673
|
}
|
|
11492
11674
|
else if (e.key === 'Escape') {
|
|
11493
|
-
|
|
11675
|
+
// Only an open dropdown claims Escape; a closed one leaves it to a modal or popover around it.
|
|
11494
11676
|
if (this.isOpen) {
|
|
11677
|
+
e.preventDefault();
|
|
11495
11678
|
this.isOpen = false;
|
|
11496
11679
|
this.highlightedIndex = -1;
|
|
11497
11680
|
this.clearExpandFilterList();
|
|
@@ -11670,6 +11853,31 @@ class PdsCombobox {
|
|
|
11670
11853
|
this.focusPanel(panelFocusEl);
|
|
11671
11854
|
}
|
|
11672
11855
|
}
|
|
11856
|
+
/**
|
|
11857
|
+
* Scrolls just enough to show `el`, as `scrollIntoView({ block: 'nearest' })` does. In the drill-in
|
|
11858
|
+
* panel it scrolls the list alone, and never sideways: while a drill-in slide offsets a row past
|
|
11859
|
+
* the list's edge, `scrollIntoView` also scrolls the list horizontally to reach it, which eats most
|
|
11860
|
+
* of the slide. There it keeps clear of the sticky row back, through the scroll padding set for it,
|
|
11861
|
+
* but doesn't scroll the page or a scrolling ancestor.
|
|
11862
|
+
*/
|
|
11863
|
+
scrollIntoViewNearest(el, smooth) {
|
|
11864
|
+
const behavior = smooth ? 'smooth' : 'auto';
|
|
11865
|
+
if (!this.showsGroupedPanel || this.effectiveGroupDisplay !== 'drill-in') {
|
|
11866
|
+
el.scrollIntoView({ block: 'nearest', behavior });
|
|
11867
|
+
return;
|
|
11868
|
+
}
|
|
11869
|
+
const list = this.usesPanelSearch ? this.panelTreeEl : this.listboxEl;
|
|
11870
|
+
if (!list)
|
|
11871
|
+
return;
|
|
11872
|
+
const offset = el.getBoundingClientRect().top - list.getBoundingClientRect().top - list.clientTop;
|
|
11873
|
+
// The padding keeps rows clear of the sticky row back; the row back itself doesn't need it.
|
|
11874
|
+
const padding = el.classList.contains('pds-combobox__group-back-trigger') ? 0 : parseFloat(list.style.scrollPaddingBlockStart) || 0;
|
|
11875
|
+
const top = list.scrollTop + offset - padding;
|
|
11876
|
+
const bottom = list.scrollTop + offset + el.offsetHeight - list.clientHeight;
|
|
11877
|
+
const target = top < list.scrollTop ? top : bottom > list.scrollTop ? bottom : null;
|
|
11878
|
+
if (target !== null)
|
|
11879
|
+
list.scrollTo({ top: target, behavior });
|
|
11880
|
+
}
|
|
11673
11881
|
focusPanel(el) {
|
|
11674
11882
|
var _a, _b;
|
|
11675
11883
|
this.panelFocusEl = el;
|
|
@@ -11690,6 +11898,7 @@ class PdsCombobox {
|
|
|
11690
11898
|
}
|
|
11691
11899
|
openGroupChanged(next, previous) {
|
|
11692
11900
|
this.handPanelFocusToList();
|
|
11901
|
+
this.revealedGroupLabel = null;
|
|
11693
11902
|
// Only moves between the drill-in panel's views slide; search results don't.
|
|
11694
11903
|
if (!this.isOpen || this.effectiveGroupDisplay !== 'drill-in' || !this.showsGroupedPanel)
|
|
11695
11904
|
return;
|
|
@@ -11710,8 +11919,25 @@ class PdsCombobox {
|
|
|
11710
11919
|
if (this.isOpen && this.hidesPanelSearch && this.panelTreeEl)
|
|
11711
11920
|
this.focusPanel(this.panelTreeEl);
|
|
11712
11921
|
}
|
|
11922
|
+
disabledChanged(disabled) {
|
|
11923
|
+
var _a, _b, _c, _d, _e;
|
|
11924
|
+
if (!disabled || !this.isOpen)
|
|
11925
|
+
return;
|
|
11926
|
+
const shadowActive = (_b = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement) !== null && _b !== void 0 ? _b : null;
|
|
11927
|
+
const focusInDropdown = !!((_d = (_c = this.portalEl) === null || _c === void 0 ? void 0 : _c.shadowRoot) === null || _d === void 0 ? void 0 : _d.activeElement) || (!!shadowActive && !!((_e = this.listboxEl) === null || _e === void 0 ? void 0 : _e.contains(shadowActive)));
|
|
11928
|
+
this.isOpen = false;
|
|
11929
|
+
this.highlightedIndex = -1;
|
|
11930
|
+
this.isArrowKeyNavigationMode = false;
|
|
11931
|
+
this.clearExpandFilterList();
|
|
11932
|
+
this.updateAriaActiveDescendant();
|
|
11933
|
+
// Closing removes the search field or option that held focus. A button or chip trigger can still
|
|
11934
|
+
// take it (aria-disabled), so focus doesn't fall to the page; a disabled input can't, as natively.
|
|
11935
|
+
if (focusInDropdown && this.trigger !== 'input')
|
|
11936
|
+
this.restoreFocusToTrigger();
|
|
11937
|
+
}
|
|
11713
11938
|
isOpenChanged(isOpen) {
|
|
11714
11939
|
if (!isOpen) {
|
|
11940
|
+
this.revealedGroupLabel = null;
|
|
11715
11941
|
this.drillDirection = null;
|
|
11716
11942
|
this.openGroup = null;
|
|
11717
11943
|
this.highlightedGroup = null;
|
|
@@ -11990,20 +12216,25 @@ class PdsCombobox {
|
|
|
11990
12216
|
// slotted markup would be, so grouping, filtering and labels work the same either way. Each
|
|
11991
12217
|
// group is listed where it first appears with all of its options, even when the data
|
|
11992
12218
|
// interleaves groups, so an option never renders under another group's label. Ungrouped
|
|
11993
|
-
// options come first, so none reads as part of the group above it.
|
|
12219
|
+
// options come first, so none reads as part of the group above it. The flyout and drill-in
|
|
12220
|
+
// panels draw groups as rows, where that can't happen, so they keep the data's order instead.
|
|
11994
12221
|
const asyncOptions = this.options || this.internalOptions;
|
|
11995
12222
|
const groups = new Map();
|
|
11996
12223
|
const ungrouped = [];
|
|
11997
12224
|
const groupEntries = [];
|
|
11998
|
-
|
|
12225
|
+
this.panelPositions = new WeakMap();
|
|
12226
|
+
asyncOptions.forEach((opt, position) => {
|
|
11999
12227
|
const optionEl = document.createElement('option');
|
|
12000
12228
|
optionEl.value = String(opt.id);
|
|
12001
12229
|
optionEl.textContent = opt.text;
|
|
12002
12230
|
if (opt.disabled === true)
|
|
12003
12231
|
optionEl.setAttribute('disabled', '');
|
|
12004
12232
|
// Only strings group an option or name an icon; anything else from JS is ignored, not coerced.
|
|
12233
|
+
if (typeof opt.icon === 'string' && opt.icon !== '')
|
|
12234
|
+
optionEl.setAttribute('data-icon', opt.icon);
|
|
12005
12235
|
if (typeof opt.group !== 'string' || opt.group === '') {
|
|
12006
12236
|
ungrouped.push(optionEl);
|
|
12237
|
+
this.panelPositions.set(optionEl, position);
|
|
12007
12238
|
return;
|
|
12008
12239
|
}
|
|
12009
12240
|
let optgroup = groups.get(opt.group);
|
|
@@ -12012,6 +12243,7 @@ class PdsCombobox {
|
|
|
12012
12243
|
optgroup.label = opt.group;
|
|
12013
12244
|
groups.set(opt.group, optgroup);
|
|
12014
12245
|
groupEntries.push(optgroup);
|
|
12246
|
+
this.panelPositions.set(optgroup, position);
|
|
12015
12247
|
}
|
|
12016
12248
|
if (!optgroup.hasAttribute('data-icon') && typeof opt.groupIcon === 'string' && opt.groupIcon !== '') {
|
|
12017
12249
|
optgroup.setAttribute('data-icon', opt.groupIcon);
|
|
@@ -12476,6 +12708,7 @@ class PdsCombobox {
|
|
|
12476
12708
|
handleGroupedPanelKey(e) {
|
|
12477
12709
|
if (!this.showsGroupedPanel)
|
|
12478
12710
|
return false;
|
|
12711
|
+
const highlightShown = this.keyboardNavigating;
|
|
12479
12712
|
this.keyboardNavigating = true;
|
|
12480
12713
|
// In the input trigger, Left and Right still move the caret through typed text, and Space,
|
|
12481
12714
|
// Home and End edit it, as they do in the panel's search field.
|
|
@@ -12485,23 +12718,32 @@ class PdsCombobox {
|
|
|
12485
12718
|
if (e.key === ' ' || e.key === 'Home' || e.key === 'End')
|
|
12486
12719
|
return false;
|
|
12487
12720
|
}
|
|
12488
|
-
const entries =
|
|
12721
|
+
const entries = this.panelEntries();
|
|
12489
12722
|
const drilledIn = this.effectiveGroupDisplay === 'drill-in' && this.openGroup !== null;
|
|
12490
12723
|
const current = this.currentPanelItem();
|
|
12491
12724
|
const column = panelColumn(entries, this.openGroup, current, drilledIn);
|
|
12492
12725
|
if (column.length === 0)
|
|
12493
12726
|
return false;
|
|
12494
12727
|
const position = current === null ? -1 : column.indexOf(current);
|
|
12728
|
+
// Drill-in doesn't shade a group row the pointer or a click-open highlighted, so the first Up or
|
|
12729
|
+
// Down shows that row rather than moving past one the user never saw.
|
|
12730
|
+
const unseenRow = !highlightShown && this.effectiveGroupDisplay === 'drill-in' && current !== null && typeof current !== 'number' && current !== this.openGroup;
|
|
12495
12731
|
const moveTo = (to) => {
|
|
12496
12732
|
e.preventDefault();
|
|
12497
12733
|
this.highlightPanelItem(column[Math.max(0, Math.min(column.length - 1, to))]);
|
|
12734
|
+
this.revealedGroupLabel = null;
|
|
12735
|
+
return true;
|
|
12736
|
+
};
|
|
12737
|
+
const reveal = () => {
|
|
12738
|
+
e.preventDefault();
|
|
12739
|
+
this.revealedGroupLabel = current.label;
|
|
12498
12740
|
return true;
|
|
12499
12741
|
};
|
|
12500
12742
|
switch (e.key) {
|
|
12501
12743
|
case 'ArrowDown':
|
|
12502
|
-
return moveTo(position < 0 ? 0 : position + 1);
|
|
12744
|
+
return unseenRow ? reveal() : moveTo(position < 0 ? 0 : position + 1);
|
|
12503
12745
|
case 'ArrowUp':
|
|
12504
|
-
return moveTo(position < 0 ? column.length - 1 : position - 1);
|
|
12746
|
+
return unseenRow ? reveal() : moveTo(position < 0 ? column.length - 1 : position - 1);
|
|
12505
12747
|
case 'Home':
|
|
12506
12748
|
return moveTo(0);
|
|
12507
12749
|
case 'End':
|
|
@@ -12634,7 +12876,7 @@ class PdsCombobox {
|
|
|
12634
12876
|
// In the grouped panel, the first row with something to choose: a group stays closed until
|
|
12635
12877
|
// it's opened.
|
|
12636
12878
|
if (this.showsGroupedPanel) {
|
|
12637
|
-
const first =
|
|
12879
|
+
const first = this.panelEntries().find(entry => entry.kind === 'group' ? !isGroupDisabled(entry.group) : !isOptionDisabled(entry.option));
|
|
12638
12880
|
this.highlightedIndex = (first === null || first === void 0 ? void 0 : first.kind) === 'option' ? first.index : -1;
|
|
12639
12881
|
this.highlightedGroup = (first === null || first === void 0 ? void 0 : first.kind) === 'group' ? first.group.optgroup : null;
|
|
12640
12882
|
return;
|
|
@@ -12699,8 +12941,13 @@ class PdsCombobox {
|
|
|
12699
12941
|
}
|
|
12700
12942
|
// Matched by id, not a selector: componentId is consumer text and may not be selector-safe.
|
|
12701
12943
|
const id = this.groupDomId(groupRow);
|
|
12702
|
-
|
|
12703
|
-
.find(
|
|
12944
|
+
const row = Array.from(this.listboxEl.querySelectorAll('[role="treeitem"]'))
|
|
12945
|
+
.find(item => item.id === id);
|
|
12946
|
+
// The row's trigger, not its item: the row back's item wraps the group's options, and showing
|
|
12947
|
+
// all of a group taller than the list would scroll the row back itself out of view.
|
|
12948
|
+
const trigger = Array.from((_a = row === null || row === void 0 ? void 0 : row.children) !== null && _a !== void 0 ? _a : []).find(child => child.classList.contains('pds-combobox__group-row-trigger'));
|
|
12949
|
+
if (trigger)
|
|
12950
|
+
this.scrollIntoViewNearest(trigger, false);
|
|
12704
12951
|
this.updateAriaActiveDescendant();
|
|
12705
12952
|
return;
|
|
12706
12953
|
}
|
|
@@ -12751,7 +12998,7 @@ class PdsCombobox {
|
|
|
12751
12998
|
this.flyout.reveal(flyout, currentOption);
|
|
12752
12999
|
}
|
|
12753
13000
|
else {
|
|
12754
|
-
|
|
13001
|
+
this.scrollIntoViewNearest(currentOption, true);
|
|
12755
13002
|
}
|
|
12756
13003
|
}
|
|
12757
13004
|
// Always update aria-activedescendant on the trigger element
|
|
@@ -12848,6 +13095,8 @@ class PdsCombobox {
|
|
|
12848
13095
|
this.highlightedIndex = -1;
|
|
12849
13096
|
this.highlightedGroup = group;
|
|
12850
13097
|
this.keyboardNavigating = false;
|
|
13098
|
+
// So revealing this row again later is announced again.
|
|
13099
|
+
this.revealedGroupLabel = null;
|
|
12851
13100
|
}
|
|
12852
13101
|
// Get the label of the selected option
|
|
12853
13102
|
get selectedLabel() {
|
|
@@ -13003,7 +13252,8 @@ class PdsCombobox {
|
|
|
13003
13252
|
'pds-combobox__listbox--grouped': this.groupDisplay !== 'inline',
|
|
13004
13253
|
'pds-combobox__listbox--drill-in': this.drillDirection === 'in',
|
|
13005
13254
|
'pds-combobox__listbox--drill-out': this.drillDirection === 'out',
|
|
13006
|
-
|
|
13255
|
+
'pds-combobox__listbox--pointer-hover': this.pointerCanHover,
|
|
13256
|
+
}, onAnimationEnd: this.onDrillAnimationEnd, onPointerMove: this.onPanelPointer, onPointerDown: this.onPanelPointer, role: this.showsGroupedPanel ? 'tree' : 'listbox', id: this.listboxId, "aria-label": this.label || 'Options', "aria-multiselectable": "false",
|
|
13007
13257
|
// Focusable but out of the tab order with panel search, so it can take focus when a
|
|
13008
13258
|
// drilled-in group hides the field. Dropping it while focused would blur the list and close.
|
|
13009
13259
|
tabIndex: withSearch ? -1 : undefined, "aria-activedescendant": listTakesFocus ? this.activeDescendantId : undefined, onKeyDown: withSearch ? this.onPanelTreeKeyDown : undefined, ref: el => {
|
|
@@ -13169,7 +13419,21 @@ class PdsCombobox {
|
|
|
13169
13419
|
'pds-combobox__option--layout': isLayout,
|
|
13170
13420
|
'pds-combobox__option--chip': isChip,
|
|
13171
13421
|
'pds-combobox__option--disabled': isDisabled,
|
|
13172
|
-
}, "data-option-index": index, onMouseDown: this.onOptionMouseDown, onClick: this.onOptionClick, onMouseEnter: this.onOptionMouseEnter, onKeyDown: this.onOptionKeyDown }, isLayout ? (hAsync("pds-box", { class: "pds-combobox__option-layout-wrapper", innerHTML: this.getOptionLayoutContent(option) })) : isChip ? (this.renderOptionChip(option)) : (this.
|
|
13422
|
+
}, "data-option-index": index, onMouseDown: this.onOptionMouseDown, onClick: this.onOptionClick, onMouseEnter: this.onOptionMouseEnter, onKeyDown: this.onOptionKeyDown }, isLayout ? (hAsync("pds-box", { class: "pds-combobox__option-layout-wrapper", innerHTML: this.getOptionLayoutContent(option) })) : isChip ? (this.renderOptionChip(option)) : (this.renderOptionLabel(option)), isSelected && hAsync("pds-icon", { icon: "check", size: "regular", class: "pds-combobox__option-check" })));
|
|
13423
|
+
}
|
|
13424
|
+
/** An option's text, after its `data-icon` when it has one. */
|
|
13425
|
+
renderOptionLabel(option) {
|
|
13426
|
+
const icon = optionIconOf(option);
|
|
13427
|
+
if (icon === null)
|
|
13428
|
+
return this.getOptionLabel(option);
|
|
13429
|
+
return (hAsync("span", { class: "pds-combobox__option-label" }, hAsync("pds-icon", { name: icon, size: "regular", "aria-hidden": "true", class: "pds-combobox__option-icon" }), this.getOptionLabel(option)));
|
|
13430
|
+
}
|
|
13431
|
+
/** The grouped panel's rows, in the order the panel draws them and the keyboard moves through. */
|
|
13432
|
+
panelEntries() {
|
|
13433
|
+
// Slotted markup is already in order; only options from data record positions.
|
|
13434
|
+
if (this.options === undefined && !this.asyncUrl)
|
|
13435
|
+
return buildPanelEntries(this.filteredItems);
|
|
13436
|
+
return buildPanelEntries(this.filteredItems, element => this.panelPositions.get(element));
|
|
13173
13437
|
}
|
|
13174
13438
|
/**
|
|
13175
13439
|
* `flyout`: one row per group, its options in a flyout beside it. `drill-in`: the same rows, and
|
|
@@ -13177,7 +13441,7 @@ class PdsCombobox {
|
|
|
13177
13441
|
* it's a tree: the rows and ungrouped options are level 1, a group's options level 2.
|
|
13178
13442
|
*/
|
|
13179
13443
|
renderGroupedPanel() {
|
|
13180
|
-
const entries =
|
|
13444
|
+
const entries = this.panelEntries();
|
|
13181
13445
|
const setsize = entries.length;
|
|
13182
13446
|
if (this.effectiveGroupDisplay === 'drill-in' && this.openGroup !== null) {
|
|
13183
13447
|
const position = entries.findIndex(entry => entry.kind === 'group' && entry.group.optgroup === this.openGroup);
|
|
@@ -13208,22 +13472,26 @@ class PdsCombobox {
|
|
|
13208
13472
|
return (hAsync("li", { key: "group-back", id: id, class: {
|
|
13209
13473
|
'pds-combobox__group-back': true,
|
|
13210
13474
|
'pds-combobox__group-back--disabled': disabled,
|
|
13211
|
-
|
|
13475
|
+
// As the group rows: shaded for the keys, and by `:hover` for the pointer.
|
|
13476
|
+
'pds-combobox__group-back--highlighted': this.keyboardNavigating && this.highlightedGroupRow === group.optgroup,
|
|
13212
13477
|
'pds-combobox__group-back--keyboard': this.keyboardNavigating && this.highlightedGroupRow === group.optgroup,
|
|
13213
13478
|
}, role: "treeitem", "aria-expanded": "true", "aria-disabled": disabled ? 'true' : undefined, "aria-level": 1, "aria-posinset": posinset, "aria-setsize": setsize, "aria-labelledby": `${id}-label` }, hAsync("div", { class: "pds-combobox__group-row-trigger pds-combobox__group-back-trigger", onMouseDown: this.onOptionMouseDown, onMouseEnter: this.onGroupBackMouseEnter, onClick: this.onGroupBackClick }, hAsync("span", { class: "pds-combobox__group-row-label", id: `${id}-label` }, hAsync("pds-icon", { name: "caret-left", size: "regular", "aria-hidden": "true", class: "pds-combobox__group-row-caret" }), hAsync("span", { class: "visually-hidden" }, this.drillInBackLabel, ": "), group.label)), hAsync("ul", { class: "pds-combobox__drill-in-options", role: "group", "aria-label": group.label }, this.renderGroupOptions(group))));
|
|
13214
13479
|
}
|
|
13215
13480
|
renderGroupRow(group, groupIndex, { posinset, setsize }) {
|
|
13216
13481
|
const flyout = this.effectiveGroupDisplay === 'flyout';
|
|
13217
13482
|
const isOpen = flyout && this.openGroup === group.optgroup;
|
|
13218
|
-
|
|
13483
|
+
// Drill-in shades a group row only for the keys: not for the group holding the selection, or the
|
|
13484
|
+
// row the pointer or a click-open left highlighted, which read as picked. `:hover` covers the pointer.
|
|
13485
|
+
const hasSelection = flyout && group.options.some(({ option }) => this.isOptionSelected(option));
|
|
13486
|
+
const isCurrent = this.highlightedGroupRow === group.optgroup;
|
|
13219
13487
|
const disabled = isGroupDisabled(group);
|
|
13220
13488
|
const id = this.groupDomId(group.optgroup);
|
|
13221
13489
|
return (hAsync("li", { key: `group-${groupIndex}`, id: id, class: {
|
|
13222
13490
|
'pds-combobox__group-row': true,
|
|
13223
13491
|
'pds-combobox__group-row--open': isOpen,
|
|
13224
13492
|
'pds-combobox__group-row--has-selection': hasSelection,
|
|
13225
|
-
'pds-combobox__group-row--highlighted':
|
|
13226
|
-
'pds-combobox__group-row--keyboard':
|
|
13493
|
+
'pds-combobox__group-row--highlighted': isCurrent && (flyout || this.keyboardNavigating),
|
|
13494
|
+
'pds-combobox__group-row--keyboard': isCurrent && this.keyboardNavigating,
|
|
13227
13495
|
'pds-combobox__group-row--disabled': disabled,
|
|
13228
13496
|
}, role: "treeitem", "aria-expanded": isOpen ? 'true' : 'false', "aria-disabled": disabled ? 'true' : undefined, "aria-level": 1, "aria-posinset": posinset, "aria-setsize": setsize, "aria-labelledby": `${id}-label`, "data-group-index": groupIndex, onMouseEnter: flyout ? this.onGroupRowMouseEnter : undefined, onMouseLeave: flyout ? this.onGroupRowMouseLeave : undefined }, hAsync("div", { class: "pds-combobox__group-row-trigger", "data-group-index": groupIndex, onMouseDown: this.onOptionMouseDown, onMouseEnter: this.onGroupRowTriggerMouseEnter, onClick: this.onGroupRowClick }, hAsync("span", { class: "pds-combobox__group-row-label", id: `${id}-label` }, group.icon !== null && (
|
|
13229
13497
|
// `name`, not `icon`: `icon` also loads URLs and data: SVGs, unsanitized.
|
|
@@ -13239,7 +13507,23 @@ class PdsCombobox {
|
|
|
13239
13507
|
}
|
|
13240
13508
|
// Helper method to render default text content
|
|
13241
13509
|
renderDefaultContent() {
|
|
13242
|
-
|
|
13510
|
+
const icon = this.selectedIcon;
|
|
13511
|
+
return (hAsync("span", { class: {
|
|
13512
|
+
'pds-combobox__button-trigger-label': true,
|
|
13513
|
+
'pds-combobox__button-trigger-label--placeholder': !this.selectedLabel,
|
|
13514
|
+
'pds-combobox__button-trigger-label--with-icon': icon !== null,
|
|
13515
|
+
} }, icon !== null && (
|
|
13516
|
+
// `name`, not `icon`: `icon` also loads URLs and data: SVGs, unsanitized.
|
|
13517
|
+
hAsync("pds-icon", { name: icon, size: "regular", "aria-hidden": "true", class: "pds-combobox__button-trigger-icon" })), this.selectedLabel || this.placeholder));
|
|
13518
|
+
}
|
|
13519
|
+
/** The selection's icon for the button trigger: the option's own, or else its group's. */
|
|
13520
|
+
get selectedIcon() {
|
|
13521
|
+
var _a;
|
|
13522
|
+
const option = this.selectedOption;
|
|
13523
|
+
if (!option)
|
|
13524
|
+
return null;
|
|
13525
|
+
const optgroup = parentOptgroupOf(option);
|
|
13526
|
+
return (_a = optionIconOf(option)) !== null && _a !== void 0 ? _a : (optgroup !== null ? groupIconOf(optgroup) : null);
|
|
13243
13527
|
}
|
|
13244
13528
|
// Helper method to check if we should show layout content
|
|
13245
13529
|
shouldShowLayoutContent() {
|
|
@@ -13357,6 +13641,7 @@ class PdsCombobox {
|
|
|
13357
13641
|
];
|
|
13358
13642
|
}
|
|
13359
13643
|
render() {
|
|
13644
|
+
var _a;
|
|
13360
13645
|
const triggerClass = [
|
|
13361
13646
|
'pds-combobox__button-trigger',
|
|
13362
13647
|
`pds-combobox__button-trigger--${this.triggerVariant}`,
|
|
@@ -13364,13 +13649,18 @@ class PdsCombobox {
|
|
|
13364
13649
|
]
|
|
13365
13650
|
.filter(Boolean)
|
|
13366
13651
|
.join(' ');
|
|
13367
|
-
return (hAsync(Host, { key: '
|
|
13652
|
+
return (hAsync(Host, { key: 'c3bda161c67bab75f306c7f38435d279e5a88756', "aria-disabled": this.disabled ? 'true' : null }, hAsync("div", { key: '92b3f83c14a7296b3b2671eaef538a15743f695f', class: "pds-combobox", tabIndex: -1, onFocusout: this.onComboboxFocusOut, part: "combobox" }, this.hasVisibleLabel && (hAsync("label", { key: '4a2dba09dd6db9893e21346b861b4c6cb891112b', htmlFor: this.trigger === 'input' ? this.componentId : undefined, id: this.labelId, class: "pds-combobox__label", onClick: this.onLabelClick }, this.label)), this.trigger === 'input' ? (hAsync("div", { class: "pds-combobox__input-wrapper", style: { width: this.triggerWidth } }, hAsync("input", { ref: el => {
|
|
13368
13653
|
this.inputEl = el;
|
|
13369
13654
|
this.triggerEl = el;
|
|
13370
13655
|
}, class: {
|
|
13371
13656
|
'pds-combobox__input': true,
|
|
13372
13657
|
'pds-combobox__input--invalid': this.isInvalid(),
|
|
13373
|
-
}, type: "text", role: "combobox", "aria-autocomplete": "list", "aria-haspopup": this.inputPopupRole === 'tree' ? 'tree' : undefined, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, value: this.displayText, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput, onClick: this.handleInputClick, onKeyDown: this.handleKeyDown, autocomplete: "off", part: "input" }), hAsync("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (hAsync("div", { class: this.getChipTriggerClass(), style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "chip-trigger" }, this.renderChipTriggerContent())) : (hAsync("div", { class: triggerClass, style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), hAsync("div", { key: '
|
|
13658
|
+
}, type: "text", role: "combobox", "aria-autocomplete": "list", "aria-haspopup": this.inputPopupRole === 'tree' ? 'tree' : undefined, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, value: this.displayText, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput, onClick: this.handleInputClick, onKeyDown: this.handleKeyDown, autocomplete: "off", part: "input" }), hAsync("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (hAsync("div", { class: this.getChipTriggerClass(), style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "chip-trigger" }, this.renderChipTriggerContent())) : (hAsync("div", { class: triggerClass, style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), hAsync("div", { key: 'b8d358339bb26037b6c3c464bd4e13fe978f7857', style: { display: 'none' } }, hAsync("slot", { key: '4aa4c2b8f2b57e13d1e958cc745c61e39e800529', onSlotchange: () => this.updateOptions() })), this.renderDropdown(), this.groupDisplay !== 'inline' && [
|
|
13659
|
+
hAsync("span", { key: "drill-status", class: "visually-hidden", role: "status", "aria-live": "polite" }, this.isOpen && this.effectiveGroupDisplay === 'drill-in' && this.openGroup !== null ? this.openGroup.label : ''),
|
|
13660
|
+
// Its own region: sharing one, revealing a row then opening it would leave the text the
|
|
13661
|
+
// same, and opening the group would go unannounced.
|
|
13662
|
+
hAsync("span", { key: "reveal-status", class: "visually-hidden", role: "status", "aria-live": "polite" }, this.isOpen ? (_a = this.revealedGroupLabel) !== null && _a !== void 0 ? _a : '' : ''),
|
|
13663
|
+
])));
|
|
13374
13664
|
}
|
|
13375
13665
|
static get formAssociated() { return true; }
|
|
13376
13666
|
get el() { return getElement(this); }
|
|
@@ -13384,6 +13674,9 @@ class PdsCombobox {
|
|
|
13384
13674
|
"flyoutFallback": [{
|
|
13385
13675
|
"flyoutFallbackChanged": 0
|
|
13386
13676
|
}],
|
|
13677
|
+
"disabled": [{
|
|
13678
|
+
"disabledChanged": 0
|
|
13679
|
+
}],
|
|
13387
13680
|
"isOpen": [{
|
|
13388
13681
|
"isOpenChanged": 0
|
|
13389
13682
|
}],
|
|
@@ -13453,6 +13746,8 @@ class PdsCombobox {
|
|
|
13453
13746
|
"drillDirection": [32],
|
|
13454
13747
|
"highlightedGroup": [32],
|
|
13455
13748
|
"keyboardNavigating": [32],
|
|
13749
|
+
"revealedGroupLabel": [32],
|
|
13750
|
+
"pointerCanHover": [32],
|
|
13456
13751
|
"panelQuery": [32],
|
|
13457
13752
|
"flyoutFallback": [32],
|
|
13458
13753
|
"selectedOption": [32],
|
|
@@ -13500,7 +13795,7 @@ class PdsContainer {
|
|
|
13500
13795
|
hostStyle['--pine-container-max-width'] = customSize;
|
|
13501
13796
|
if (!this.centered)
|
|
13502
13797
|
hostStyle['margin-inline'] = '0';
|
|
13503
|
-
return (hAsync(Host, { key: '
|
|
13798
|
+
return (hAsync(Host, { key: '8a9b10b5d0e348b73f8a6bd7933083c596df10d8', class: { [`pds-container--${this.size}`]: isNamed }, style: Object.keys(hostStyle).length ? hostStyle : undefined }, hAsync(Tag, { key: '55fb22be49377c4cccf08381e7cf954a3f097d08', part: "container" }, hAsync("slot", { key: '4cd9c4fa74a2c6a056e076ab67a0279c395b5c79' }))));
|
|
13504
13799
|
}
|
|
13505
13800
|
static get style() { return pdsContainerCss(); }
|
|
13506
13801
|
static get cmpMeta() { return {
|
|
@@ -13620,7 +13915,7 @@ class PdsCopytext {
|
|
|
13620
13915
|
render() {
|
|
13621
13916
|
const hostClass = this.classNames();
|
|
13622
13917
|
this.hostKeeper.record(hostClass);
|
|
13623
|
-
return (hAsync(Host, { key: '
|
|
13918
|
+
return (hAsync(Host, { key: 'd9bd40af6e435d606841cb551341eab33c5983b7', class: hostClass, id: this.componentId }, hAsync("pds-button", { key: '7a42b32678fccb2cbe0d7a68a5da6d5fe5276a4a', type: "button", variant: "unstyled", onClick: this.handleClick }, hAsync("span", { key: '732db283b8075ebad8e1daff70692bac2978aade', ref: (el) => this.valueSpanEl = el }, this.value), hAsync("pds-icon", { key: 'ebfd34b9b5a47b78783302ce97d752af09e3f3e3', "aria-hidden": "true", icon: copy, size: "16px" }))));
|
|
13624
13919
|
}
|
|
13625
13920
|
get el() { return getElement(this); }
|
|
13626
13921
|
static get watchers() { return {
|
|
@@ -15622,14 +15917,14 @@ class PdsDatepicker {
|
|
|
15622
15917
|
}
|
|
15623
15918
|
render() {
|
|
15624
15919
|
const locale = this.resolvedLocale;
|
|
15625
|
-
return (hAsync(Host, { key: '
|
|
15920
|
+
return (hAsync(Host, { key: '82ffd88b7741a90edc28b66a7384178eb2a9a86c', class: { 'pds-datepicker--range': this.range, 'pds-datepicker--time': this.timePicker }, "full-width": this.fullWidth ? 'true' : null, onFocusin: this.onHostFocusIn, onFocusout: this.onHostFocusOut }, hAsync("pds-input", { key: 'f2b9aad64d1fe8d94327cc3d4f87cd6904eb3076', ref: (el) => (this.inputEl = el), componentId: this.baseId, label: this.label, hideLabel: this.hideLabel, helperMessage: this.helperMessage, errorMessage: this.errorMessage, invalid: this.invalid || !!this.textError || !!this.valueError(), disabled: this.disabled, readonly: this.readonly, required: this.required, placeholder: this.fieldPlaceholder, fullWidth: this.fullWidth, autocomplete: "off", value: this.text, onClick: this.onFieldClick, onPdsInput: this.onTextInput, onPdsChange: this.onTextChange, onPdsKeyDown: this.onTextKeyDown, onPdsFocus: this.stopInnerEvent, onPdsBlur: this.stopInnerEvent }, this.clearable && !!this.value && this.isInteractive && (hAsync("button", {
|
|
15626
15921
|
// Keyed, as is the calendar button: when Clear appears after a pick, the focused
|
|
15627
15922
|
// calendar button must stay that button rather than be reused as Clear.
|
|
15628
15923
|
key: "clear", slot: "suffix", type: "button", class: "pds-datepicker__clear", ref: (el) => (this.clearEl = el), "aria-label": this.label ? `${this.clearLabel} ${this.label}` : this.clearLabel,
|
|
15629
15924
|
// Out of the tab order, as a native search field's clear button is: Tab from a field
|
|
15630
15925
|
// just emptied would land on it as the change removes it, dropping focus to the page.
|
|
15631
15926
|
tabindex: "-1", onMouseDown: this.onClearMouseDown, onClick: this.onClearClick
|
|
15632
|
-
}, hAsync("pds-icon", { key: '
|
|
15927
|
+
}, hAsync("pds-icon", { key: 'f2c784e9d6577d4900b7641ee58aa43f5922fc75', icon: remove, "aria-hidden": "true" }))), hAsync("button", { key: "trigger", slot: "suffix", type: "button", class: "pds-datepicker__trigger", ref: (el) => (this.triggerEl = el), "aria-label": this.triggerAccessibleName(locale), "aria-haspopup": "dialog", "aria-expanded": this.isOpen ? 'true' : 'false', disabled: !this.isInteractive, onClick: this.onTriggerClick, onKeyDown: this.onTriggerKeyDown }, hAsync("pds-icon", { key: '98b2e773240c8ea2bbd5a1acfa3c9ba74cb7917b', icon: calendarSimple, "aria-hidden": "true" }))), this.isOpen && this.renderCalendar(locale)));
|
|
15633
15928
|
}
|
|
15634
15929
|
static get formAssociated() { return true; }
|
|
15635
15930
|
get el() { return getElement(this); }
|
|
@@ -15771,7 +16066,7 @@ class PdsDivider {
|
|
|
15771
16066
|
return classNames.join(' ');
|
|
15772
16067
|
}
|
|
15773
16068
|
render() {
|
|
15774
|
-
return (hAsync(Host, { key: '
|
|
16069
|
+
return (hAsync(Host, { key: 'ef2a5ee85e8f37036be5b8df490683636ffb66f0', id: this.componentId }, this.hasLabel ? (hAsync("div", { class: this.classNames(), role: "separator", "aria-label": this.label }, hAsync("span", { class: "pds-divider__label", part: "label", "aria-hidden": "true" }, this.label))) : (hAsync("hr", { class: this.classNames() }))));
|
|
15775
16070
|
}
|
|
15776
16071
|
static get style() { return pdsDividerCss(); }
|
|
15777
16072
|
static get cmpMeta() { return {
|
|
@@ -15815,22 +16110,24 @@ function unwrapReconnectedContent(container, selector, contentSelector) {
|
|
|
15815
16110
|
}
|
|
15816
16111
|
}
|
|
15817
16112
|
|
|
15818
|
-
const pdsDrawerCss = () => `.pds-drawer__modal>.pds-modal__backdrop{-ms-flex-align:stretch;align-items:stretch
|
|
16113
|
+
const pdsDrawerCss = () => `.pds-drawer__modal>.pds-modal__backdrop{-ms-flex-align:stretch;align-items:stretch}.pds-drawer__modal:not(.pds-drawer__modal--modal)>.pds-modal__backdrop{background-color:transparent;pointer-events:none}@supports ((-webkit-backdrop-filter: blur(3px)) or (backdrop-filter: blur(3px))){.pds-drawer__modal:not(.pds-drawer__modal--modal)>.pds-modal__backdrop{-webkit-backdrop-filter:none;backdrop-filter:none}}.pds-drawer__modal>.pds-modal__backdrop[aria-modal]::before{content:none}.pds-drawer__modal>.pds-modal__backdrop>.pds-modal{border-radius:0;height:100%;margin:0;max-height:100%;max-width:100%;pointer-events:auto;width:var(--pds-drawer-width, 500px)}.pds-drawer{display:contents}.pds-drawer.pds-drawer--end .pds-drawer__modal>.pds-modal__backdrop{-ms-flex-pack:end;justify-content:flex-end}.pds-drawer.pds-drawer--start .pds-drawer__modal>.pds-modal__backdrop{-ms-flex-pack:start;justify-content:flex-start}.pds-drawer.pds-drawer--sm{--pds-drawer-width:360px}.pds-drawer.pds-drawer--md{--pds-drawer-width:500px}`;
|
|
15819
16114
|
|
|
15820
|
-
// Known selectors for content Pine components portal
|
|
15821
|
-
//
|
|
16115
|
+
// Known selectors for content Pine components portal out of place rather than
|
|
16116
|
+
// rendering where they are — pds-tooltip and pds-combobox's dropdown in
|
|
16117
|
+
// document.body, pds-popover in the body or the open dialog it's in.
|
|
15822
16118
|
// A pointerdown landing on one of these is not "outside" the drawer in the
|
|
15823
16119
|
// sense light dismiss cares about: it belongs to an overlay something inside
|
|
15824
16120
|
// the drawer opened, even though it is not a DOM descendant of the drawer.
|
|
15825
16121
|
const PORTALED_OVERLAY_SELECTOR = '.pds-popover, .pds-tooltip, .pds-combobox-dropdown-portal';
|
|
15826
16122
|
/**
|
|
15827
|
-
* A
|
|
16123
|
+
* A side panel composed from `pds-modal`, non-modal by default.
|
|
15828
16124
|
*
|
|
15829
|
-
*
|
|
15830
|
-
* dimming, no blur, no scroll lock, no click blocking.
|
|
15831
|
-
* `pds-modal` internally with `disableTopLayer`
|
|
15832
|
-
* suppressed, and adds the edge, width and dismiss behavior a
|
|
15833
|
-
* needs on top.
|
|
16125
|
+
* By default, unlike `pds-modal`, the page stays interactive while a drawer
|
|
16126
|
+
* is open: no dimming, no blur, no scroll lock, no click blocking.
|
|
16127
|
+
* `pds-drawer` renders a `pds-modal` internally with `disableTopLayer` on and
|
|
16128
|
+
* its backdrop suppressed, and adds the edge, width and dismiss behavior a
|
|
16129
|
+
* side panel needs on top. With `modal`, it opens that `pds-modal` in the top
|
|
16130
|
+
* layer instead and keeps its backdrop. It does not reimplement focus, Escape or dialog semantics —
|
|
15834
16131
|
* those come from `pds-modal` unchanged.
|
|
15835
16132
|
* @lightDom renders-markup
|
|
15836
16133
|
*/
|
|
@@ -15861,8 +16158,18 @@ class PdsDrawer {
|
|
|
15861
16158
|
*/
|
|
15862
16159
|
this.scrollable = true;
|
|
15863
16160
|
/**
|
|
15864
|
-
* Whether the drawer
|
|
15865
|
-
*
|
|
16161
|
+
* Whether the drawer is modal. A modal drawer dims the page behind it with a
|
|
16162
|
+
* backdrop, makes the page inert, and keeps focus inside the drawer, like
|
|
16163
|
+
* `pds-modal`. Use it for a task the page should wait on. Leave it off for a
|
|
16164
|
+
* panel people work alongside the page. Read when the drawer opens; changing
|
|
16165
|
+
* it while the drawer is open is not supported.
|
|
16166
|
+
* @default false
|
|
16167
|
+
*/
|
|
16168
|
+
this.modal = false;
|
|
16169
|
+
/**
|
|
16170
|
+
* Whether the drawer can be dismissed with a pointerdown outside it (in a
|
|
16171
|
+
* `modal` drawer, a click on its backdrop).
|
|
16172
|
+
* Replaces `pds-modal`'s `backdropDismiss`.
|
|
15866
16173
|
* This also gates Escape, matching how `backdropDismiss` gates Escape on
|
|
15867
16174
|
* `pds-modal` today: setting this to `false` means the close button is the
|
|
15868
16175
|
* only way out.
|
|
@@ -15881,7 +16188,8 @@ class PdsDrawer {
|
|
|
15881
16188
|
* background event while the user is mid-task elsewhere on the page —
|
|
15882
16189
|
* moving focus there would interrupt them, and the page stays live under
|
|
15883
16190
|
* a non-modal drawer, so it is a genuine data-entry risk, not just an
|
|
15884
|
-
* annoyance.
|
|
16191
|
+
* annoyance. A `modal` drawer ignores `none`: the page behind it is inert,
|
|
16192
|
+
* so focus starts in the drawer.
|
|
15885
16193
|
* @default 'auto'
|
|
15886
16194
|
*/
|
|
15887
16195
|
this.initialFocus = 'auto';
|
|
@@ -15927,7 +16235,8 @@ class PdsDrawer {
|
|
|
15927
16235
|
// page underneath stays genuinely clickable, which means a click there
|
|
15928
16236
|
// never reaches pds-modal's backdrop element at all.
|
|
15929
16237
|
handleOutsidePointerDown(e) {
|
|
15930
|
-
|
|
16238
|
+
// A modal drawer's backdrop takes the click instead, through pds-modal.
|
|
16239
|
+
if (this.modal || !this.lightDismiss || !this.open)
|
|
15931
16240
|
return;
|
|
15932
16241
|
const target = e.target;
|
|
15933
16242
|
if (!target)
|
|
@@ -15937,7 +16246,7 @@ class PdsDrawer {
|
|
|
15937
16246
|
if (target.closest(PORTALED_OVERLAY_SELECTOR))
|
|
15938
16247
|
return;
|
|
15939
16248
|
// A datepicker's portaled calendar counts as inside only when its datepicker is in the drawer,
|
|
15940
|
-
// or in an overlay portaled from it (a pds-popover in the drawer puts its content
|
|
16249
|
+
// or in an overlay portaled from it (a pds-popover in the drawer puts its content beside it).
|
|
15941
16250
|
const calendar = target.closest('.pds-datepicker-calendar-portal');
|
|
15942
16251
|
const owner = calendar === null || calendar === void 0 ? void 0 : calendar.pdsDatepicker;
|
|
15943
16252
|
if (owner && (containsComposed$1(this.el, owner) || closest$1(PORTALED_OVERLAY_SELECTOR, owner)))
|
|
@@ -15953,11 +16262,11 @@ class PdsDrawer {
|
|
|
15953
16262
|
this.open = false;
|
|
15954
16263
|
}
|
|
15955
16264
|
render() {
|
|
15956
|
-
return (hAsync(Host, { key: '
|
|
16265
|
+
return (hAsync(Host, { key: '287bf043c991209488eb1b617031acffb59ff9af', class: {
|
|
15957
16266
|
'pds-drawer': true,
|
|
15958
16267
|
[`pds-drawer--${this.side}`]: true,
|
|
15959
16268
|
[`pds-drawer--${this.size}`]: true,
|
|
15960
|
-
} }, hAsync("pds-modal", { key: '
|
|
16269
|
+
} }, hAsync("pds-modal", { key: 'cd86fb552353f5cc12fb36fc956033432a91847c', class: { 'pds-drawer__modal': true, 'pds-drawer__modal--modal': this.modal }, ref: (el) => (this.modalEl = el), componentId: this.componentId, open: this.open, scrollable: this.scrollable, disableTopLayer: !this.modal, backdropDismiss: this.lightDismiss, disableInitialFocus: !this.modal && this.initialFocus === 'none' }, hAsync("slot", { key: '56bbe9b5c26b10b07c0f503ba147899a57a5de85' }))));
|
|
15961
16270
|
}
|
|
15962
16271
|
get el() { return getElement(this); }
|
|
15963
16272
|
static get style() { return pdsDrawerCss(); }
|
|
@@ -15970,6 +16279,7 @@ class PdsDrawer {
|
|
|
15970
16279
|
"side": [1],
|
|
15971
16280
|
"size": [1],
|
|
15972
16281
|
"scrollable": [4],
|
|
16282
|
+
"modal": [4],
|
|
15973
16283
|
"lightDismiss": [4, "light-dismiss"],
|
|
15974
16284
|
"initialFocus": [1, "initial-focus"]
|
|
15975
16285
|
},
|
|
@@ -15997,7 +16307,7 @@ class PdsDrawerContent {
|
|
|
15997
16307
|
unwrapReconnectedContent(this.el.querySelector('.pds-drawer-content'), '.pds-drawer-content');
|
|
15998
16308
|
}
|
|
15999
16309
|
render() {
|
|
16000
|
-
return (hAsync("div", { key: '
|
|
16310
|
+
return (hAsync("div", { key: 'f307939ab0a94f6a0d8a3675c658def0ded68b98', class: "pds-drawer-content" }, hAsync("slot", { key: 'dadac08ac15bb8ded98ea982511e2d57bea9bdca' })));
|
|
16001
16311
|
}
|
|
16002
16312
|
get el() { return getElement(this); }
|
|
16003
16313
|
static get style() { return pdsDrawerContentCss(); }
|
|
@@ -16025,7 +16335,7 @@ class PdsDrawerFooter {
|
|
|
16025
16335
|
unwrapReconnectedContent(this.el.querySelector('.pds-drawer__footer'), '.pds-drawer__footer');
|
|
16026
16336
|
}
|
|
16027
16337
|
render() {
|
|
16028
|
-
return (hAsync("footer", { key: '
|
|
16338
|
+
return (hAsync("footer", { key: 'b58c68d88b467e8baa3682d16f97076d06ea2414', class: "pds-drawer__footer" }, hAsync("slot", { key: 'ff2306202c14029b397d40b5bb3d672a8aa571c0' })));
|
|
16029
16339
|
}
|
|
16030
16340
|
get el() { return getElement(this); }
|
|
16031
16341
|
static get style() { return pdsDrawerFooterCss(); }
|
|
@@ -16053,7 +16363,7 @@ class PdsDrawerHeader {
|
|
|
16053
16363
|
unwrapReconnectedContent(this.el.querySelector('.pds-drawer__header'), '.pds-drawer__header');
|
|
16054
16364
|
}
|
|
16055
16365
|
render() {
|
|
16056
|
-
return (hAsync("header", { key: '
|
|
16366
|
+
return (hAsync("header", { key: '280e6ca734317d5733e4c595431c8070eff13d58', class: "pds-drawer__header" }, hAsync("slot", { key: 'cc6af6084600c4dc60d7bd99e040376abdf5ffe3' })));
|
|
16057
16367
|
}
|
|
16058
16368
|
get el() { return getElement(this); }
|
|
16059
16369
|
static get style() { return pdsDrawerHeaderCss(); }
|
|
@@ -16067,9 +16377,10 @@ class PdsDrawerHeader {
|
|
|
16067
16377
|
}; }
|
|
16068
16378
|
}
|
|
16069
16379
|
|
|
16070
|
-
const pdsDropdownMenuCss = () => `:host{display:block}.is-hidden{display:none}.pds-dropdown-menu--panel{background-color:var(--pine-color-background-overlay);border-radius:var(--pine-dimension-xs);left:var(--pine-dimension-none);min-width:170px;padding:var(--pine-dimension-xs);position:fixed;z-index:var(--pine-z-index-overlay)}:host-context([data-theme=dark]) .pds-dropdown-menu--panel{border:var(--pine-border)}::slotted(a),::slotted(button){-ms-flex-align:center;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;border-radius:var(--pine-dimension-xs) !important;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--pine-color-text) !important;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;font:var(--pine-typography-body-medium) !important;gap:var(--pine-dimension-xs);margin:calc(var(--pine-border-width) + 2px) !important;padding:var(--pine-dimension-xs) !important;text-align:start;text-decoration:none !important;width:calc(100% - (var(--pine-border-width) + 2px) * 2)}::slotted(.destructive){color:var(--pine-color-danger) !important}::slotted([aria-disabled=true]),::slotted([disabled]:not([disabled=false])){cursor:not-allowed;opacity:0.5;pointer-events:none}`;
|
|
16380
|
+
const pdsDropdownMenuCss = () => `:host{display:block}.is-hidden{display:none}.pds-dropdown-menu--panel{background-color:var(--pine-color-background-overlay);border-radius:var(--pine-dimension-xs);left:var(--pine-dimension-none);min-width:170px;padding:var(--pine-dimension-xs);position:fixed;z-index:var(--pine-z-index-overlay)}:host-context([data-theme=dark]) .pds-dropdown-menu--panel{border:var(--pine-border)}.pds-dropdown-menu__header{-webkit-border-after:var(--pine-border-width-thin) solid var(--pine-color-border);border-block-end:var(--pine-border-width-thin) solid var(--pine-color-border);-webkit-margin-after:var(--pine-dimension-xs);margin-block-end:var(--pine-dimension-xs);margin-inline:calc(var(--pine-dimension-xs) * -1);-webkit-padding-after:var(--pine-dimension-xs);padding-block-end:var(--pine-dimension-xs);padding-inline:calc(var(--pine-dimension-xs) * 2 + var(--pine-border-width) + 2px);text-align:start}.pds-dropdown-menu__items{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}::slotted(a:not([slot=header])),::slotted(button:not([slot=header])){-ms-flex-align:center;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;border-radius:var(--pine-dimension-xs) !important;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--pine-color-text) !important;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;font:var(--pine-typography-body-medium) !important;gap:var(--pine-dimension-xs);margin:calc(var(--pine-border-width) + 2px) !important;padding:var(--pine-dimension-xs) !important;text-align:start;text-decoration:none !important;width:calc(100% - (var(--pine-border-width) + 2px) * 2)}::slotted(.destructive:not([slot=header])){color:var(--pine-color-danger) !important}::slotted([aria-disabled=true]:not([slot=header])),::slotted([disabled]:not([disabled=false]):not([slot=header])){cursor:not-allowed;opacity:0.5;pointer-events:none}`;
|
|
16071
16381
|
|
|
16072
16382
|
/**
|
|
16383
|
+
* @slot header - Non-interactive content displayed above the menu items inside the dropdown panel. It renders outside the menu role, so assistive tech reads it as plain content rather than as a menu item.
|
|
16073
16384
|
* @part menu-panel - Exposes the dropdown menu container for styling.
|
|
16074
16385
|
*/
|
|
16075
16386
|
class PdsDropdownMenu {
|
|
@@ -16080,6 +16391,7 @@ class PdsDropdownMenu {
|
|
|
16080
16391
|
this.cleanupAutoUpdate = null;
|
|
16081
16392
|
this.triggerObserver = null;
|
|
16082
16393
|
this.currentFocusIndex = -1;
|
|
16394
|
+
this.hasHeader = false;
|
|
16083
16395
|
/**
|
|
16084
16396
|
* The placement of the dropdown panel relative to the trigger.
|
|
16085
16397
|
*/
|
|
@@ -16098,8 +16410,11 @@ class PdsDropdownMenu {
|
|
|
16098
16410
|
// Writes the trigger's ARIA from the menu's state, so the observer's own callback doesn't loop.
|
|
16099
16411
|
this.syncTriggerAria = () => {
|
|
16100
16412
|
if (!this.triggerEl)
|
|
16101
|
-
return;
|
|
16102
|
-
setAttributesIfChanged(this.triggerEl, { 'aria-haspopup': 'menu', 'aria-expanded': String(this.isOpen) });
|
|
16413
|
+
return false;
|
|
16414
|
+
return setAttributesIfChanged(this.triggerEl, { 'aria-haspopup': 'menu', 'aria-expanded': String(this.isOpen) });
|
|
16415
|
+
};
|
|
16416
|
+
this.handleHeaderSlotChange = (event) => {
|
|
16417
|
+
this.hasHeader = event.target.assignedElements().length > 0;
|
|
16103
16418
|
};
|
|
16104
16419
|
this.handleSlotChange = (event) => {
|
|
16105
16420
|
this.slotEl = event.target;
|
|
@@ -16178,6 +16493,9 @@ class PdsDropdownMenu {
|
|
|
16178
16493
|
this.toggleDropdown();
|
|
16179
16494
|
};
|
|
16180
16495
|
}
|
|
16496
|
+
componentWillLoad() {
|
|
16497
|
+
this.hasHeader = Array.from(this.host.children).some(el => el.getAttribute('slot') === 'header');
|
|
16498
|
+
}
|
|
16181
16499
|
componentDidRender() {
|
|
16182
16500
|
var _a;
|
|
16183
16501
|
this.panelEl = (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('pds-box');
|
|
@@ -16206,7 +16524,8 @@ class PdsDropdownMenu {
|
|
|
16206
16524
|
this.triggerObserver = null;
|
|
16207
16525
|
if (!this.triggerEl || typeof MutationObserver === 'undefined')
|
|
16208
16526
|
return;
|
|
16209
|
-
|
|
16527
|
+
// Capped against a script that keeps undoing it; opening and closing still write it directly.
|
|
16528
|
+
this.triggerObserver = new MutationObserver(limitRestores(this.syncTriggerAria, 'pds-dropdown-menu: stopped restoring its trigger ARIA, as another script keeps changing it. It may be wrong until the menu opens or closes.', this.triggerEl));
|
|
16210
16529
|
this.triggerObserver.observe(this.triggerEl, {
|
|
16211
16530
|
attributes: true,
|
|
16212
16531
|
attributeFilter: ['aria-haspopup', 'aria-expanded'],
|
|
@@ -16312,15 +16631,19 @@ class PdsDropdownMenu {
|
|
|
16312
16631
|
this.focusItemByIndex(prevIndex);
|
|
16313
16632
|
}
|
|
16314
16633
|
}
|
|
16634
|
+
// Escape is taken in document's capture phase, before a modal around the menu hears it on
|
|
16635
|
+
// document and closes too.
|
|
16636
|
+
handleEscapeKeyDown(event) {
|
|
16637
|
+
if (!this.isOpen || event.key !== 'Escape' || event.defaultPrevented)
|
|
16638
|
+
return;
|
|
16639
|
+
event.preventDefault();
|
|
16640
|
+
this.closeDropdown();
|
|
16641
|
+
}
|
|
16315
16642
|
// Handle keyboard events for the dropdown
|
|
16316
16643
|
handleKeyDown(event) {
|
|
16317
16644
|
if (!this.isOpen)
|
|
16318
16645
|
return;
|
|
16319
16646
|
switch (event.key) {
|
|
16320
|
-
case 'Escape':
|
|
16321
|
-
event.preventDefault();
|
|
16322
|
-
this.closeDropdown();
|
|
16323
|
-
break;
|
|
16324
16647
|
case 'ArrowDown':
|
|
16325
16648
|
event.preventDefault();
|
|
16326
16649
|
this.focusNextItem();
|
|
@@ -16412,7 +16735,7 @@ class PdsDropdownMenu {
|
|
|
16412
16735
|
}
|
|
16413
16736
|
}
|
|
16414
16737
|
render() {
|
|
16415
|
-
return (hAsync(Host, { key: '
|
|
16738
|
+
return (hAsync(Host, { key: '18dac4d59ea236fe171f4c16f6571cb1547059c6', id: this.componentId }, hAsync("slot", { key: '95201a75a33ccb70dbd51a5cf9d78c76ebf26f65', name: "trigger", onSlotchange: this.handleTriggerSlotChange }), hAsync("pds-box", { key: '7fc588f40f607ad81ad70bf74a525d078d32a80b', "border-radius": "sm", display: "flex", direction: "column", class: "pds-dropdown-menu--panel is-hidden", shadow: "100", part: "menu-panel" }, hAsync("div", { key: '73d13d94edccb68db7b703f930b50f729334efa8', class: { 'pds-dropdown-menu__header': true, 'is-hidden': !this.hasHeader } }, hAsync("slot", { key: '7066f3a6f71c8961326f38f0509f1c0cc17098ae', name: "header", onSlotchange: this.handleHeaderSlotChange })), hAsync("div", { key: '9f07ec488b688c58c6422b575015ccd364075fe8', class: "pds-dropdown-menu__items", role: "menu", "aria-orientation": "vertical" }, hAsync("slot", { key: 'd0aad3f9ac3b58779669411523adbb8878dec61c', onSlotchange: this.handleSlotChange })))));
|
|
16416
16739
|
}
|
|
16417
16740
|
get host() { return getElement(this); }
|
|
16418
16741
|
static get style() { return pdsDropdownMenuCss(); }
|
|
@@ -16422,9 +16745,10 @@ class PdsDropdownMenu {
|
|
|
16422
16745
|
"$members$": {
|
|
16423
16746
|
"componentId": [1, "component-id"],
|
|
16424
16747
|
"placement": [1],
|
|
16425
|
-
"currentFocusIndex": [32]
|
|
16748
|
+
"currentFocusIndex": [32],
|
|
16749
|
+
"hasHeader": [32]
|
|
16426
16750
|
},
|
|
16427
|
-
"$listeners$": [[8, "keydown", "handleKeyDown"], [8, "click", "handleWindowClick"]],
|
|
16751
|
+
"$listeners$": [[6, "keydown", "handleEscapeKeyDown"], [8, "keydown", "handleKeyDown"], [8, "click", "handleWindowClick"]],
|
|
16428
16752
|
"$lazyBundleId$": "-",
|
|
16429
16753
|
"$attrsToReflect$": []
|
|
16430
16754
|
}; }
|
|
@@ -16507,7 +16831,7 @@ class PdsDropdownMenuItem {
|
|
|
16507
16831
|
}, tabIndex: this.disabled ? -1 : 0, type: "button", part: "button", onKeyDown: this.handleKeyDown, onFocus: this.handleFocus, onBlur: this.handleBlur, disabled: this.disabled, "aria-disabled": this.disabled ? 'true' : null }, hAsync("slot", null)));
|
|
16508
16832
|
}
|
|
16509
16833
|
render() {
|
|
16510
|
-
return (hAsync(Host, { key: '
|
|
16834
|
+
return (hAsync(Host, { key: '33bd645d7c9547e3fd07429cf795302e6a482296', id: this.componentId, class: { 'is-disabled': this.disabled, 'destructive': !this.disabled && this.destructive }, onClick: () => !this.disabled && this.handleClick(), role: "none", tabIndex: -1, "aria-disabled": this.disabled ? 'true' : null }, this.renderElement()));
|
|
16511
16835
|
}
|
|
16512
16836
|
get host() { return getElement(this); }
|
|
16513
16837
|
static get style() { return pdsDropdownMenuItemCss(); }
|
|
@@ -16543,7 +16867,7 @@ class PdsDropdownMenuSeparator {
|
|
|
16543
16867
|
this.disabled = false;
|
|
16544
16868
|
}
|
|
16545
16869
|
render() {
|
|
16546
|
-
return (hAsync(Host, { key: '
|
|
16870
|
+
return (hAsync(Host, { key: '60407a2edc8b4667d39cbd1ba9a859d09b0b8ff1', id: this.componentId }, hAsync("hr", { key: '8485d1c8508c5fe5e3635505f25e278f45f45b82' })));
|
|
16547
16871
|
}
|
|
16548
16872
|
static get style() { return pdsDropdownMenuSeparatorCss(); }
|
|
16549
16873
|
static get cmpMeta() { return {
|
|
@@ -17123,7 +17447,7 @@ class PdsFilter {
|
|
|
17123
17447
|
return null;
|
|
17124
17448
|
}
|
|
17125
17449
|
render() {
|
|
17126
|
-
return (hAsync(Host, { key: '
|
|
17450
|
+
return (hAsync(Host, { key: '3cae951aee1f9c75f3e207cf6c68633a23f8f6dc', id: this.componentId }, hAsync("button", { key: 'f4c644710dc936248995be9a49cef8ad13031d61', class: this.getTriggerClasses(), type: "button", popoverTarget: this.variant !== 'clear' ? `${this.componentId}-popover` : undefined, popoverTargetAction: this.variant !== 'clear' ? 'toggle' : undefined, onKeyDown: this.variant === 'clear' ? this.handleKeyDown : undefined, onClick: (event) => this.handleClick(event), part: "button", "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": this.variant !== 'clear' ? 'true' : undefined, "aria-controls": this.variant !== 'clear' ? `${this.componentId}-popover` : undefined }, hAsync("span", { key: '2dd87e53f363118becc762051ea1be664258b8b6', class: "pds-filter__button-content", part: "button-content" }, this.renderIcon(), this.text && (hAsync("span", { key: '733ceb5e07198e844fbdc1af294d2046c4c571d8', class: "pds-filter__button-text", part: "button-text" }, this.text)), this.renderDropdownIcon())), this.variant !== 'clear' && (hAsync("div", { key: 'beb65a21192c6f5c16703aec7ab9a92ea378ef3c', ref: el => this.popoverEl = el, id: `${this.componentId}-popover`, class: "pds-filter__popover", popover: "auto", part: "popover" }, hAsync("slot", { key: '5a481cc6b143b059a5fc33d377abe5ab79aefb4e' })))));
|
|
17127
17451
|
}
|
|
17128
17452
|
get el() { return getElement(this); }
|
|
17129
17453
|
static get style() { return pdsFilterCss(); }
|
|
@@ -17155,7 +17479,7 @@ class PdsFilters {
|
|
|
17155
17479
|
registerInstance(this, hostRef);
|
|
17156
17480
|
}
|
|
17157
17481
|
render() {
|
|
17158
|
-
return (hAsync(Host, { key: '
|
|
17482
|
+
return (hAsync(Host, { key: '8688235fe7cdea1b4fc540156ff21bb9711b41b6', id: this.componentId }, hAsync("div", { key: 'e51a37977df8c31f99b28d8c7e4bedb0d63e53c6', class: "pds-filters" }, hAsync("slot", { key: '8ce936da4d3f0213408090bc3eeb011920f9aa6c' }))));
|
|
17159
17483
|
}
|
|
17160
17484
|
static get style() { return pdsFiltersCss(); }
|
|
17161
17485
|
static get cmpMeta() { return {
|
|
@@ -17284,6 +17608,28 @@ const isRTL = (hostEl) => {
|
|
|
17284
17608
|
const isSrc = (str) => str.length > 0 && /(\/|\.)/.test(str);
|
|
17285
17609
|
const isStr = (val) => typeof val === 'string'; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
17286
17610
|
const toLower = (val) => val.toLowerCase();
|
|
17611
|
+
/**
|
|
17612
|
+
* Normalizes a color value for use as a CSS custom property value: a bare
|
|
17613
|
+
* design token (--pine-color-foo) is wrapped in var(...), an already-wrapped
|
|
17614
|
+
* var(--token) is passed through unchanged, and anything else (a literal CSS
|
|
17615
|
+
* color, or currentColor) is passed through as-is. Mirrors the equivalent
|
|
17616
|
+
* utility in the `pine` repo's `libs/core/src/utils/utils.ts`
|
|
17617
|
+
* (`normalizeColorValue`) — duplicated here rather than imported because
|
|
17618
|
+
* `@pine-ds/core` already depends on `@pine-ds/icons`, so the reverse
|
|
17619
|
+
* dependency would be circular.
|
|
17620
|
+
*/
|
|
17621
|
+
const normalizeColorValue = (value) => {
|
|
17622
|
+
if (!isStr(value))
|
|
17623
|
+
return undefined;
|
|
17624
|
+
const trimmed = value.trim();
|
|
17625
|
+
if (trimmed === '')
|
|
17626
|
+
return undefined;
|
|
17627
|
+
if (trimmed.startsWith('var('))
|
|
17628
|
+
return trimmed;
|
|
17629
|
+
if (trimmed.startsWith('--'))
|
|
17630
|
+
return `var(${trimmed})`;
|
|
17631
|
+
return trimmed;
|
|
17632
|
+
};
|
|
17287
17633
|
/**
|
|
17288
17634
|
* Elements inside of web components sometimes need to inherit global attributes
|
|
17289
17635
|
* set on the host. For example, the inner input in `pds-input` should inherit
|
|
@@ -17445,9 +17791,10 @@ class PdsIcon {
|
|
|
17445
17791
|
this.setupInitialAriaLabel();
|
|
17446
17792
|
}
|
|
17447
17793
|
setCSSVariables() {
|
|
17794
|
+
var _a;
|
|
17448
17795
|
this.el.style.setProperty(`--dimension-icon-height`, this.iconSize());
|
|
17449
17796
|
this.el.style.setProperty(`--dimension-icon-width`, this.iconSize());
|
|
17450
|
-
this.el.style.setProperty(`--color-icon-fill`,
|
|
17797
|
+
this.el.style.setProperty(`--color-icon-fill`, (_a = normalizeColorValue(this.color)) !== null && _a !== void 0 ? _a : 'currentColor');
|
|
17451
17798
|
}
|
|
17452
17799
|
connectedCallback() {
|
|
17453
17800
|
// Handle re-connection during client-side navigation
|
|
@@ -17492,7 +17839,7 @@ class PdsIcon {
|
|
|
17492
17839
|
const shouldFlip = flipRtl || shouldIconAutoFlip;
|
|
17493
17840
|
// Use inherited aria-label if provided, otherwise fall back to auto-generated one
|
|
17494
17841
|
const finalAriaLabel = inheritedAttributes['aria-label'] || ariaLabel;
|
|
17495
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
17842
|
+
return (hAsync(Host, Object.assign({ key: '3af1c02235a2645bc3bb300831b19779cca78827', "aria-label": finalAriaLabel !== undefined && !this.hasAriaHidden() ? finalAriaLabel : null, alt: "", role: "img", class: Object.assign(Object.assign({}, createColorClasses(this.color)), { 'flip-rtl': shouldFlip, 'icon-rtl': shouldFlip && isRTL(this.el) }) }, inheritedAttributes), (hAsync("div", { class: "icon-inner" }))));
|
|
17496
17843
|
}
|
|
17497
17844
|
/*****
|
|
17498
17845
|
* Private Methods
|
|
@@ -17628,9 +17975,9 @@ class PdsImage {
|
|
|
17628
17975
|
this.loading = 'eager';
|
|
17629
17976
|
}
|
|
17630
17977
|
render() {
|
|
17631
|
-
return (hAsync(Host, { key: '
|
|
17978
|
+
return (hAsync(Host, { key: '1e8bb3882c2a629004ce1441e85d5c5a75a84e98', class: {
|
|
17632
17979
|
'pds-image': true,
|
|
17633
|
-
}, id: this.componentId }, hAsync("img", { key: '
|
|
17980
|
+
}, id: this.componentId }, hAsync("img", { key: 'b50b19d51431d45027c7a918a4ba4c38493741d5', alt: this.alt, height: this.height, loading: this.loading, sizes: this.sizes, src: this.src, srcset: this.srcset, width: this.width })));
|
|
17634
17981
|
}
|
|
17635
17982
|
static get style() { return pdsImageCss(); }
|
|
17636
17983
|
static get cmpMeta() { return {
|
|
@@ -17950,10 +18297,10 @@ class PdsInput {
|
|
|
17950
18297
|
'has-prepend': this.hasPrepend,
|
|
17951
18298
|
'has-append': this.hasAppend,
|
|
17952
18299
|
};
|
|
17953
|
-
return (hAsync(Host, { key: '
|
|
18300
|
+
return (hAsync(Host, { key: '75eb8bc6cda5e947f8677ebefe7995688f03f947', "aria-disabled": this.disabled ? 'true' : null, "aria-readonly": this.readonly ? 'true' : null, "has-prefix": this.hasPrefix ? 'true' : null, "has-suffix": this.hasSuffix ? 'true' : null, "has-prepend": this.hasPrepend ? 'true' : null, "has-append": this.hasAppend ? 'true' : null, "has-action": this.hasAction && !this.hideLabel ? 'true' : null, "full-width": this.fullWidth ? 'true' : null }, hAsync("div", { key: '93d7f90b9a64daccea1533abc08a8cb18825b828', class: "pds-input" }, label && (hAsync("div", { key: '948109b3bfa1a1b8171572da9160425e3e35a7a6', class: {
|
|
17954
18301
|
'pds-input__label-wrapper': true,
|
|
17955
18302
|
'visually-hidden': this.hideLabel,
|
|
17956
|
-
} }, hAsync("label", { key: '
|
|
18303
|
+
} }, hAsync("label", { key: 'bb0e6c6febb97ad4aa3942ac5e67ac42dc1bde0a', htmlFor: componentId, class: "pds-input__label" }, hAsync("span", { key: 'c6a122f829aa3b92ccb715c3f3975f6baadb3028' }, label, this.required && hAsync("span", { key: 'dce7d1a9c010a545992734bd238e9f6a4ca7b4ce', class: "pds-input__required-indicator" }, " *"))), !this.hideLabel && this.renderAction())), hAsync("div", { key: '1b92ab5d649a4a9cf8112ea9b8a8a1095714f6d0', class: inputWrapperClasses }, this.renderPrepend(), this.renderPrefix(), hAsync("input", Object.assign({ key: 'bc3c4b907312149d375bb78f9912e4501da59348', ref: (input) => (this.nativeInput = input), class: "pds-input__field", "aria-describedby": assignDescription(componentId, invalid, helperMessage, errorMessage), "aria-invalid": invalid ? "true" : undefined, autocomplete: this.autocomplete, disabled: disabled, id: componentId, max: this.max, maxlength: this.maxlength, min: this.min, minlength: this.minlength, name: this.name, pattern: this.pattern, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, step: this.step, type: this.type, value: value, onInput: this.onInputEvent, onChange: this.onChangeEvent, onBlur: this.onBlurEvent, onFocus: this.onFocusEvent, onKeyDown: this.onKeyDownEvent, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.renderSuffix(), this.renderAppend()), helperMessage && (hAsync("p", { key: 'f7bcbafc17a20310d602fce14a0adad522acbcb1', class: "pds-input__helper-message", id: messageId(componentId, 'helper') }, helperMessage)), errorMessage && (hAsync("p", { key: 'bbbd6dc3203b89e5759587147de74d2ce3ce6177', class: "pds-input__error-message", id: messageId(componentId, 'error') }, hAsync("pds-icon", { key: '68a6a92c82c1756ad99f431e0cb56756e3cdf75c', "aria-hidden": "true", icon: danger, size: "small" }), errorMessage)))));
|
|
17957
18304
|
}
|
|
17958
18305
|
static get formAssociated() { return true; }
|
|
17959
18306
|
get el() { return getElement(this); }
|
|
@@ -18065,8 +18412,8 @@ class PdsLink {
|
|
|
18065
18412
|
const targetValue = this.target || (this.external ? '_blank' : undefined);
|
|
18066
18413
|
const showExternalIcon = this.external;
|
|
18067
18414
|
const relValue = targetValue === '_blank' ? 'noopener noreferrer' : undefined;
|
|
18068
|
-
return (hAsync("a", { key: '
|
|
18069
|
-
hAsync("pds-icon", { key: '
|
|
18415
|
+
return (hAsync("a", { key: '3b6f9d19d7f50d0606cf5f3c3a97b85ee4aa63b0', class: this.classNames(), download: this.download, href: this.href, id: this.componentId, part: "link", "aria-current": this.active ? 'page' : undefined, target: targetValue, rel: relValue, style: this.setLinkStyles(), "data-turbo": this.turbo || undefined, "data-turbo-frame": this.turboFrame || undefined, "data-turbo-action": this.turboAction || undefined, "data-turbo-method": this.turboMethod || undefined, "data-turbo-confirm": this.turboConfirm || undefined, "data-turbo-stream": this.turboStream || undefined, "data-turbo-prefetch": this.turboPrefetch || undefined, "data-turbo-preload": this.turboPreload || undefined }, hAsync("slot", { key: 'a265f1c4c9b6ff089b23906d8f650bfd65b25013' }, this.href), showExternalIcon &&
|
|
18416
|
+
hAsync("pds-icon", { key: '9553a8256b6811296ea4b762e32662c1a2f4aecf', icon: launch, size: this.fontSize })));
|
|
18070
18417
|
}
|
|
18071
18418
|
static get style() { return pdsLinkCss(); }
|
|
18072
18419
|
static get cmpMeta() { return {
|
|
@@ -18165,7 +18512,7 @@ class PdsLoader {
|
|
|
18165
18512
|
'aria-live': 'polite',
|
|
18166
18513
|
};
|
|
18167
18514
|
this.hostKeeper.record(hostClass, {}, hostAttributes);
|
|
18168
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
18515
|
+
return (hAsync(Host, Object.assign({ key: 'c42c1aeec5c8db9a1065f35492734a8cb265f3ce', class: hostClass }, hostAttributes), this.variant === 'spinner' && (hAsync("div", { key: 'dc1b7943709d03e02467cca0817fb6a7ad5ed10a', class: "pds-loader--spinner" }, hAsync("svg", { key: 'db38e607541ac1eb91be87b2cd0240341c8fb51d', style: this.getSvgStyle(), viewBox: "0 0 200 200", fill: "none", part: "loader-svg" }, hAsync("defs", { key: 'd734ef70b0039758a25881c22bb3e6453ac40012' }, hAsync("linearGradient", { key: '697627f516c5f7b4cd5351dd39de231c0cb9e429', id: "spinner-secondHalf" }, hAsync("stop", { key: '03082c0ec354685eebf7d0132202d54b083d26df', offset: "0%", "stop-opacity": "0", "stop-color": "currentColor" }), hAsync("stop", { key: '181b661b36aeb44943e20dec513f7265a9487004', offset: "100%", "stop-opacity": "0.5", "stop-color": "currentColor" })), hAsync("linearGradient", { key: '67f6c51aefe99bcbfdb741290337364501fc4fcb', id: "spinner-firstHalf" }, hAsync("stop", { key: 'cb6adf27ecb06b42ba572a702153de960491b0b6', offset: "0%", "stop-opacity": "1", "stop-color": "currentColor" }), hAsync("stop", { key: 'aeebabfa1ac00391937388feefa120bd0bb4d26c', offset: "100%", "stop-opacity": "0.5", "stop-color": "currentColor" }))), hAsync("g", { key: 'f06ca75e4df171b6db426fce9bc34076cfee5bca', class: "pds-loader__spinner-path" }, hAsync("path", { key: 'a278b37de8f77a1000efecb62b89e3f751712a98', stroke: "url(#spinner-secondHalf)", d: "M 4 100 A 96 96 0 0 1 196 100" }), hAsync("path", { key: 'a035add4d01b60bcebf7625c8730d6a41ddf40ff', stroke: "url(#spinner-firstHalf)", d: "M 196 100 A 96 96 0 0 1 4 100" }), hAsync("path", { key: '1189c8299d33a2a6bb6a8345b60f22bf4ad9beee', stroke: "currentColor", "stroke-linecap": "round", d: "M 4 100 A 96 96 0 0 1 4 98" }))))), this.variant === 'typing' && (hAsync("div", { key: '39826fae20e8826d9c73cf57ba938583d610e1ea', class: "pds-loader--typing" }, hAsync("span", { key: '8f2b837c79548a1080710a7cc30c3be3a051e1dd' }), hAsync("span", { key: '8efb1193ef51f110950861767eccc3896e90b81e' }), hAsync("span", { key: '366f2d205adbb043691c253cff17d2d29d56a2cc' }))), hAsync("div", { key: 'aeaa4aa12863b34088e84fd2791c2ce32dc05248', class: `pds-loader__label ${this.showLabel ? '' : 'pds-loader--hidden'}` }, hAsync("slot", { key: '7a8ec45aed1cd6f9e60f4db2ec5376439fa41c81', name: "label" }, "Loading..."))));
|
|
18169
18516
|
}
|
|
18170
18517
|
get el() { return getElement(this); }
|
|
18171
18518
|
static get watchers() { return {
|
|
@@ -18270,8 +18617,36 @@ function containsComposed(ancestor, node) {
|
|
|
18270
18617
|
}
|
|
18271
18618
|
return false;
|
|
18272
18619
|
}
|
|
18620
|
+
/**
|
|
18621
|
+
* Every open modal, with the order it opened in, which ranks top-layer modals and the modals
|
|
18622
|
+
* inside them. Kept here rather than queried from the document, which can't see a modal inside
|
|
18623
|
+
* another component's shadow root.
|
|
18624
|
+
*/
|
|
18625
|
+
const openModals = new Map();
|
|
18626
|
+
let openSequence = 0;
|
|
18627
|
+
/** Whether an open auto popover's panel sits in `root`, including inside shadow roots under it. */
|
|
18628
|
+
function hasOpenPopover(root) {
|
|
18629
|
+
if (root.querySelector('[data-pds-popover-open]'))
|
|
18630
|
+
return true;
|
|
18631
|
+
return Array.from(root.querySelectorAll('*')).some(el => !!el.shadowRoot && hasOpenPopover(el.shadowRoot));
|
|
18632
|
+
}
|
|
18633
|
+
/**
|
|
18634
|
+
* Whether `a` comes before `b` in the page. `compareDocumentPosition` is arbitrary across a shadow
|
|
18635
|
+
* boundary, so each side climbs to its host until both are in the same tree.
|
|
18636
|
+
*/
|
|
18637
|
+
function precedesComposed(a, b) {
|
|
18638
|
+
// A document has no host, which ends each climb.
|
|
18639
|
+
for (let x = a; x; x = x.getRootNode().host) {
|
|
18640
|
+
for (let y = b; y; y = y.getRootNode().host) {
|
|
18641
|
+
if (x.getRootNode() === y.getRootNode()) {
|
|
18642
|
+
return !!(x.compareDocumentPosition(y) & Node.DOCUMENT_POSITION_FOLLOWING);
|
|
18643
|
+
}
|
|
18644
|
+
}
|
|
18645
|
+
}
|
|
18646
|
+
return false;
|
|
18647
|
+
}
|
|
18273
18648
|
/** The focused element, followed down through shadow roots to the control that has focus. */
|
|
18274
|
-
function deepActiveElement() {
|
|
18649
|
+
function deepActiveElement$1() {
|
|
18275
18650
|
var _a;
|
|
18276
18651
|
let active = document.activeElement;
|
|
18277
18652
|
while ((_a = active === null || active === void 0 ? void 0 : active.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement)
|
|
@@ -18288,7 +18663,8 @@ class PdsModal {
|
|
|
18288
18663
|
this.pdsModalClose = createEvent(this, "pdsModalClose");
|
|
18289
18664
|
this.focusableElements = [];
|
|
18290
18665
|
/**
|
|
18291
|
-
* Whether the modal can be dismissed by clicking the backdrop
|
|
18666
|
+
* Whether the modal can be dismissed by clicking the backdrop, pressing Escape, or the browser's
|
|
18667
|
+
* own close request (such as a back gesture)
|
|
18292
18668
|
* @default true
|
|
18293
18669
|
*/
|
|
18294
18670
|
this.backdropDismiss = true;
|
|
@@ -18336,19 +18712,33 @@ class PdsModal {
|
|
|
18336
18712
|
* Stores the list of focusable elements in the modal
|
|
18337
18713
|
*/
|
|
18338
18714
|
this.focusableElementsArray = [];
|
|
18715
|
+
// The browser's own close request (an Escape nothing prevented, a back gesture) would close the
|
|
18716
|
+
// dialog without updating `open`, so close it through hideModal() instead, or not at all.
|
|
18717
|
+
this.handleCancel = (e) => {
|
|
18718
|
+
e.preventDefault();
|
|
18719
|
+
if (!this.open)
|
|
18720
|
+
return;
|
|
18721
|
+
// The request reaches the top-layer dialog even when a disableTopLayer modal inside it is on
|
|
18722
|
+
// top; that one closes first, as it would on Escape.
|
|
18723
|
+
const top = this.innermostOpenModal();
|
|
18724
|
+
const target = (top && containsComposed(this.el, top) ? top : this.el);
|
|
18725
|
+
if (target.backdropDismiss)
|
|
18726
|
+
target.hideModal();
|
|
18727
|
+
};
|
|
18339
18728
|
this.handleBackdropClick = (e) => {
|
|
18340
18729
|
if (!this.backdropDismiss || !this.open)
|
|
18341
18730
|
return;
|
|
18342
|
-
|
|
18731
|
+
// This modal's own backdrop; a nested modal's backdrop handles its own clicks.
|
|
18732
|
+
if (e.target === this.modalRef) {
|
|
18343
18733
|
e.stopPropagation();
|
|
18344
18734
|
// Only close if this is the innermost modal
|
|
18345
|
-
if (this.
|
|
18735
|
+
if (this.innermostOpenModal() === this.el) {
|
|
18346
18736
|
this.hideModal();
|
|
18347
18737
|
}
|
|
18348
18738
|
}
|
|
18349
18739
|
};
|
|
18350
18740
|
this.handleKeyDown = (e) => {
|
|
18351
|
-
var _a, _b, _c;
|
|
18741
|
+
var _a, _b, _c, _d;
|
|
18352
18742
|
// If the modal is not open, don't handle any keyboard events
|
|
18353
18743
|
if (!this.open)
|
|
18354
18744
|
return;
|
|
@@ -18371,24 +18761,39 @@ class PdsModal {
|
|
|
18371
18761
|
if (!('__pdsActiveElementAtEscape' in eventSnapshot)) {
|
|
18372
18762
|
const activeAtDispatch = document.activeElement;
|
|
18373
18763
|
eventSnapshot.__pdsActiveElementAtEscape = activeAtDispatch;
|
|
18764
|
+
// Followed into shadow roots: for a modal inside one, document.activeElement is only the host.
|
|
18765
|
+
eventSnapshot.__pdsDeepActiveElementAtEscape = deepActiveElement$1();
|
|
18374
18766
|
const topLayerDialog = (_a = activeAtDispatch === null || activeAtDispatch === void 0 ? void 0 : activeAtDispatch.closest('dialog')) !== null && _a !== void 0 ? _a : null;
|
|
18375
18767
|
eventSnapshot.__pdsTopLayerDialogAtEscape = topLayerDialog;
|
|
18376
18768
|
eventSnapshot.__pdsTopLayerDialogWasModalAtEscape = !!(topLayerDialog && topLayerDialog.matches(':modal'));
|
|
18769
|
+
// A control that closed on this Escape (a combobox on its own element, a dropdown menu or
|
|
18770
|
+
// multiselect in document's capture phase) has prevented it before this bubble listener.
|
|
18771
|
+
// Read before any modal prevents it below.
|
|
18772
|
+
eventSnapshot.__pdsEscapeHandledInside = e.defaultPrevented;
|
|
18773
|
+
// Which modal is innermost is read once too: the inner one closing first would make its
|
|
18774
|
+
// outer modal the innermost by the time that modal's listener runs.
|
|
18775
|
+
eventSnapshot.__pdsInnermostModalAtEscape = this.innermostOpenModal();
|
|
18377
18776
|
}
|
|
18777
|
+
if (eventSnapshot.__pdsEscapeHandledInside)
|
|
18778
|
+
return;
|
|
18378
18779
|
// Leave Escape to a genuinely stacked-above overlay (disableTopLayer's
|
|
18379
18780
|
// reason for existing) — not just to anything outside this modal.
|
|
18380
18781
|
const active = eventSnapshot.__pdsActiveElementAtEscape;
|
|
18381
18782
|
if (this.disableTopLayer &&
|
|
18382
18783
|
active &&
|
|
18383
18784
|
active !== document.body &&
|
|
18384
|
-
!this.el.
|
|
18385
|
-
this.isStackedAboveOverlay(active, (
|
|
18785
|
+
!containsComposed(this.el, (_b = eventSnapshot.__pdsDeepActiveElementAtEscape) !== null && _b !== void 0 ? _b : active) &&
|
|
18786
|
+
this.isStackedAboveOverlay(active, (_c = eventSnapshot.__pdsTopLayerDialogAtEscape) !== null && _c !== void 0 ? _c : null, (_d = eventSnapshot.__pdsTopLayerDialogWasModalAtEscape) !== null && _d !== void 0 ? _d : false)) {
|
|
18386
18787
|
return;
|
|
18387
18788
|
}
|
|
18789
|
+
// An open popover inside takes Escape from its own document listener, which runs after this
|
|
18790
|
+
// one, so leave the key for it. Its preventDefault() keeps the native dialog open.
|
|
18791
|
+
if (this.modalRef && hasOpenPopover(this.modalRef))
|
|
18792
|
+
return;
|
|
18388
18793
|
// Always prevent native dialog close behavior
|
|
18389
18794
|
e.preventDefault();
|
|
18390
18795
|
// Only close if backdropDismiss is enabled and this is the innermost modal
|
|
18391
|
-
if (this.backdropDismiss && this.
|
|
18796
|
+
if (this.backdropDismiss && eventSnapshot.__pdsInnermostModalAtEscape === this.el) {
|
|
18392
18797
|
this.hideModal();
|
|
18393
18798
|
}
|
|
18394
18799
|
return;
|
|
@@ -18408,7 +18813,7 @@ class PdsModal {
|
|
|
18408
18813
|
// Every open modal hears this keydown. When focus is in a modal dialog opened above this one,
|
|
18409
18814
|
// that dialog traps Tab: this modal's list also holds its controls, so it would wrap first. A
|
|
18410
18815
|
// non-modal dialog inside (a disableTopLayer modal) doesn't trap, so this one still does.
|
|
18411
|
-
const activeElement = deepActiveElement();
|
|
18816
|
+
const activeElement = deepActiveElement$1();
|
|
18412
18817
|
if (!activeElement || this.modalDialogAbove(activeElement))
|
|
18413
18818
|
return;
|
|
18414
18819
|
// Content can change while the modal is open (rows fetched in, sections shown), so the
|
|
@@ -18448,8 +18853,6 @@ class PdsModal {
|
|
|
18448
18853
|
}
|
|
18449
18854
|
componentDidLoad() {
|
|
18450
18855
|
this.modalRef = this.el.querySelector('.pds-modal__backdrop');
|
|
18451
|
-
// Add keyboard event listener
|
|
18452
|
-
document.addEventListener('keydown', this.handleKeyDown);
|
|
18453
18856
|
// @Watch('open') only fires on a later change, not the prop's initial
|
|
18454
18857
|
// value — a modal mounted with `open` already true (static markup, or a
|
|
18455
18858
|
// framework passing it on first render) would otherwise never call
|
|
@@ -18465,9 +18868,18 @@ class PdsModal {
|
|
|
18465
18868
|
componentDidRender() {
|
|
18466
18869
|
unwrapReconnectedContent(this.el.querySelector('.pds-modal'), 'dialog.pds-modal__backdrop', '.pds-modal');
|
|
18467
18870
|
}
|
|
18871
|
+
// Here rather than in componentDidLoad, which runs once: a modal taken out of the page and put
|
|
18872
|
+
// back (a morph or a framework moving it) gets its keyboard handling, and its place among the
|
|
18873
|
+
// open modals, back too. Adding the same listener twice is a no-op.
|
|
18874
|
+
connectedCallback() {
|
|
18875
|
+
document.addEventListener('keydown', this.handleKeyDown);
|
|
18876
|
+
if (this.open && !openModals.has(this.el))
|
|
18877
|
+
openModals.set(this.el, ++openSequence);
|
|
18878
|
+
}
|
|
18468
18879
|
disconnectedCallback() {
|
|
18469
18880
|
// Clean up event listener
|
|
18470
18881
|
document.removeEventListener('keydown', this.handleKeyDown);
|
|
18882
|
+
openModals.delete(this.el);
|
|
18471
18883
|
}
|
|
18472
18884
|
handleOpenChange(newValue) {
|
|
18473
18885
|
if (newValue) {
|
|
@@ -18532,6 +18944,9 @@ class PdsModal {
|
|
|
18532
18944
|
this.modalRef.showModal();
|
|
18533
18945
|
}
|
|
18534
18946
|
this.open = true;
|
|
18947
|
+
// Showing an open modal again doesn't move it above one opened after it.
|
|
18948
|
+
if (!openModals.has(this.el))
|
|
18949
|
+
openModals.set(this.el, ++openSequence);
|
|
18535
18950
|
// Update focusable elements and set initial focus
|
|
18536
18951
|
// Using a longer timeout to ensure all components are fully rendered
|
|
18537
18952
|
setTimeout(() => {
|
|
@@ -18594,6 +19009,7 @@ class PdsModal {
|
|
|
18594
19009
|
const focusAlreadyMovedElsewhere = activeElement !== null && activeElement !== document.body && !this.modalRef.contains(activeElement);
|
|
18595
19010
|
this.modalRef.close();
|
|
18596
19011
|
this.open = false;
|
|
19012
|
+
openModals.delete(this.el);
|
|
18597
19013
|
// Restore focus to the element that was focused before the modal was opened
|
|
18598
19014
|
if (!focusAlreadyMovedElsewhere &&
|
|
18599
19015
|
this.previousActiveElement &&
|
|
@@ -18612,7 +19028,9 @@ class PdsModal {
|
|
|
18612
19028
|
*/
|
|
18613
19029
|
getBackdropZIndex(modal) {
|
|
18614
19030
|
const backdrop = modal.querySelector('.pds-modal__backdrop');
|
|
18615
|
-
|
|
19031
|
+
// `auto` (no z-index token loaded) parses to NaN, which no comparison can rank.
|
|
19032
|
+
const zIndex = backdrop ? parseInt(getComputedStyle(backdrop).zIndex, 10) : -1;
|
|
19033
|
+
return Number.isNaN(zIndex) ? 0 : zIndex;
|
|
18616
19034
|
}
|
|
18617
19035
|
/**
|
|
18618
19036
|
* Whether `active` sits inside a surface actually stacked above this modal.
|
|
@@ -18639,7 +19057,8 @@ class PdsModal {
|
|
|
18639
19057
|
* lose that evidence depending on listener order.
|
|
18640
19058
|
*/
|
|
18641
19059
|
isStackedAboveOverlay(active, topLayerDialog, topLayerDialogWasModal) {
|
|
18642
|
-
|
|
19060
|
+
// A top-layer dialog this modal sits inside is underneath it, not an overlay above.
|
|
19061
|
+
if (topLayerDialog && topLayerDialog !== this.modalRef && topLayerDialogWasModal && !containsComposed(topLayerDialog, this.el)) {
|
|
18643
19062
|
return true;
|
|
18644
19063
|
}
|
|
18645
19064
|
const ownZIndex = this.getBackdropZIndex(this.el);
|
|
@@ -18655,24 +19074,37 @@ class PdsModal {
|
|
|
18655
19074
|
return false;
|
|
18656
19075
|
}
|
|
18657
19076
|
/**
|
|
18658
|
-
*
|
|
19077
|
+
* The open modal that takes Escape or a backdrop click, among those with no other open modal
|
|
19078
|
+
* inside them (a nested modal's backdrop can share its outer modal's z-index). A top-layer dialog
|
|
19079
|
+
* (or a modal inside one) paints above anything outside it, and within the top layer the last
|
|
19080
|
+
* opened is on top. Modals in the same layer (the page, or one top-layer dialog) then rank by
|
|
19081
|
+
* the highest backdrop, then the one later in the page.
|
|
18659
19082
|
*/
|
|
18660
|
-
|
|
18661
|
-
|
|
18662
|
-
const
|
|
18663
|
-
|
|
18664
|
-
|
|
18665
|
-
//
|
|
18666
|
-
const
|
|
18667
|
-
|
|
18668
|
-
|
|
18669
|
-
|
|
18670
|
-
|
|
18671
|
-
|
|
18672
|
-
|
|
18673
|
-
|
|
18674
|
-
|
|
18675
|
-
|
|
19083
|
+
innermostOpenModal() {
|
|
19084
|
+
const open = Array.from(openModals.keys()).filter(modal => modal.isConnected);
|
|
19085
|
+
const innermost = open.filter(modal => !open.some(other => other !== modal && containsComposed(modal, other)));
|
|
19086
|
+
const byDocumentOrder = [...innermost].sort((a, b) => (precedesComposed(a, b) ? -1 : 1));
|
|
19087
|
+
// A modal inside a top-layer dialog paints in that dialog's place in the top layer, even when it
|
|
19088
|
+
// isn't in the top layer itself (disableTopLayer), so that dialog's open order ranks it first.
|
|
19089
|
+
const rank = (modal) => {
|
|
19090
|
+
var _a;
|
|
19091
|
+
const backdrop = modal.querySelector('.pds-modal__backdrop');
|
|
19092
|
+
const topLayerDialog = backdrop ? closest$1('dialog:modal', backdrop) : null;
|
|
19093
|
+
const topLayerModal = topLayerDialog === null || topLayerDialog === void 0 ? void 0 : topLayerDialog.closest('pds-modal');
|
|
19094
|
+
const layer = topLayerDialog ? ((_a = (topLayerModal && openModals.get(topLayerModal))) !== null && _a !== void 0 ? _a : 0) : 0;
|
|
19095
|
+
return [topLayerDialog ? 1 : 0, layer, this.getBackdropZIndex(modal), byDocumentOrder.indexOf(modal)];
|
|
19096
|
+
};
|
|
19097
|
+
let top = null;
|
|
19098
|
+
let topRank = [-1, -1, -1, -1];
|
|
19099
|
+
for (const modal of innermost) {
|
|
19100
|
+
const modalRank = rank(modal);
|
|
19101
|
+
const above = modalRank.findIndex((value, i) => value !== topRank[i]);
|
|
19102
|
+
if (above >= 0 && modalRank[above] > topRank[above]) {
|
|
19103
|
+
top = modal;
|
|
19104
|
+
topRank = modalRank;
|
|
19105
|
+
}
|
|
19106
|
+
}
|
|
19107
|
+
return top;
|
|
18676
19108
|
}
|
|
18677
19109
|
/** Whether a modal dialog other than this one sits between the focused element and this modal. */
|
|
18678
19110
|
modalDialogAbove(active) {
|
|
@@ -18712,14 +19144,14 @@ class PdsModal {
|
|
|
18712
19144
|
}
|
|
18713
19145
|
render() {
|
|
18714
19146
|
const [sizeClass = 'md', customSize] = this.resolveSize();
|
|
18715
|
-
return (hAsync("dialog", { key: '
|
|
19147
|
+
return (hAsync("dialog", { key: '0633d4e8a7cb81f2f9280e754564960a00a4d60b', class: {
|
|
18716
19148
|
'pds-modal__backdrop': true,
|
|
18717
19149
|
'open': this.open
|
|
18718
|
-
}, "aria-modal": this.disableTopLayer ? 'false' : 'true', "aria-labelledby": `${this.componentId}-heading`, onClick: this.handleBackdropClick }, hAsync("div", { key: '
|
|
19150
|
+
}, "aria-modal": this.disableTopLayer ? 'false' : 'true', "aria-labelledby": `${this.componentId}-heading`, onClick: this.handleBackdropClick, onCancel: this.handleCancel }, hAsync("div", { key: '466f8a3476cf066817554f47ec7d3a0e3ab10b89', class: {
|
|
18719
19151
|
'pds-modal': true,
|
|
18720
19152
|
[`pds-modal--${sizeClass}`]: true,
|
|
18721
19153
|
'pds-modal--scrollable': this.scrollable
|
|
18722
|
-
}, style: customSize !== undefined ? { '--pds-modal-max-width': customSize } : undefined, part: "modal" }, hAsync("slot", { key: '
|
|
19154
|
+
}, style: customSize !== undefined ? { '--pds-modal-max-width': customSize } : undefined, part: "modal" }, hAsync("slot", { key: '01ca45c96540416216a1082bad52b137720f0f4d' }))));
|
|
18723
19155
|
}
|
|
18724
19156
|
get el() { return getElement(this); }
|
|
18725
19157
|
static get watchers() { return {
|
|
@@ -18936,10 +19368,10 @@ class PdsModalContent {
|
|
|
18936
19368
|
render() {
|
|
18937
19369
|
// Only apply max-height style if it's not 'none'
|
|
18938
19370
|
const styleObj = this.contentMaxHeight !== 'none' ? { maxHeight: this.contentMaxHeight } : {};
|
|
18939
|
-
return (hAsync(Host, { key: '
|
|
19371
|
+
return (hAsync(Host, { key: 'd41d5632eb6a2dafe921546af60f835d3545cc4f' }, hAsync("div", { key: '741ac9f28149039ecf5051142a939ab62ef26a87', class: {
|
|
18940
19372
|
'pds-modal-content': true,
|
|
18941
19373
|
[`pds-modal-content--border-${this.border}`]: true
|
|
18942
|
-
}, style: styleObj, tabindex: "-1" }, hAsync("slot", { key: '
|
|
19374
|
+
}, style: styleObj, tabindex: "-1" }, hAsync("slot", { key: '090a52e9425d4df61c2d8216cc19f0925babdffe' }))));
|
|
18943
19375
|
}
|
|
18944
19376
|
get el() { return getElement(this); }
|
|
18945
19377
|
static get style() { return pdsModalContentCss(); }
|
|
@@ -18970,7 +19402,7 @@ class PdsModalFooter {
|
|
|
18970
19402
|
unwrapReconnectedContent(this.el.querySelector('.pds-modal__footer'), '.pds-modal__footer');
|
|
18971
19403
|
}
|
|
18972
19404
|
render() {
|
|
18973
|
-
return (hAsync("footer", { key: '
|
|
19405
|
+
return (hAsync("footer", { key: '030153b84f1ea1cb133c9ccec3ad86583995974f', class: "pds-modal__footer" }, hAsync("slot", { key: '3a479e7047f3e845a65c37d60539648c8ff78602' })));
|
|
18974
19406
|
}
|
|
18975
19407
|
get el() { return getElement(this); }
|
|
18976
19408
|
static get style() { return pdsModalFooterCss(); }
|
|
@@ -18998,7 +19430,7 @@ class PdsModalHeader {
|
|
|
18998
19430
|
unwrapReconnectedContent(this.el.querySelector('.pds-modal__header'), '.pds-modal__header');
|
|
18999
19431
|
}
|
|
19000
19432
|
render() {
|
|
19001
|
-
return (hAsync("header", { key: '
|
|
19433
|
+
return (hAsync("header", { key: 'ee3ac5fb9b00a943aa86c3434ea07291b74d776c', class: "pds-modal__header" }, hAsync("slot", { key: '0b0f7ff257635723099c536648a826be8dcc05e7' })));
|
|
19002
19434
|
}
|
|
19003
19435
|
get el() { return getElement(this); }
|
|
19004
19436
|
static get style() { return pdsModalHeaderCss(); }
|
|
@@ -19552,11 +19984,12 @@ class PdsMultiselect {
|
|
|
19552
19984
|
}
|
|
19553
19985
|
/**
|
|
19554
19986
|
* Handle global keyboard events for accessibility.
|
|
19555
|
-
* Closes dropdown on Escape key press regardless of focus location.
|
|
19987
|
+
* Closes dropdown on Escape key press regardless of focus location. Taken in document's capture
|
|
19988
|
+
* phase, before a modal around the multiselect hears it on document and closes too.
|
|
19556
19989
|
*/
|
|
19557
19990
|
handleWindowKeyDown(event) {
|
|
19558
19991
|
var _a;
|
|
19559
|
-
if (!this.isOpen)
|
|
19992
|
+
if (!this.isOpen || event.defaultPrevented)
|
|
19560
19993
|
return;
|
|
19561
19994
|
if (event.key === 'Escape') {
|
|
19562
19995
|
event.preventDefault();
|
|
@@ -20246,10 +20679,10 @@ class PdsMultiselect {
|
|
|
20246
20679
|
}
|
|
20247
20680
|
render() {
|
|
20248
20681
|
const hasSelections = this.selectedItems.length > 0;
|
|
20249
|
-
return (hAsync(Host, { key: '
|
|
20682
|
+
return (hAsync(Host, { key: 'fcc35a82c16d5cf35a49ce997f19618104f9cc45', "aria-disabled": this.disabled ? 'true' : null }, hAsync("div", { key: '72d1fdf759d9173f54bac80ec50aff651fd2b357', class: "pds-multiselect", onFocusout: this.handleContainerFocusOut }, this.label && (hAsync("label", { key: 'e28f02c2beb23dc2c0deefadbd0645b20d938d91', id: `${this.componentId}-label`, htmlFor: this.componentId, class: {
|
|
20250
20683
|
'pds-multiselect__label': true,
|
|
20251
20684
|
'visually-hidden': this.hideLabel,
|
|
20252
|
-
} }, this.label)), hAsync("div", { key: '
|
|
20685
|
+
} }, this.label)), hAsync("div", { key: '06539bf2c4b8da2889505a9f042d5cd6721b1853', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), style: { width: this.triggerWidth } }, this.slottedTriggerEl ? (hAsync("slot", { name: "trigger" })) : this.selectedDisplay === 'pill' && this.pillPosition === 'inline' ? (hAsync("div", { ref: el => (this.pillInlineTriggerEl = el || undefined), part: "trigger", class: {
|
|
20253
20686
|
'pds-multiselect__trigger': true,
|
|
20254
20687
|
'pds-multiselect__trigger--open': this.isOpen,
|
|
20255
20688
|
'pds-multiselect__trigger--disabled': this.disabled,
|
|
@@ -20265,7 +20698,7 @@ class PdsMultiselect {
|
|
|
20265
20698
|
}, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, hAsync("span", { class: {
|
|
20266
20699
|
'pds-multiselect__trigger-text': true,
|
|
20267
20700
|
'pds-multiselect__trigger-text--placeholder': !hasSelections || (this.selectedDisplay === 'pill' && this.pillPosition === 'below'),
|
|
20268
|
-
} }, this.getTriggerText()), hAsync("pds-icon", { "aria-hidden": "true", class: "pds-multiselect__icon", icon: enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), hAsync("span", { key: '
|
|
20701
|
+
} }, this.getTriggerText()), hAsync("pds-icon", { "aria-hidden": "true", class: "pds-multiselect__icon", icon: enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), hAsync("span", { key: '3364fc00bc744fcd599436a9cb6dc563564d89d9', class: "visually-hidden", "aria-live": "polite", "aria-atomic": "true" }, this.removalAnnouncement), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (hAsync("p", { key: 'bf712c65b9acb66e2998a43686fed408fc1ff48a', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (hAsync("p", { key: 'b485db6c2c3ae312cce2b90db60e850ad6dfdcf5', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, hAsync("pds-icon", { key: '20daf861cf9584f33f5a9574e9581acc487e7dfe', icon: danger, size: "small" }), this.errorMessage)), hAsync("div", { key: '018d333254771695a8c191f1cea40af6e78427a2', style: { display: 'none' } }, hAsync("slot", { key: '2ef4a01fbe5d294a9ead5cc1183c28341834539b' })))));
|
|
20269
20702
|
}
|
|
20270
20703
|
static get formAssociated() { return true; }
|
|
20271
20704
|
get el() { return getElement(this); }
|
|
@@ -20355,14 +20788,66 @@ class PdsMultiselect {
|
|
|
20355
20788
|
"clear": [64],
|
|
20356
20789
|
"refreshOptions": [64]
|
|
20357
20790
|
},
|
|
20358
|
-
"$listeners$": [[
|
|
20791
|
+
"$listeners$": [[6, "keydown", "handleWindowKeyDown"]],
|
|
20359
20792
|
"$lazyBundleId$": "-",
|
|
20360
20793
|
"$attrsToReflect$": []
|
|
20361
20794
|
}; }
|
|
20362
20795
|
}
|
|
20363
20796
|
|
|
20797
|
+
/**
|
|
20798
|
+
* Escapes a string so it's safe to interpolate into a CSS identifier (an id selector like `#${id}`)
|
|
20799
|
+
* or into CSS text (a stylesheet rule referencing that id). Equivalent to the native `CSS.escape`,
|
|
20800
|
+
* reimplemented because Stencil's unit-test DOM (`newSpecPage`'s mock-doc) doesn't provide it.
|
|
20801
|
+
* @param value - The string to escape, e.g. a consumer-supplied id
|
|
20802
|
+
*/
|
|
20803
|
+
const cssEscape = (value) => {
|
|
20804
|
+
const string = String(value);
|
|
20805
|
+
const length = string.length;
|
|
20806
|
+
const firstCodeUnit = string.charCodeAt(0);
|
|
20807
|
+
let result = '';
|
|
20808
|
+
for (let index = 0; index < length; index++) {
|
|
20809
|
+
const codeUnit = string.charCodeAt(index);
|
|
20810
|
+
if (codeUnit === 0x0000) {
|
|
20811
|
+
result += '�';
|
|
20812
|
+
continue;
|
|
20813
|
+
}
|
|
20814
|
+
if ((codeUnit >= 0x0001 && codeUnit <= 0x001f) ||
|
|
20815
|
+
codeUnit === 0x007f ||
|
|
20816
|
+
(index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
|
|
20817
|
+
(index === 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 && firstCodeUnit === 0x002d)) {
|
|
20818
|
+
result += `\\${codeUnit.toString(16)} `;
|
|
20819
|
+
continue;
|
|
20820
|
+
}
|
|
20821
|
+
if (index === 0 && length === 1 && codeUnit === 0x002d) {
|
|
20822
|
+
result += `\\${string.charAt(index)}`;
|
|
20823
|
+
continue;
|
|
20824
|
+
}
|
|
20825
|
+
if (codeUnit >= 0x0080 ||
|
|
20826
|
+
codeUnit === 0x002d ||
|
|
20827
|
+
codeUnit === 0x005f ||
|
|
20828
|
+
(codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
|
|
20829
|
+
(codeUnit >= 0x0041 && codeUnit <= 0x005a) ||
|
|
20830
|
+
(codeUnit >= 0x0061 && codeUnit <= 0x007a)) {
|
|
20831
|
+
result += string.charAt(index);
|
|
20832
|
+
continue;
|
|
20833
|
+
}
|
|
20834
|
+
result += `\\${string.charAt(index)}`;
|
|
20835
|
+
}
|
|
20836
|
+
return result;
|
|
20837
|
+
};
|
|
20838
|
+
|
|
20364
20839
|
const pdsPopoverCss = () => `:host{--sizing-max-width-default:352px;display:inline-block}:host .pds-popover__trigger-wrapper{display:inline-block}:host .pds-popover__content-slot-wrapper{display:none}`;
|
|
20365
20840
|
|
|
20841
|
+
/** Open auto popovers, in the order they opened: Escape goes to the last one it applies to. */
|
|
20842
|
+
const openAutoPopovers = [];
|
|
20843
|
+
/** The focused element, followed down through shadow roots to the control that has focus. */
|
|
20844
|
+
function deepActiveElement() {
|
|
20845
|
+
var _a;
|
|
20846
|
+
let active = document.activeElement;
|
|
20847
|
+
while ((_a = active === null || active === void 0 ? void 0 : active.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement)
|
|
20848
|
+
active = active.shadowRoot.activeElement;
|
|
20849
|
+
return active;
|
|
20850
|
+
}
|
|
20366
20851
|
/**
|
|
20367
20852
|
* @slot trigger - The trigger element for the popover
|
|
20368
20853
|
* @slot (default) - The content to display inside the popover
|
|
@@ -20398,7 +20883,7 @@ class PdsPopover {
|
|
|
20398
20883
|
*/
|
|
20399
20884
|
this.triggerObserver = null;
|
|
20400
20885
|
/**
|
|
20401
|
-
* Portal element
|
|
20886
|
+
* Portal element: in document.body, or in the open dialog the popover is in
|
|
20402
20887
|
*/
|
|
20403
20888
|
this.portalEl = null;
|
|
20404
20889
|
/**
|
|
@@ -20494,6 +20979,26 @@ class PdsPopover {
|
|
|
20494
20979
|
break;
|
|
20495
20980
|
}
|
|
20496
20981
|
};
|
|
20982
|
+
/** The focus style copied into a shadow root the panel opened in, which `document.head` can't reach. */
|
|
20983
|
+
this.shadowFocusStyle = null;
|
|
20984
|
+
/** The dialog the panel was opened in, closed along with it. */
|
|
20985
|
+
this.watchedDialog = null;
|
|
20986
|
+
this.onDialogClose = () => {
|
|
20987
|
+
this.hide();
|
|
20988
|
+
};
|
|
20989
|
+
/**
|
|
20990
|
+
* Inside a dialog, the panel can sit in a form that wraps the dialog, which a body portal never
|
|
20991
|
+
* did. A submit from the panel (a button in it, or Enter in a field in it) is stopped, so the
|
|
20992
|
+
* panel behaves as it does in the body.
|
|
20993
|
+
*/
|
|
20994
|
+
this.handleSubmitFromPanel = (event) => {
|
|
20995
|
+
if (!this.portalEl || !containsComposed$1(event.target, this.portalEl))
|
|
20996
|
+
return;
|
|
20997
|
+
if (containsComposed$1(this.portalEl, event.submitter) || containsComposed$1(this.portalEl, deepActiveElement())) {
|
|
20998
|
+
event.preventDefault();
|
|
20999
|
+
event.stopPropagation();
|
|
21000
|
+
}
|
|
21001
|
+
};
|
|
20497
21002
|
}
|
|
20498
21003
|
restorePlacementDefault(newValue) {
|
|
20499
21004
|
this.placement = restoreReflectedDefault(this.el, 'placement', newValue, 'right');
|
|
@@ -20530,7 +21035,8 @@ class PdsPopover {
|
|
|
20530
21035
|
this.triggerObserver = null;
|
|
20531
21036
|
if (this.triggerEl == null || typeof MutationObserver === 'undefined')
|
|
20532
21037
|
return;
|
|
20533
|
-
|
|
21038
|
+
// Capped against a script that keeps undoing it; opening and closing still write it directly.
|
|
21039
|
+
this.triggerObserver = new MutationObserver(limitRestores(() => this.linkTriggerToPortal(), 'pds-popover: stopped restoring its trigger ARIA, as another script keeps changing it. It may be wrong until the popover opens or closes.', this.triggerEl));
|
|
20534
21040
|
this.triggerObserver.observe(this.triggerEl, {
|
|
20535
21041
|
attributes: true,
|
|
20536
21042
|
attributeFilter: ['aria-expanded', 'aria-controls'],
|
|
@@ -20540,9 +21046,9 @@ class PdsPopover {
|
|
|
20540
21046
|
// This mirrors the native Popover API's accessibility behavior
|
|
20541
21047
|
linkTriggerToPortal() {
|
|
20542
21048
|
if (this.triggerEl == null || this.portalEl == null)
|
|
20543
|
-
return;
|
|
21049
|
+
return false;
|
|
20544
21050
|
// Skips values already in place, so the trigger observer's own callback doesn't loop.
|
|
20545
|
-
setAttributesIfChanged(this.triggerEl, { 'aria-expanded': String(this.active), 'aria-controls': this.portalEl.id });
|
|
21051
|
+
return setAttributesIfChanged(this.triggerEl, { 'aria-expanded': String(this.active), 'aria-controls': this.portalEl.id });
|
|
20546
21052
|
}
|
|
20547
21053
|
// componentDidLoad doesn't run again when a popover comes back, so rebuild whatever
|
|
20548
21054
|
// disconnectedCallback tore down. Each step is a no-op when nothing was.
|
|
@@ -20555,19 +21061,23 @@ class PdsPopover {
|
|
|
20555
21061
|
(_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.addEventListener('click', this.handleTriggerClick);
|
|
20556
21062
|
this.observeTrigger();
|
|
20557
21063
|
this.linkTriggerToPortal();
|
|
20558
|
-
// Still open after a move: the trigger moved, so the portal follows it
|
|
21064
|
+
// Still open after a move: the trigger moved, so the portal follows it, into the dialog it
|
|
21065
|
+
// is in now, if any.
|
|
20559
21066
|
if (this.active) {
|
|
21067
|
+
this.placePortal();
|
|
20560
21068
|
requestAnimationFrame(() => this.handlePopoverPositioning());
|
|
20561
21069
|
}
|
|
20562
21070
|
}
|
|
20563
21071
|
disconnectedCallback() {
|
|
20564
21072
|
var _a;
|
|
20565
21073
|
// Moved in one operation (a DOM morph, or a framework reparenting it), the popover is
|
|
20566
|
-
// already back in the page. Its portal is
|
|
20567
|
-
// where it was.
|
|
21074
|
+
// already back in the page. Its portal is outside the popover, so it stays open, with focus
|
|
21075
|
+
// where it was; connectedCallback moves it to follow the popover.
|
|
20568
21076
|
if (this.el.isConnected)
|
|
20569
21077
|
return;
|
|
20570
21078
|
this.isComponentMounted = false;
|
|
21079
|
+
this.unwatchDialogClose();
|
|
21080
|
+
this.forgetOpen();
|
|
20571
21081
|
// Open, the content sits in the portal; put it back before the portal goes. Only listeners on
|
|
20572
21082
|
// the popover itself hear the close event now, but those are the ones mirroring its state.
|
|
20573
21083
|
if (this.active) {
|
|
@@ -20588,6 +21098,7 @@ class PdsPopover {
|
|
|
20588
21098
|
// Clean up all event listeners
|
|
20589
21099
|
this.removeLightDismissListeners();
|
|
20590
21100
|
this.removeScrollAndResizeListeners();
|
|
21101
|
+
document.removeEventListener('submit', this.handleSubmitFromPanel, true);
|
|
20591
21102
|
// Clear any pending debounce timers
|
|
20592
21103
|
this.clearDebounceTimers();
|
|
20593
21104
|
// Remove portal from DOM
|
|
@@ -20632,9 +21143,6 @@ class PdsPopover {
|
|
|
20632
21143
|
else {
|
|
20633
21144
|
this.portalEl.id = `${this.componentId}-portal`;
|
|
20634
21145
|
}
|
|
20635
|
-
// Add accessibility attributes for screen readers
|
|
20636
|
-
// Note: Native Popover API doesn't add a specific role, keeping semantic HTML
|
|
20637
|
-
this.portalEl.setAttribute('aria-modal', 'false'); // Not a modal, can interact with rest of page
|
|
20638
21146
|
// Append to body
|
|
20639
21147
|
document.body.appendChild(this.portalEl);
|
|
20640
21148
|
// Add global focus styles to match Pine design system
|
|
@@ -20649,22 +21157,25 @@ class PdsPopover {
|
|
|
20649
21157
|
if (!this.portalEl)
|
|
20650
21158
|
return;
|
|
20651
21159
|
const portalId = this.portalEl.id;
|
|
21160
|
+
// componentId comes from the consumer, so it can carry characters cssEscape needs to
|
|
21161
|
+
// neutralize before the id is used as a selector or interpolated into stylesheet text.
|
|
21162
|
+
const escapedPortalId = cssEscape(portalId);
|
|
20652
21163
|
// Check if style element already exists
|
|
20653
|
-
const existingStyle = document.querySelector(`style[data-pds-popover-focus="${
|
|
21164
|
+
const existingStyle = document.querySelector(`style[data-pds-popover-focus="${escapedPortalId}"]`);
|
|
20654
21165
|
if (existingStyle)
|
|
20655
21166
|
return;
|
|
20656
21167
|
// Create style element with Pine's focus ring styles and dark mode border
|
|
20657
21168
|
const styleEl = document.createElement('style');
|
|
20658
21169
|
styleEl.setAttribute('data-pds-popover-focus', portalId);
|
|
20659
21170
|
styleEl.textContent = `
|
|
20660
|
-
#${
|
|
21171
|
+
#${escapedPortalId}:focus {
|
|
20661
21172
|
outline: var(--pine-outline-focus, 2px solid var(--pine-color-focus-ring, #6366f1)) !important;
|
|
20662
21173
|
outline-offset: var(--pine-border-width, 1px);
|
|
20663
21174
|
}
|
|
20664
|
-
#${
|
|
21175
|
+
#${escapedPortalId}:focus:not(:focus-visible) {
|
|
20665
21176
|
outline: none;
|
|
20666
21177
|
}
|
|
20667
|
-
[data-theme="dark"] #${
|
|
21178
|
+
[data-theme="dark"] #${escapedPortalId} {
|
|
20668
21179
|
border: var(--pine-border);
|
|
20669
21180
|
}
|
|
20670
21181
|
`;
|
|
@@ -20715,7 +21226,27 @@ class PdsPopover {
|
|
|
20715
21226
|
// Clear tracking array
|
|
20716
21227
|
this.movedNodes = [];
|
|
20717
21228
|
}
|
|
21229
|
+
copyFocusStylesInto(root) {
|
|
21230
|
+
var _a, _b, _c;
|
|
21231
|
+
// Outside a shadow root the document's own style applies, so drop a copy left in one.
|
|
21232
|
+
if (!(root instanceof ShadowRoot)) {
|
|
21233
|
+
(_a = this.shadowFocusStyle) === null || _a === void 0 ? void 0 : _a.remove();
|
|
21234
|
+
this.shadowFocusStyle = null;
|
|
21235
|
+
return;
|
|
21236
|
+
}
|
|
21237
|
+
if (((_b = this.shadowFocusStyle) === null || _b === void 0 ? void 0 : _b.parentNode) === root || !this.portalEl)
|
|
21238
|
+
return;
|
|
21239
|
+
const source = document.querySelector(`style[data-pds-popover-focus="${cssEscape(this.portalEl.id)}"]`);
|
|
21240
|
+
if (!source)
|
|
21241
|
+
return;
|
|
21242
|
+
(_c = this.shadowFocusStyle) === null || _c === void 0 ? void 0 : _c.remove();
|
|
21243
|
+
this.shadowFocusStyle = source.cloneNode(true);
|
|
21244
|
+
root.appendChild(this.shadowFocusStyle);
|
|
21245
|
+
}
|
|
20718
21246
|
removePortal() {
|
|
21247
|
+
var _a;
|
|
21248
|
+
(_a = this.shadowFocusStyle) === null || _a === void 0 ? void 0 : _a.remove();
|
|
21249
|
+
this.shadowFocusStyle = null;
|
|
20719
21250
|
if (this.portalEl) {
|
|
20720
21251
|
// Remove the portal element from DOM
|
|
20721
21252
|
if (this.portalEl.parentNode) {
|
|
@@ -20723,7 +21254,7 @@ class PdsPopover {
|
|
|
20723
21254
|
}
|
|
20724
21255
|
// Remove the associated focus style element
|
|
20725
21256
|
const portalId = this.portalEl.id;
|
|
20726
|
-
const styleEl = document.querySelector(`style[data-pds-popover-focus="${portalId}"]`);
|
|
21257
|
+
const styleEl = document.querySelector(`style[data-pds-popover-focus="${cssEscape(portalId)}"]`);
|
|
20727
21258
|
if (styleEl && styleEl.parentNode) {
|
|
20728
21259
|
styleEl.parentNode.removeChild(styleEl);
|
|
20729
21260
|
}
|
|
@@ -20740,9 +21271,13 @@ class PdsPopover {
|
|
|
20740
21271
|
// Record open timestamp to prevent immediate close from opening click
|
|
20741
21272
|
this.openTimestamp = Date.now();
|
|
20742
21273
|
this.linkTriggerToPortal();
|
|
21274
|
+
this.placePortal();
|
|
20743
21275
|
// Update portal content with latest slot content
|
|
20744
21276
|
this.updatePortalContent();
|
|
20745
|
-
// Show portal
|
|
21277
|
+
// Show portal. The attribute tells a modal around it that this popover takes Escape first; only
|
|
21278
|
+
// an auto popover listens for Escape.
|
|
21279
|
+
if (this.popoverType === 'auto')
|
|
21280
|
+
this.portalEl.setAttribute('data-pds-popover-open', '');
|
|
20746
21281
|
this.portalEl.style.display = 'block';
|
|
20747
21282
|
this.portalEl.style.opacity = '1';
|
|
20748
21283
|
this.portalEl.style.visibility = 'visible';
|
|
@@ -20754,8 +21289,10 @@ class PdsPopover {
|
|
|
20754
21289
|
});
|
|
20755
21290
|
// Add scroll and resize listeners for repositioning (always)
|
|
20756
21291
|
this.addScrollAndResizeListeners();
|
|
21292
|
+
document.addEventListener('submit', this.handleSubmitFromPanel, true);
|
|
20757
21293
|
// Add document listeners for light dismiss and escape key (auto type only)
|
|
20758
21294
|
if (this.popoverType === 'auto') {
|
|
21295
|
+
openAutoPopovers.push(this);
|
|
20759
21296
|
this.addLightDismissListeners();
|
|
20760
21297
|
}
|
|
20761
21298
|
// Emit open event
|
|
@@ -20771,12 +21308,16 @@ class PdsPopover {
|
|
|
20771
21308
|
if (!this.active || !this.portalEl)
|
|
20772
21309
|
return;
|
|
20773
21310
|
this.active = false;
|
|
20774
|
-
|
|
20775
|
-
|
|
21311
|
+
this.unwatchDialogClose();
|
|
21312
|
+
// Restoring the content drops its focus to the body, so check where focus is first. In a
|
|
21313
|
+
// shadow root, document.activeElement is only its host.
|
|
21314
|
+
const focusWasInside = containsComposed$1(this.portalEl, deepActiveElement());
|
|
20776
21315
|
this.linkTriggerToPortal();
|
|
20777
21316
|
// Restore content back to original slot positions
|
|
20778
21317
|
this.restorePortalContent();
|
|
20779
|
-
// Hide portal
|
|
21318
|
+
// Hide portal. The dark-mode border set in a shadow root is worked out again on the next open.
|
|
21319
|
+
this.portalEl.style.border = '';
|
|
21320
|
+
this.portalEl.removeAttribute('data-pds-popover-open');
|
|
20780
21321
|
this.portalEl.style.display = 'none';
|
|
20781
21322
|
this.portalEl.style.opacity = '0';
|
|
20782
21323
|
this.portalEl.style.visibility = 'hidden';
|
|
@@ -20786,8 +21327,10 @@ class PdsPopover {
|
|
|
20786
21327
|
this.returnFocusToTrigger();
|
|
20787
21328
|
}
|
|
20788
21329
|
// Remove all listeners
|
|
21330
|
+
this.forgetOpen();
|
|
20789
21331
|
this.removeLightDismissListeners();
|
|
20790
21332
|
this.removeScrollAndResizeListeners();
|
|
21333
|
+
document.removeEventListener('submit', this.handleSubmitFromPanel, true);
|
|
20791
21334
|
// Clear any pending timers
|
|
20792
21335
|
this.clearDebounceTimers();
|
|
20793
21336
|
// Emit close event
|
|
@@ -20807,6 +21350,59 @@ class PdsPopover {
|
|
|
20807
21350
|
this.show();
|
|
20808
21351
|
}
|
|
20809
21352
|
}
|
|
21353
|
+
/**
|
|
21354
|
+
* Puts the panel where it shows above everything around the popover. In an open dialog, it goes
|
|
21355
|
+
* inside it: a modal dialog sits in the top layer above the body and makes the rest of the page
|
|
21356
|
+
* inert, and a non-modal one sits above it by z-index. Right after the popover, it's next in the
|
|
21357
|
+
* Tab order. In another component's slot, though, it would have no slot to render in, and in a
|
|
21358
|
+
* form its buttons would submit it, so there it goes at the end of the dialog.
|
|
21359
|
+
*/
|
|
21360
|
+
placePortal() {
|
|
21361
|
+
var _a, _b;
|
|
21362
|
+
if (!this.portalEl)
|
|
21363
|
+
return;
|
|
21364
|
+
const dialog = closest$1('dialog[open]', this.el);
|
|
21365
|
+
if (!dialog) {
|
|
21366
|
+
this.unwatchDialogClose();
|
|
21367
|
+
this.portalEl.style.border = '';
|
|
21368
|
+
if (this.portalEl.parentElement !== document.body)
|
|
21369
|
+
document.body.appendChild(this.portalEl);
|
|
21370
|
+
this.copyFocusStylesInto(document);
|
|
21371
|
+
return;
|
|
21372
|
+
}
|
|
21373
|
+
const form = closest$1('form', this.el);
|
|
21374
|
+
const besidePopover = !((_a = this.el.parentElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) && !(form && containsComposed$1(dialog, form));
|
|
21375
|
+
if (besidePopover) {
|
|
21376
|
+
if (this.el.nextElementSibling !== this.portalEl)
|
|
21377
|
+
(_b = this.el.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(this.portalEl, this.el.nextSibling);
|
|
21378
|
+
}
|
|
21379
|
+
else if (this.portalEl.parentNode !== dialog) {
|
|
21380
|
+
dialog.appendChild(this.portalEl);
|
|
21381
|
+
}
|
|
21382
|
+
this.watchDialogClose(dialog);
|
|
21383
|
+
const root = this.portalEl.getRootNode();
|
|
21384
|
+
this.copyFocusStylesInto(root);
|
|
21385
|
+
// In a shadow root, the copied dark-mode rule can't see a [data-theme="dark"] on the page.
|
|
21386
|
+
this.portalEl.style.border = root instanceof ShadowRoot && closest$1('[data-theme="dark"]', this.el) ? 'var(--pine-border)' : '';
|
|
21387
|
+
}
|
|
21388
|
+
forgetOpen() {
|
|
21389
|
+
const index = openAutoPopovers.indexOf(this);
|
|
21390
|
+
if (index >= 0)
|
|
21391
|
+
openAutoPopovers.splice(index, 1);
|
|
21392
|
+
}
|
|
21393
|
+
/**
|
|
21394
|
+
* Whether an Escape is this popover's. One from a dialog the popover isn't in belongs to that
|
|
21395
|
+
* dialog when it's above it: a top-layer dialog or a pds-modal. A plain non-modal dialog inside
|
|
21396
|
+
* the popover's modal doesn't close on Escape, so the popover takes it.
|
|
21397
|
+
*/
|
|
21398
|
+
takesEscapeFrom(event) {
|
|
21399
|
+
var _a, _b;
|
|
21400
|
+
const origin = ((_b = (_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)[0]) !== null && _b !== void 0 ? _b : event.target);
|
|
21401
|
+
const dialog = closest$1('dialog[open]', origin);
|
|
21402
|
+
if (!dialog || containsComposed$1(dialog, this.portalEl))
|
|
21403
|
+
return true;
|
|
21404
|
+
return !(dialog.classList.contains('pds-modal__backdrop') || dialog.matches(':modal'));
|
|
21405
|
+
}
|
|
20810
21406
|
/**
|
|
20811
21407
|
* Adds light dismiss listeners (click outside and escape key)
|
|
20812
21408
|
*/
|
|
@@ -20815,6 +21411,19 @@ class PdsPopover {
|
|
|
20815
21411
|
document.addEventListener('click', this.boundClickOutsideHandler, true);
|
|
20816
21412
|
document.addEventListener('keydown', this.boundEscapeKeyHandler);
|
|
20817
21413
|
}
|
|
21414
|
+
/** Closes the popover when the dialog it opened in closes, so it isn't left open inside. */
|
|
21415
|
+
watchDialogClose(dialog) {
|
|
21416
|
+
if (this.watchedDialog === dialog)
|
|
21417
|
+
return;
|
|
21418
|
+
this.unwatchDialogClose();
|
|
21419
|
+
this.watchedDialog = dialog;
|
|
21420
|
+
dialog.addEventListener('close', this.onDialogClose);
|
|
21421
|
+
}
|
|
21422
|
+
unwatchDialogClose() {
|
|
21423
|
+
var _a;
|
|
21424
|
+
(_a = this.watchedDialog) === null || _a === void 0 ? void 0 : _a.removeEventListener('close', this.onDialogClose);
|
|
21425
|
+
this.watchedDialog = null;
|
|
21426
|
+
}
|
|
20818
21427
|
/**
|
|
20819
21428
|
* Removes light dismiss listeners
|
|
20820
21429
|
*/
|
|
@@ -20840,7 +21449,7 @@ class PdsPopover {
|
|
|
20840
21449
|
* Handles clicks outside the popover for light dismiss (auto type only)
|
|
20841
21450
|
*/
|
|
20842
21451
|
handleClickOutside(event) {
|
|
20843
|
-
var _a, _b
|
|
21452
|
+
var _a, _b;
|
|
20844
21453
|
// Ignore events that occurred at or before the popover opened
|
|
20845
21454
|
// This prevents the opening click from immediately closing the popover
|
|
20846
21455
|
// Convert event.timeStamp (DOMHighResTimeStamp from performance.now()) to epoch time
|
|
@@ -20851,16 +21460,18 @@ class PdsPopover {
|
|
|
20851
21460
|
if (eventTime <= this.openTimestamp) {
|
|
20852
21461
|
return;
|
|
20853
21462
|
}
|
|
20854
|
-
|
|
21463
|
+
// In a shadow root, event.target is only its host.
|
|
21464
|
+
const target = ((_b = (_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)[0]) !== null && _b !== void 0 ? _b : event.target);
|
|
20855
21465
|
// A datepicker's calendar is portaled to the body: a click in the calendar of a datepicker
|
|
20856
|
-
// inside this popover, in its content or its trigger, isn't outside it.
|
|
20857
|
-
|
|
21466
|
+
// inside this popover, in its content or its trigger, isn't outside it. The target can be
|
|
21467
|
+
// inside the calendar's shadow root, so look up across it.
|
|
21468
|
+
const calendar = closest$1('.pds-datepicker-calendar-portal', target);
|
|
20858
21469
|
const owner = calendar === null || calendar === void 0 ? void 0 : calendar.pdsDatepicker;
|
|
20859
21470
|
if (owner && (containsComposed$1(this.portalEl, owner) || containsComposed$1(this.triggerEl, owner)))
|
|
20860
21471
|
return;
|
|
20861
21472
|
// Check if click is outside both the popover portal and the trigger
|
|
20862
|
-
const clickedInsidePopover = (
|
|
20863
|
-
const clickedInsideTrigger = (
|
|
21473
|
+
const clickedInsidePopover = containsComposed$1(this.portalEl, target);
|
|
21474
|
+
const clickedInsideTrigger = containsComposed$1(this.triggerEl, target);
|
|
20864
21475
|
if (!clickedInsidePopover && !clickedInsideTrigger) {
|
|
20865
21476
|
this.hide();
|
|
20866
21477
|
}
|
|
@@ -20881,14 +21492,19 @@ class PdsPopover {
|
|
|
20881
21492
|
* Mirrors native Popover API: Escape closes and returns focus to trigger
|
|
20882
21493
|
*/
|
|
20883
21494
|
handleEscapeKey(event) {
|
|
20884
|
-
|
|
20885
|
-
|
|
20886
|
-
|
|
20887
|
-
|
|
20888
|
-
|
|
20889
|
-
|
|
20890
|
-
|
|
20891
|
-
|
|
21495
|
+
// A control inside that closes on Escape (a datepicker, a combobox) has handled it already.
|
|
21496
|
+
if (event.key !== 'Escape' || event.defaultPrevented)
|
|
21497
|
+
return;
|
|
21498
|
+
// Like the native Popover API, Escape closes only the top popover: the last one opened that
|
|
21499
|
+
// it applies to. Every open popover hears it, so each checks whether it's that one.
|
|
21500
|
+
const top = [...openAutoPopovers].reverse().find(popover => popover.takesEscapeFrom(event));
|
|
21501
|
+
if (top !== this)
|
|
21502
|
+
return;
|
|
21503
|
+
// Take the key, so the dialog or modal around it doesn't close too.
|
|
21504
|
+
event.preventDefault();
|
|
21505
|
+
event.stopPropagation();
|
|
21506
|
+
// Close popover and return focus to trigger
|
|
21507
|
+
this.hide();
|
|
20892
21508
|
}
|
|
20893
21509
|
/**
|
|
20894
21510
|
* Handles scroll events to reposition the popover (debounced for performance)
|
|
@@ -20993,13 +21609,20 @@ class PdsPopover {
|
|
|
20993
21609
|
}
|
|
20994
21610
|
this.portalEl.style.top = `${top}px`;
|
|
20995
21611
|
this.portalEl.style.left = `${left}px`;
|
|
21612
|
+
// `position: fixed` measures from the viewport unless an ancestor becomes its containing block,
|
|
21613
|
+
// as a modal dialog does with its backdrop filter. Shift by however far it landed from the spot.
|
|
21614
|
+
const placed = this.portalEl.getBoundingClientRect();
|
|
21615
|
+
if (Math.abs(placed.top - top) > 0.5 || Math.abs(placed.left - left) > 0.5) {
|
|
21616
|
+
this.portalEl.style.top = `${2 * top - placed.top}px`;
|
|
21617
|
+
this.portalEl.style.left = `${2 * left - placed.left}px`;
|
|
21618
|
+
}
|
|
20996
21619
|
// Reset the repositioning guard after a short delay
|
|
20997
21620
|
setTimeout(() => {
|
|
20998
21621
|
this.isRepositioning = false;
|
|
20999
21622
|
}, 16); // ~1 frame at 60fps
|
|
21000
21623
|
}
|
|
21001
21624
|
render() {
|
|
21002
|
-
return (hAsync(Host, { key: '
|
|
21625
|
+
return (hAsync(Host, { key: 'da8a0c715df1199231b1265085f3f9ae0234032d', id: this.componentId }, hAsync("span", { key: 'f35023492399420829cec2e88556462f5ac1663e', class: "pds-popover__trigger-wrapper" }, hAsync("slot", { key: '38ebe92eebb87665467b3f92ff94dc8095450063', name: "trigger", onSlotchange: this.handleTriggerSlotChange })), hAsync("div", { key: '8917930f4520544d14bbd68b4c7936dd60af19e3', class: "pds-popover__content-slot-wrapper" }, hAsync("slot", { key: '28d3f9112256edd95721a79a7072a9e35a3712bf', onSlotchange: this.handleContentSlotChange }))));
|
|
21003
21626
|
}
|
|
21004
21627
|
get el() { return getElement(this); }
|
|
21005
21628
|
static get watchers() { return {
|
|
@@ -21061,10 +21684,10 @@ class PdsProgress {
|
|
|
21061
21684
|
this.hostKeeper.disconnect();
|
|
21062
21685
|
}
|
|
21063
21686
|
render() {
|
|
21064
|
-
const normalizedFillColor = normalizeColorValue(this.fillColor);
|
|
21687
|
+
const normalizedFillColor = normalizeColorValue$1(this.fillColor);
|
|
21065
21688
|
const hostClass = this.animated ? { 'is-animated': this.animated } : '';
|
|
21066
21689
|
this.hostKeeper.record(hostClass);
|
|
21067
|
-
return (hAsync(Host, { key: '
|
|
21690
|
+
return (hAsync(Host, { key: 'a224e1e9bc50433553ab8bf4b0d772f01148ee76', class: hostClass }, hAsync("div", { key: '261742044f3d68c204cbf640cc4447eb6d74df11', class: "pds-progress" }, hAsync("label", { key: 'd686bdc6ab450bf8c14dd56077525a3139593f46', class: "pds-progress__label", htmlFor: this.componentId }, this.label), hAsync("progress", { key: 'c716e977a952a628aec600fa680aa9c3b8d0e996', id: this.componentId, max: "100", style: normalizedFillColor ? { '--color-progress-fill': normalizedFillColor } : {}, value: this.percent })), this.showPercent && hAsync("div", { key: '44176a580b435f69993be4a60ee2e888b87e10fb', class: "pds-progress__percentage" }, this.percent, "%")));
|
|
21068
21691
|
}
|
|
21069
21692
|
get el() { return getElement(this); }
|
|
21070
21693
|
static get style() { return pdsProgressCss(); }
|
|
@@ -21099,7 +21722,7 @@ class PdsProperty {
|
|
|
21099
21722
|
this.icon = 'star';
|
|
21100
21723
|
}
|
|
21101
21724
|
render() {
|
|
21102
|
-
return (hAsync(Host, { key: '
|
|
21725
|
+
return (hAsync(Host, { key: 'd599b62be4bacf1d89afcc26b14fc93bdc9bb3a4', id: this.componentId }, hAsync("pds-box", { key: 'd7f80f6598615c761d672893c8acab09bd9ea33f', "align-items": "center", gap: "xs" }, hAsync("pds-icon", { key: '15a6a6545c2cd2332bd830451106b7b08adc39ff', icon: this.icon, size: "var(--pine-dimension-sm)", "aria-hidden": "true" }), hAsync("slot", { key: '4e5661563b99ec56189447faabcdd1ae631159b2' }))));
|
|
21103
21726
|
}
|
|
21104
21727
|
static get style() { return pdsPropertyCss(); }
|
|
21105
21728
|
static get cmpMeta() { return {
|
|
@@ -21218,13 +21841,13 @@ class PdsRadio {
|
|
|
21218
21841
|
}
|
|
21219
21842
|
render() {
|
|
21220
21843
|
const renderLabelAndMessages = () => [
|
|
21221
|
-
hAsync("label", { htmlFor: this.componentId, key: `${this.componentId}-label` }, hAsync("input", { key: '
|
|
21844
|
+
hAsync("label", { htmlFor: this.componentId, key: `${this.componentId}-label` }, hAsync("input", { key: 'ccd618855831bcee309e815f2cd2712fd4e8fe1f', "aria-describedby": assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, type: "radio", id: this.componentId, name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onChange: this.handleRadioChange, class: this.hasImage() ? 'visually-hidden' : '' }), hAsync("span", { key: '2e372a880c28f48fb804bac2518208082c141fad', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)),
|
|
21222
21845
|
this.helperMessage && (hAsync("div", { key: `${this.componentId}-helper`, class: 'pds-radio__message', id: messageId(this.componentId, 'helper') }, this.helperMessage)),
|
|
21223
|
-
this.errorMessage && (hAsync("div", { key: `${this.componentId}-error`, class: `pds-radio__message pds-radio__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, hAsync("pds-icon", { key: '
|
|
21846
|
+
this.errorMessage && (hAsync("div", { key: `${this.componentId}-error`, class: `pds-radio__message pds-radio__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, hAsync("pds-icon", { key: '889d502575f6a162f450b6b58d76a6f6f1c74e4b', icon: danger, size: "small" }), this.errorMessage))
|
|
21224
21847
|
];
|
|
21225
21848
|
const hostClass = this.classNames();
|
|
21226
21849
|
this.hostKeeper.record(hostClass);
|
|
21227
|
-
return (hAsync(Host, { key: '
|
|
21850
|
+
return (hAsync(Host, { key: '374003032b28407581a55f1fb0a304c49acf3c16', class: hostClass }, this.hasImage() && (hAsync("div", { key: '7eeb516267de1afcfa85fc7567999db488c2f4f5', class: "pds-radio__image-container", part: "image-container" }, hAsync("slot", { key: 'a312fea06f0c015bffab3bb392ff04d4913fd1c0', name: "image", onSlotchange: () => (this._hasImage = this.hasImageSlot()) }))), this.hasImage() ? (hAsync("div", { class: "pds-radio__content-wrapper" }, renderLabelAndMessages())) : (renderLabelAndMessages())));
|
|
21228
21851
|
}
|
|
21229
21852
|
get el() { return getElement(this); }
|
|
21230
21853
|
static get style() { return labelCss$3() + pdsRadioCss(); }
|
|
@@ -21416,13 +22039,13 @@ class PdsRadioGroup {
|
|
|
21416
22039
|
render() {
|
|
21417
22040
|
const gapValue = this.getGapValue();
|
|
21418
22041
|
const ariaDescribedBy = this.getAriaDescribedBy();
|
|
21419
|
-
return (hAsync(Host, { key: '
|
|
22042
|
+
return (hAsync(Host, { key: 'bf8063c1a99e272bb3f6bc647998a6ef103f8a71', class: this.classNames(), id: this._groupId, role: "group", "aria-describedby": ariaDescribedBy, style: {
|
|
21420
22043
|
'--pds-radio-group-gap': gapValue,
|
|
21421
|
-
} }, this.groupLabel && (hAsync("div", { key: '
|
|
22044
|
+
} }, this.groupLabel && (hAsync("div", { key: '8564ed3f8f99cdc1a0e5b189aacc6960923eb5f7', class: "pds-radio-group__label" }, this.groupLabel)), hAsync("div", { key: '2309c9373790182cde030c1dbda88fa3bdcaaf12', class: {
|
|
21422
22045
|
'pds-radio-group__radios': true,
|
|
21423
22046
|
'pds-radio-group__radios--row': this.direction === 'row',
|
|
21424
22047
|
'pds-radio-group__radios--column': this.direction === 'column',
|
|
21425
|
-
} }, hAsync("slot", { key: '
|
|
22048
|
+
} }, hAsync("slot", { key: 'd88dde3c631e25c01bc7b6d3ef5d517255fabd1a', onSlotchange: () => this.updateChildRadios() })), this.helperMessage && (hAsync("div", { key: 'a229214ed01663b0fc34f35e27c7148b4eb412ab', class: "pds-radio-group__message", id: messageId(this._groupId, 'helper') }, this.helperMessage)), this.errorMessage && (hAsync("div", { key: 'dc092f2e6dbef0cb369cf00a6eccf9a095a0313d', class: "pds-radio-group__message pds-radio-group__message--error", id: messageId(this._groupId, 'error'), "aria-live": "assertive" }, hAsync("pds-icon", { key: 'd242da328731e55fa52d8e624fdfc750bfa6cce4', icon: danger, size: "small" }), this.errorMessage))));
|
|
21426
22049
|
}
|
|
21427
22050
|
get el() { return getElement(this); }
|
|
21428
22051
|
static get watchers() { return {
|
|
@@ -21531,7 +22154,7 @@ class PdsRow {
|
|
|
21531
22154
|
'min-height': this.minHeight,
|
|
21532
22155
|
}));
|
|
21533
22156
|
this.hostKeeper.record(`pds-row ${rowClasses}`, rowInlineStyles);
|
|
21534
|
-
return hAsync(Host, { key: '
|
|
22157
|
+
return hAsync(Host, { key: '78a505fef7132f9545916155d2485a6d2df8f4a5', class: `pds-row ${rowClasses}`, style: rowInlineStyles });
|
|
21535
22158
|
}
|
|
21536
22159
|
get el() { return getElement(this); }
|
|
21537
22160
|
static get style() { return pdsRowCss(); }
|
|
@@ -21803,7 +22426,7 @@ class PdsSelect {
|
|
|
21803
22426
|
'has-action': hasAction && !this.hideLabel ? 'true' : null,
|
|
21804
22427
|
};
|
|
21805
22428
|
this.hostKeeper.record(hostClass, {}, hostAttributes);
|
|
21806
|
-
return (hAsync(Host, Object.assign({ key: '
|
|
22429
|
+
return (hAsync(Host, Object.assign({ key: '343ed671e67dd1d6f9eb284b07e06d59877c64e9', class: hostClass }, hostAttributes), hAsync("div", { key: '650aed0869b02f658feb16ee99f17e1cd22e5a8e', class: "pds-select" }, !this.hideLabel && (hAsync("div", { key: '74739461acbea33c92279ec8ec9042d6af1773c1', class: "pds-select__label-wrapper" }, hAsync("label", { key: '1ad96ffd243000358edfbd79054ee770e1ba97d3', htmlFor: this.componentId }, hAsync("span", { key: 'b832868db4f9cd4fd2f8313054d2e96e106189ab', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), hasAction && this.renderAction())), hAsync("select", { key: 'e83c1a1a0a5646fc8abf9e50bc374f52b56be773', "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-label": this.hideLabel ? this.label : undefined, autocomplete: this.autocomplete || undefined, class: "pds-select__field", disabled: this.disabled, id: this.componentId, multiple: this.multiple, name: this.name, onBlur: this.onBlur, onChange: this.onSelectUpdate, onFocus: this.onFocus, onKeyDown: this.onKeyDown, part: "select", required: this.required, ref: (el) => (this.selectEl = el) }), hAsync("div", { key: 'a34880120b88124b5122350856d023368f96abf7', "aria-hidden": "true", class: "hidden", ref: (el) => (this.slotContainer = el) }, hAsync("slot", { key: 'df6abaf6a630761a32b263813181ff3453757e0d', onSlotchange: this.handleSlotChange })), this.renderMessages(), !this.multiple && hAsync("pds-icon", { key: 'f9197284ef9965d693242a652b583f48bc3d7097', "aria-hidden": "true", class: "pds-select__select-icon", icon: enlarge }))));
|
|
21807
22430
|
}
|
|
21808
22431
|
static get formAssociated() { return true; }
|
|
21809
22432
|
get el() { return getElement(this); }
|
|
@@ -24562,7 +25185,7 @@ class PdsSortable {
|
|
|
24562
25185
|
render() {
|
|
24563
25186
|
const classNames = this.classNames();
|
|
24564
25187
|
this.hostKeeper.record(classNames);
|
|
24565
|
-
return (hAsync(Host, { key: '
|
|
25188
|
+
return (hAsync(Host, { key: 'a0e532d31561748b4632a6be9163562f990af804', class: classNames, id: this.componentId }, hAsync("slot", { key: 'd1b0defb683f841e6708374fff4bf62eb7fd5080' })));
|
|
24566
25189
|
}
|
|
24567
25190
|
get el() { return getElement(this); }
|
|
24568
25191
|
static get watchers() { return {
|
|
@@ -24637,7 +25260,7 @@ class PdsSortableItem {
|
|
|
24637
25260
|
}
|
|
24638
25261
|
render() {
|
|
24639
25262
|
this.hostKeeper.record('pds-sortable-item');
|
|
24640
|
-
return (hAsync(Host, { key: '
|
|
25263
|
+
return (hAsync(Host, { key: '2065ccb474ae4b7032edc3c37aa6855f3048909d', class: "pds-sortable-item", id: this.componentId }, this.showHandle && (hAsync("div", { key: '32385cc94837a3d0bc1c496615135c79274afe35', class: "pds-sortable-item__handle" }, hAsync("pds-icon", { key: 'ea94e28b2867aa20622ca073dc31d3b4a11eebbb', "aria-hidden": "true", icon: handle }))), hAsync("slot", { key: 'fb18aa90be0b8fa3832a5dd2b02a7b571205341f' }), this.enableActions && (hAsync("div", { key: '4c6e59d77a7b2183552533a544f4a70ce0cc7011', class: "pds-sortable-item__actions" }, hAsync("slot", { key: '497b1ff88436175d9365a28032e109b6fa118e44', name: "sortable-item-actions" })))));
|
|
24641
25264
|
}
|
|
24642
25265
|
get el() { return getElement(this); }
|
|
24643
25266
|
static get style() { return pdsSortableItemCss(); }
|
|
@@ -24760,9 +25383,9 @@ class PdsSwitch {
|
|
|
24760
25383
|
const hostClass = this.switchClassNames();
|
|
24761
25384
|
const ariaDisabled = this.disabled ? 'true' : null;
|
|
24762
25385
|
this.hostKeeper.record(hostClass, {}, { 'aria-disabled': ariaDisabled });
|
|
24763
|
-
return (hAsync(Host, { key: '
|
|
24764
|
-
hAsync("div", { key: '
|
|
24765
|
-
hAsync("div", { key: '
|
|
25386
|
+
return (hAsync(Host, { key: 'ee8576e523348ff9eed1b6087626849bb0966608', class: hostClass, "aria-disabled": ariaDisabled }, hAsync("label", { key: '09433b5356d718be65f4f2eb61f35fff1d000e10', htmlFor: this.componentId }, hAsync("input", Object.assign({ key: 'f996a0fad56119674cfb7d95e1444bf411b64396', "aria-describedby": assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, checked: this.checked, class: "pds-switch__input", disabled: this.disabled, id: this.componentId, name: this.name ? this.name : this.componentId, onChange: this.onSwitchUpdate, required: this.required, type: "checkbox", value: this.value }, this.inheritedAttributes)), hAsync("span", { key: '4b23305d3cc0f5b37b23c6b79a14cfba57c16816', class: this.hideLabel ? 'visually-hidden' : '' }, hAsync("slot", { key: '258b5ccf0d4b01518df3a37772d694cb37569ffa', name: "label", onSlotchange: this.updateHasLabelSlot }), !this.hasLabelSlot && this.label)), this.helperMessage &&
|
|
25387
|
+
hAsync("div", { key: 'c8196fa2ce832de3a8c6d987a78fd65d791c4c59', class: `pds-switch__message`, id: messageId(this.componentId, 'helper') }, this.helperMessage), this.errorMessage &&
|
|
25388
|
+
hAsync("div", { key: '948894dd2e642689af6cad545a0b31f7c4711d87', class: `pds-switch__message pds-switch__message--error`, id: messageId(this.componentId, 'error'), "aria-live": "assertive" }, hAsync("pds-icon", { key: 'd4b72b49bfd38a396b8f7c0686e1b2ef92d65491', icon: danger, size: "small" }), this.errorMessage)));
|
|
24766
25389
|
}
|
|
24767
25390
|
static get formAssociated() { return true; }
|
|
24768
25391
|
get el() { return getElement(this); }
|
|
@@ -24804,6 +25427,7 @@ class PdsTab {
|
|
|
24804
25427
|
constructor(hostRef) {
|
|
24805
25428
|
registerInstance(this, hostRef);
|
|
24806
25429
|
this.pdsTabClick = createEvent(this, "pdsTabClick");
|
|
25430
|
+
this.hostKeeper = new HostStylingKeeper();
|
|
24807
25431
|
/**
|
|
24808
25432
|
* Determines the tab's disabled state.
|
|
24809
25433
|
* @defaultValue false
|
|
@@ -24822,6 +25446,12 @@ class PdsTab {
|
|
|
24822
25446
|
/** @internal */
|
|
24823
25447
|
this.selected = false;
|
|
24824
25448
|
}
|
|
25449
|
+
connectedCallback() {
|
|
25450
|
+
this.hostKeeper.connect(this.el);
|
|
25451
|
+
}
|
|
25452
|
+
disconnectedCallback() {
|
|
25453
|
+
this.hostKeeper.disconnect();
|
|
25454
|
+
}
|
|
24825
25455
|
// Unwraps a nested <a>/<button> left by a page-cache (Turbo, bfcache) reconnect.
|
|
24826
25456
|
componentDidRender() {
|
|
24827
25457
|
unwrapReconnectedContent(this.el.querySelector('.pds-tab__content'), 'a.pds-tab, button.pds-tab', '.pds-tab__content');
|
|
@@ -24857,6 +25487,9 @@ class PdsTab {
|
|
|
24857
25487
|
return classes.filter(Boolean).join(' ');
|
|
24858
25488
|
}
|
|
24859
25489
|
render() {
|
|
25490
|
+
// The docs show consumers omitting `slot`, so server HTML doesn't carry it — a DOM morph
|
|
25491
|
+
// that strips it leaves this tab unslotted, and pds-tabs has no default slot. Put it back.
|
|
25492
|
+
this.hostKeeper.record('', {}, { slot: 'tabs' });
|
|
24860
25493
|
const availabilityTabEdgeInlineStart = (hAsync("span", { class: "pds-tab-edge", role: "presentation" }));
|
|
24861
25494
|
const availabilityTabEdgeInlineEnd = (hAsync("span", { class: "pds-tab-edge pds-tab-edge--end", role: "presentation" }));
|
|
24862
25495
|
const content = (hAsync(Fragment, null, this.variant === "availability" && availabilityTabEdgeInlineStart, this.variant === "availability" && availabilityTabEdgeInlineEnd, hAsync("div", { class: "pds-tab__content" }, hAsync("slot", null))));
|
|
@@ -25176,7 +25809,7 @@ class PdsTableBody {
|
|
|
25176
25809
|
registerInstance(this, hostRef);
|
|
25177
25810
|
}
|
|
25178
25811
|
render() {
|
|
25179
|
-
return (hAsync(Host, { key: '
|
|
25812
|
+
return (hAsync(Host, { key: '817532e93c8f91ef64cd0f90aa6c4372c3b7d83f', role: "rowgroup", part: "body" }, hAsync("slot", { key: '296ba876c6716e85252a06008bd55d59624223e3' })));
|
|
25180
25813
|
}
|
|
25181
25814
|
static get style() { return pdsTableBodyCss(); }
|
|
25182
25815
|
static get cmpMeta() { return {
|
|
@@ -25314,11 +25947,11 @@ class PdsTableCell {
|
|
|
25314
25947
|
return classNames.join(' ');
|
|
25315
25948
|
}
|
|
25316
25949
|
render() {
|
|
25317
|
-
return (hAsync(Host, { key: '
|
|
25950
|
+
return (hAsync(Host, { key: 'bedaeeb5723299656f872a760ed1dd80c7fe8793', class: this.classNames(), role: "gridcell", part: "cell", style: this.tableRef &&
|
|
25318
25951
|
this.tableRef.fixedColumn &&
|
|
25319
25952
|
this.tableRef.selectable
|
|
25320
25953
|
? { '--fixed-cell-position': '40px' }
|
|
25321
|
-
: {} }, hAsync("slot", { key: '
|
|
25954
|
+
: {} }, hAsync("slot", { key: '45182ee3e004097660432f552780b3d27671bd46' })));
|
|
25322
25955
|
}
|
|
25323
25956
|
get hostElement() { return getElement(this); }
|
|
25324
25957
|
static get watchers() { return {
|
|
@@ -25387,7 +26020,7 @@ class PdsTableHead {
|
|
|
25387
26020
|
}
|
|
25388
26021
|
}
|
|
25389
26022
|
render() {
|
|
25390
|
-
return (hAsync(Host, { key: '
|
|
26023
|
+
return (hAsync(Host, { key: 'de3faae735e90f5fde1258b5acb826f5f9dbd170', role: "row", part: "head" }, this.tableRef && this.tableRef.selectable && (hAsync("pds-table-head-cell", { key: 'e590e57c8b37ec0ad18e96077401c4692bbd45a4', part: this.tableRef.selectable ? 'checkbox-cell' : '' }, !this.tableRef.disableSelectAll && (hAsync("pds-checkbox", { key: '44ca7eda63185672939909e121a86e6502080a7d', componentId: this.generateUniqueId(), indeterminate: this.indeterminate, onInput: this.handleInput, label: "Select All Rows", hideLabel: true, checked: this.isSelected, part: "select-all-checkbox" })))), hAsync("slot", { key: '0671df85d7989cff7266bfd3d1b4d62b332d2e81' })));
|
|
25391
26024
|
}
|
|
25392
26025
|
get hostElement() { return getElement(this); }
|
|
25393
26026
|
static get style() { return pdsTableHeadCss(); }
|
|
@@ -25608,11 +26241,11 @@ class PdsTableHeadCell {
|
|
|
25608
26241
|
return classNames.join(' ');
|
|
25609
26242
|
}
|
|
25610
26243
|
render() {
|
|
25611
|
-
return (hAsync(Host, { key: '
|
|
26244
|
+
return (hAsync(Host, { key: '13de42d136c5b037cd1545cd5b789b4660e23b87', class: this.classNames(), role: "columnheader", onClick: this.toggleSort, part: "head-cell", style: this.tableRef &&
|
|
25612
26245
|
this.tableRef.fixedColumn &&
|
|
25613
26246
|
this.tableRef.selectable
|
|
25614
26247
|
? { '--fixed-cell-position': '40px' }
|
|
25615
|
-
: {} }, hAsync("slot", { key: '
|
|
26248
|
+
: {} }, hAsync("slot", { key: '96084d87a34d7b601a8e8325f344f1fe6601204e' }), this.sortable && this.isActive && (hAsync("pds-icon", { key: 'cba838fa029b280561676c2b57af7f8f00055511', icon: this.sortingDirection === 'asc' ? upSmall : downSmall, part: "sort-icon" }))));
|
|
25616
26249
|
}
|
|
25617
26250
|
get hostElement() { return getElement(this); }
|
|
25618
26251
|
static get style() { return pdsTableHeadCellCss(); }
|
|
@@ -25778,7 +26411,7 @@ class PdsTableRow {
|
|
|
25778
26411
|
}
|
|
25779
26412
|
}
|
|
25780
26413
|
render() {
|
|
25781
|
-
return (hAsync(Host, { key: '
|
|
26414
|
+
return (hAsync(Host, { key: '5323521abc5c2464299cf77520fb38ec81297866', class: this.classNames(), role: "row", part: "row" }, this.tableRef && this.tableRef.selectable && (hAsync("pds-table-cell", { key: 'eb94dd282f885d3466b6177b2454cbcc4f932466', part: this.tableRef.fixedColumn ? 'checkbox-cell' : 'checkbox-cell', class: this.tableRef.selectable ? 'has-checkbox' : '' }, hAsync("pds-checkbox", { key: '222eaaedd4bebddc18cebf01bf4da81004773a96', componentId: this.generateUniqueId(), onPdsCheckboxChange: this.handleCheckboxChange, indeterminate: this.indeterminate, label: "Select Row", hideLabel: true, checked: this.isSelected, part: "row-checkbox" }))), hAsync("slot", { key: '010f222fa02b1809ff818f7a030c2a12fc3e3abb' })));
|
|
25782
26415
|
}
|
|
25783
26416
|
get hostElement() { return getElement(this); }
|
|
25784
26417
|
static get style() { return pdsTableRowCss(); }
|
|
@@ -25805,6 +26438,7 @@ const pdsTabpanelCss = () => `:host{display:block}:host(.pds-tabpanel--stretch-a
|
|
|
25805
26438
|
class PdsTabpanel {
|
|
25806
26439
|
constructor(hostRef) {
|
|
25807
26440
|
registerInstance(this, hostRef);
|
|
26441
|
+
this.hostKeeper = new HostStylingKeeper();
|
|
25808
26442
|
/**
|
|
25809
26443
|
* Keeps track of the tabpanel selected state, this property is passed by parent component
|
|
25810
26444
|
*/
|
|
@@ -25816,12 +26450,22 @@ class PdsTabpanel {
|
|
|
25816
26450
|
/** @internal */
|
|
25817
26451
|
this.stretch = false;
|
|
25818
26452
|
}
|
|
26453
|
+
connectedCallback() {
|
|
26454
|
+
this.hostKeeper.connect(this.el);
|
|
26455
|
+
}
|
|
26456
|
+
disconnectedCallback() {
|
|
26457
|
+
this.hostKeeper.disconnect();
|
|
26458
|
+
}
|
|
25819
26459
|
// Unwraps a nested .pds-tabpanel left by a page-cache (Turbo, bfcache) reconnect.
|
|
25820
26460
|
componentDidRender() {
|
|
25821
26461
|
unwrapReconnectedContent(this.el.querySelector('.pds-tabpanel'), '.pds-tabpanel');
|
|
25822
26462
|
}
|
|
25823
26463
|
render() {
|
|
25824
|
-
|
|
26464
|
+
const hostClass = this.stretch && this.selected ? "pds-tabpanel--stretch-active" : "";
|
|
26465
|
+
// The docs show consumers omitting `slot`, so server HTML doesn't carry it — a DOM morph
|
|
26466
|
+
// that strips it (and the stretch-active class) leaves this panel unslotted. Put both back.
|
|
26467
|
+
this.hostKeeper.record(hostClass, {}, { slot: 'tabpanels' });
|
|
26468
|
+
return (hAsync(Host, { key: '5d867e31d0f5f14e18f1c81035991c90bb5fe529', slot: "tabpanels", class: hostClass || undefined }, hAsync("div", { key: '255d37a73089904cfb170cd89f7b829756f6295f', role: "tabpanel", id: this.parentComponentId + "__" + this.name + '-panel', tabindex: "0", "aria-labelledby": this.parentComponentId + "__" + this.name, class: this.selected ? "pds-tabpanel is-active" : "pds-tabpanel" }, hAsync("slot", { key: '714d3d0cf0fc6173e243a2b077d9b9918ae4acf9' }))));
|
|
25825
26469
|
}
|
|
25826
26470
|
get el() { return getElement(this); }
|
|
25827
26471
|
static get style() { return pdsTabpanelCss(); }
|
|
@@ -25852,6 +26496,35 @@ class PdsTabs {
|
|
|
25852
26496
|
constructor(hostRef) {
|
|
25853
26497
|
registerInstance(this, hostRef);
|
|
25854
26498
|
this.hostKeeper = new HostStylingKeeper();
|
|
26499
|
+
this.slotChangeScheduled = false;
|
|
26500
|
+
// The tab that most recently had focus, tracked continuously via `focusin` rather
|
|
26501
|
+
// than sampled inside handleSlotChange: removing a focused element blurs it to
|
|
26502
|
+
// <body> synchronously, but slotchange only fires later (a microtask checkpoint),
|
|
26503
|
+
// by which point the sample would already read <body>.
|
|
26504
|
+
this.lastFocusedTab = null;
|
|
26505
|
+
this.handleFocusIn = (event) => {
|
|
26506
|
+
var _a;
|
|
26507
|
+
const tab = (_a = event.target) === null || _a === void 0 ? void 0 : _a.closest('pds-tab');
|
|
26508
|
+
if (tab && tab.closest('pds-tabs') === this.el) {
|
|
26509
|
+
this.lastFocusedTab = tab;
|
|
26510
|
+
}
|
|
26511
|
+
};
|
|
26512
|
+
// Focus that leaves a tab forgets it, so replacing the tab later doesn't pull focus back,
|
|
26513
|
+
// including focus that moves into a panel. Focus moving to another tab is tracked again
|
|
26514
|
+
// by focusin, which follows focusout. Removing a focused tab also fires focusout (with no
|
|
26515
|
+
// relatedTarget), while the tab is still connected, so that case is checked a microtask
|
|
26516
|
+
// later: a tab that's gone by then was removed, and is kept so its focus can be restored.
|
|
26517
|
+
this.handleFocusOut = (event) => {
|
|
26518
|
+
const tab = this.lastFocusedTab;
|
|
26519
|
+
if (event.relatedTarget) {
|
|
26520
|
+
this.lastFocusedTab = null;
|
|
26521
|
+
return;
|
|
26522
|
+
}
|
|
26523
|
+
queueMicrotask(() => {
|
|
26524
|
+
if (this.lastFocusedTab === tab && (tab === null || tab === void 0 ? void 0 : tab.isConnected))
|
|
26525
|
+
this.lastFocusedTab = null;
|
|
26526
|
+
});
|
|
26527
|
+
};
|
|
25855
26528
|
/**
|
|
25856
26529
|
* Adds a divider rule beneath the tab list.
|
|
25857
26530
|
* @defaultValue false
|
|
@@ -25871,12 +26544,44 @@ class PdsTabs {
|
|
|
25871
26544
|
* @defaultValue false
|
|
25872
26545
|
*/
|
|
25873
26546
|
this.nav = false;
|
|
26547
|
+
// The tabs and tabpanels slots fire slotchange separately, even for the same morph
|
|
26548
|
+
// (both swapped together). Coalesce same-tick firings into one re-collection pass
|
|
26549
|
+
// with a microtask, the way a single DOM mutation already only triggers one event.
|
|
26550
|
+
this.handleSlotChange = () => {
|
|
26551
|
+
if (this.slotChangeScheduled)
|
|
26552
|
+
return;
|
|
26553
|
+
this.slotChangeScheduled = true;
|
|
26554
|
+
this.activeTabNameBeforeSlotChange = this.activeTabName;
|
|
26555
|
+
queueMicrotask(() => {
|
|
26556
|
+
this.slotChangeScheduled = false;
|
|
26557
|
+
this.recollectAfterSlotChange();
|
|
26558
|
+
});
|
|
26559
|
+
};
|
|
25874
26560
|
}
|
|
25875
26561
|
connectedCallback() {
|
|
25876
26562
|
this.hostKeeper.connect(this.el);
|
|
26563
|
+
this.el.addEventListener('focusin', this.handleFocusIn);
|
|
26564
|
+
this.el.addEventListener('focusout', this.handleFocusOut);
|
|
26565
|
+
// componentDidLoad only runs once, so a reconnect (the element moved in the DOM) re-attaches
|
|
26566
|
+
// the slotchange listeners disconnectedCallback removed. Before the first render the slots
|
|
26567
|
+
// don't exist yet, so this is a no-op and componentDidLoad attaches them.
|
|
26568
|
+
const isReconnect = this.tabsSlot != null;
|
|
26569
|
+
this.setupSlotChangeListeners();
|
|
26570
|
+
// Content can change while detached, with no listener to see it — re-collect now
|
|
26571
|
+
// instead of waiting on a slotchange that may never come if nothing changes again.
|
|
26572
|
+
if (isReconnect)
|
|
26573
|
+
this.handleSlotChange();
|
|
25877
26574
|
}
|
|
25878
26575
|
disconnectedCallback() {
|
|
26576
|
+
var _a, _b;
|
|
25879
26577
|
this.hostKeeper.disconnect();
|
|
26578
|
+
this.el.removeEventListener('focusin', this.handleFocusIn);
|
|
26579
|
+
this.el.removeEventListener('focusout', this.handleFocusOut);
|
|
26580
|
+
(_a = this.tabsSlot) === null || _a === void 0 ? void 0 : _a.removeEventListener('slotchange', this.handleSlotChange);
|
|
26581
|
+
(_b = this.tabPanelsSlot) === null || _b === void 0 ? void 0 : _b.removeEventListener('slotchange', this.handleSlotChange);
|
|
26582
|
+
}
|
|
26583
|
+
componentDidLoad() {
|
|
26584
|
+
this.setupSlotChangeListeners();
|
|
25880
26585
|
}
|
|
25881
26586
|
tabClickHandler(event) {
|
|
25882
26587
|
if (this.componentId === event.detail[1]) {
|
|
@@ -25904,8 +26609,8 @@ class PdsTabs {
|
|
|
25904
26609
|
// Navigation mode is an explicit, single source of truth: `nav` drives both the
|
|
25905
26610
|
// container (<nav> of links vs role=tablist of buttons) and every child tab (via
|
|
25906
26611
|
// `navMode`), so the tabs present when the strip initializes can't mix the two.
|
|
25907
|
-
//
|
|
25908
|
-
//
|
|
26612
|
+
// Unlike child discovery (re-run on slotchange), `nav` itself isn't watched — it's
|
|
26613
|
+
// a load-time mode switch, not something a consumer is expected to toggle live.
|
|
25909
26614
|
get isNav() {
|
|
25910
26615
|
return !!this.nav;
|
|
25911
26616
|
}
|
|
@@ -25958,9 +26663,52 @@ class PdsTabs {
|
|
|
25958
26663
|
this.tabs = allTabs.filter(tab => tab.closest('pds-tabs') === this.el);
|
|
25959
26664
|
this.tabPanels = allTabPanels.filter(panel => panel.closest('pds-tabs') === this.el);
|
|
25960
26665
|
}
|
|
26666
|
+
// The initial collection (componentWillLoad) only sees tabs/panels present at load.
|
|
26667
|
+
// A tab or panel added, removed or replaced afterwards — including by a DOM morph
|
|
26668
|
+
// swapping in a fresh copy — needs to be re-collected the same way pds-dropdown-menu,
|
|
26669
|
+
// pds-select and pds-multiselect already do for their own slotted content.
|
|
26670
|
+
setupSlotChangeListeners() {
|
|
26671
|
+
var _a, _b, _c, _d;
|
|
26672
|
+
this.tabsSlot = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('slot[name="tabs"]');
|
|
26673
|
+
this.tabPanelsSlot = (_b = this.el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="tabpanels"]');
|
|
26674
|
+
(_c = this.tabsSlot) === null || _c === void 0 ? void 0 : _c.addEventListener('slotchange', this.handleSlotChange);
|
|
26675
|
+
(_d = this.tabPanelsSlot) === null || _d === void 0 ? void 0 : _d.addEventListener('slotchange', this.handleSlotChange);
|
|
26676
|
+
}
|
|
26677
|
+
recollectAfterSlotChange() {
|
|
26678
|
+
const previousActiveTabName = this.activeTabNameBeforeSlotChange;
|
|
26679
|
+
// A removed node stays referenced but disconnected — checked before
|
|
26680
|
+
// findAllChildren() re-collects, since that doesn't affect this either way.
|
|
26681
|
+
const focusedTabWasRemoved = !this.isNav && this.lastFocusedTab != null && !this.lastFocusedTab.isConnected;
|
|
26682
|
+
this.findAllChildren();
|
|
26683
|
+
this.warnOnNavConfig();
|
|
26684
|
+
// Keep the current selection if it still exists. Otherwise clear it so
|
|
26685
|
+
// passPropsToChildren() falls back to the first enabled tab, the same way
|
|
26686
|
+
// it does when a consumer never set activeTabName in the first place.
|
|
26687
|
+
if (previousActiveTabName != null && !this.tabs.some((tab) => tab.name === previousActiveTabName)) {
|
|
26688
|
+
this.activeTabName = undefined;
|
|
26689
|
+
}
|
|
26690
|
+
this.passPropsToChildren();
|
|
26691
|
+
// If the tab that last had focus was removed (e.g. replaced by a fresh copy),
|
|
26692
|
+
// the browser already silently dropped focus to <body> — restore it to the new
|
|
26693
|
+
// active tab's button so keyboard/screen-reader users don't lose their place.
|
|
26694
|
+
// Deferred a frame since a freshly-created pds-tab's button doesn't exist until
|
|
26695
|
+
// its own render completes; re-checked then in case focus moved on its own, to
|
|
26696
|
+
// the tabs or anywhere else — only focus the removal dropped to <body> is restored.
|
|
26697
|
+
if (focusedTabWasRemoved) {
|
|
26698
|
+
this.lastFocusedTab = null;
|
|
26699
|
+
requestAnimationFrame(() => {
|
|
26700
|
+
var _a;
|
|
26701
|
+
const active = document.activeElement;
|
|
26702
|
+
if (active && active !== document.body)
|
|
26703
|
+
return;
|
|
26704
|
+
const newActiveTab = this.tabs.find((tab) => tab.name === this.activeTabName);
|
|
26705
|
+
(_a = newActiveTab === null || newActiveTab === void 0 ? void 0 : newActiveTab.querySelector('button')) === null || _a === void 0 ? void 0 : _a.focus();
|
|
26706
|
+
});
|
|
26707
|
+
}
|
|
26708
|
+
}
|
|
25961
26709
|
propGeneration(child, index = 0) {
|
|
25962
26710
|
child.parentComponentId = this.componentId.toString();
|
|
25963
|
-
child.variant = this.variant
|
|
26711
|
+
child.variant = this.variant;
|
|
25964
26712
|
child.selected = (this.activeTabName === child.name) ? true : false;
|
|
25965
26713
|
child['index'] = index;
|
|
25966
26714
|
}
|
|
@@ -26016,7 +26764,7 @@ class PdsTabs {
|
|
|
26016
26764
|
// Only the classes: `active-tab-name` backs the mutable activeTabName prop, so a morph that drops
|
|
26017
26765
|
// it is a prop change, not a strip.
|
|
26018
26766
|
this.hostKeeper.record(hostClass);
|
|
26019
|
-
return (hAsync(Host, { key: '
|
|
26767
|
+
return (hAsync(Host, { key: '91a9a5cf4348b73ef5ec21430db20468fb67906c', "active-tab-name": this.activeTabName, class: hostClass, id: this.componentId }, tabList, hAsync("slot", { key: 'f0ec002e513f3e91956e905c23e35dae0e6328ad', name: "tabpanels" })));
|
|
26020
26768
|
}
|
|
26021
26769
|
get el() { return getElement(this); }
|
|
26022
26770
|
static get style() { return pdsTabsCss(); }
|
|
@@ -26142,7 +26890,7 @@ class PdsText {
|
|
|
26142
26890
|
? `pds-text--decoration-${this.decoration}`
|
|
26143
26891
|
: ''}
|
|
26144
26892
|
`;
|
|
26145
|
-
return (hAsync(Tag, { key: '
|
|
26893
|
+
return (hAsync(Tag, { key: '6ae89af63963745cd4e8fa734a62f37bc27c59ac', ref: (el) => (this.contentEl = el), style: this.color && setColor(this.color), class: typeClasses, part: "content" }, hAsync("slot", { key: '008f5852aeb4b43cff1a2fea9be9d8fbba9f7934' })));
|
|
26146
26894
|
}
|
|
26147
26895
|
get el() { return getElement(this); }
|
|
26148
26896
|
static get watchers() { return {
|
|
@@ -26488,10 +27236,10 @@ class PdsTextarea {
|
|
|
26488
27236
|
}
|
|
26489
27237
|
render() {
|
|
26490
27238
|
const value = this.getValue();
|
|
26491
|
-
return (hAsync(Host, { key: '
|
|
26492
|
-
hAsync("div", { key: '
|
|
26493
|
-
hAsync("p", { key: '
|
|
26494
|
-
hAsync("p", { key: '
|
|
27239
|
+
return (hAsync(Host, { key: '5933dab0c3cd25b1cf2f6851ece8e8064bc7f3b9', "aria-disabled": this.disabled ? 'true' : null, "aria-readonly": this.readonly ? 'true' : null, "has-action": this.hasAction && !this.hideLabel ? 'true' : null }, hAsync("div", { key: '4f1752514d8e5b0f0e3439515cb9e5f043607da1', class: "pds-textarea" }, this.label &&
|
|
27240
|
+
hAsync("div", { key: 'd4e6df0b381d781b70eeae72ff2f0e9428c0d901', class: "pds-textarea__label-wrapper" }, hAsync("label", { key: '747d82067eb571d02840cfd981865821099f288b', htmlFor: this.componentId }, hAsync("span", { key: 'bfab6e8ede66d0169dd020b7dd97e125aba417b0', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), !this.hideLabel && this.renderAction()), hAsync("div", { key: 'a18611c03270e7491c1af69f931419c832192c06', class: "pds-textarea__field-wrapper" }, hAsync("textarea", Object.assign({ key: '868382c7b04a4e59c0daa9d98afcdc9048f6224f', ref: (el) => this.nativeTextarea = el, "aria-describedby": assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, autocomplete: this.autocomplete, class: this.textareaClassNames(), disabled: this.disabled, id: this.componentId, maxlength: this.maxLength, name: this.name, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, rows: this.rows, onBlur: this.onBlur, onChange: this.onTextareaChange, onFocus: this.onFocus, onInput: this.onInput, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value), this.renderCharacterCounter()), this.helperMessage &&
|
|
27241
|
+
hAsync("p", { key: 'dcb36f21443d2a782c25b7c29c4ce6215f3b212b', class: "pds-textarea__helper-message", id: messageId(this.componentId, 'helper') }, this.helperMessage), this.invalid &&
|
|
27242
|
+
hAsync("p", { key: 'be30fb1a38453296e26b775955389c0ec569df67', "aria-live": "assertive", class: "pds-textarea__error-message", id: messageId(this.componentId, 'error') }, hAsync("pds-icon", { key: 'd93dce10d9d9db5815ac5f331848940aed735ba0', icon: danger, size: "small" }), this.errorMessage))));
|
|
26495
27243
|
}
|
|
26496
27244
|
static get formAssociated() { return true; }
|
|
26497
27245
|
get el() { return getElement(this); }
|
|
@@ -26665,13 +27413,13 @@ class PdsToast {
|
|
|
26665
27413
|
return this.icon && hAsync("pds-icon", { name: this.icon, class: "pds-toast__icon" });
|
|
26666
27414
|
}
|
|
26667
27415
|
render() {
|
|
26668
|
-
return (hAsync(Host, { key: '
|
|
27416
|
+
return (hAsync(Host, { key: '754a4583cefca47a3d3fea7dab036c06ea8aabcd', hidden: !this.isVisible }, hAsync("div", { key: '8ac294344ca459202c0883e724e09a4218342cc4', class: {
|
|
26669
27417
|
'pds-toast': true,
|
|
26670
27418
|
[`pds-toast--${this.type}`]: this.type !== 'default',
|
|
26671
27419
|
'pds-toast--animating-out': this.isAnimatingOut
|
|
26672
|
-
}, role: "alert", "aria-live": "polite" }, this.renderIcon(), hAsync("span", { key: '
|
|
27420
|
+
}, role: "alert", "aria-live": "polite" }, this.renderIcon(), hAsync("span", { key: 'eaf615d41c138e2c73088d29bac9349f49a63ba7', class: "pds-toast__message" }, hAsync("slot", { key: '33973447154d80b016f5a7954b0473db03228379' })), this.dismissible && (hAsync("button", { key: 'e189834633e1e648282ee43633fd05e53ce38869', type: "button", part: "dismiss", class: "pds-toast__button", onClick: () => {
|
|
26673
27421
|
this.dismiss();
|
|
26674
|
-
}, "aria-label": this.dismissLabel }, hAsync("pds-icon", { key: '
|
|
27422
|
+
}, "aria-label": this.dismissLabel }, hAsync("pds-icon", { key: '623a0e4d56e30781fb31bcd085511c17a4777edc', name: "remove" }))))));
|
|
26675
27423
|
}
|
|
26676
27424
|
get el() { return getElement(this); }
|
|
26677
27425
|
static get watchers() { return {
|
|
@@ -27046,9 +27794,9 @@ class PdsTooltip {
|
|
|
27046
27794
|
}
|
|
27047
27795
|
render() {
|
|
27048
27796
|
const hostId = this.componentId || undefined;
|
|
27049
|
-
return (hAsync(Host, { key: '
|
|
27797
|
+
return (hAsync(Host, { key: '2e28dff93cd22fd3816d71b67e38883061a8b2bc', id: hostId, class: { 'pds-tooltip--is-open': this.opened } }, hAsync("span", { key: '9e7ea50427587f61dcea1ea97e10d71f4d0c9d92', class: "pds-tooltip__trigger", onMouseEnter: this.handleShow, onMouseLeave: this.handleHide,
|
|
27050
27798
|
/* focusin/out bubble; ensure keyboard users see tooltips */
|
|
27051
|
-
onFocusin: this.handleShow, onFocusout: this.handleHide, ref: el => this.triggerEl = el }, hAsync("slot", { key: '
|
|
27799
|
+
onFocusin: this.handleShow, onFocusout: this.handleHide, ref: el => this.triggerEl = el }, hAsync("slot", { key: '08c1ff63c91b97b4df1362eb9b2e42b6fd556b11' })), hAsync("div", { key: '5cfe25e21d1f096b76335570fbb930a7bc8c95f8', class: "pds-tooltip__content-slot-wrapper", hidden: true }, hAsync("slot", { key: 'e7e8728d7c8a0c74933cef070aa38f88a1f53a32', name: "content" }))));
|
|
27052
27800
|
}
|
|
27053
27801
|
get el() { return getElement(this); }
|
|
27054
27802
|
static get watchers() { return {
|