@pine-ds/core 4.11.0 → 4.12.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/aria-references.js +1 -0
- package/components/attributes.js +1 -1
- package/components/index2.js +1 -1
- package/components/pds-alert.js +1 -1
- package/components/pds-avatar.js +1 -1
- package/components/pds-box2.js +1 -1
- package/components/pds-button2.js +1 -1
- package/components/pds-checkbox2.js +1 -1
- package/components/pds-chip2.js +1 -1
- package/components/pds-combobox.js +2 -2
- package/components/pds-copytext.js +1 -1
- package/components/pds-datepicker.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-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-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-radio-group.js +1 -1
- package/components/pds-radio.js +1 -1
- package/components/pds-select.js +1 -1
- package/components/pds-sortable-item.js +1 -1
- package/components/pds-sortable.js +2 -2
- package/components/pds-switch.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-table.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/components/sortable-label.js +1 -0
- package/components/truncation-tooltip.js +1 -1
- package/dist/cjs/aria-references-CUmqibnO.js +54 -0
- package/dist/cjs/{attributes-CW49XqaL.js → attributes-Cgbkw6gO.js} +3 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/pds-alert.cjs.entry.js +2 -2
- package/dist/cjs/pds-avatar.cjs.entry.js +3 -2
- package/dist/cjs/pds-box.cjs.entry.js +4 -3
- package/dist/cjs/pds-button.cjs.entry.js +25 -45
- package/dist/cjs/pds-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/pds-chip.cjs.entry.js +3 -3
- package/dist/cjs/pds-combobox.cjs.entry.js +246 -106
- package/dist/cjs/pds-copytext.cjs.entry.js +3 -3
- package/dist/cjs/pds-datepicker.cjs.entry.js +44 -9
- package/dist/cjs/pds-drawer-content.cjs.entry.js +1 -1
- package/dist/cjs/pds-drawer-footer.cjs.entry.js +1 -1
- package/dist/cjs/pds-drawer-header.cjs.entry.js +1 -1
- package/dist/cjs/pds-drawer.cjs.entry.js +5 -7
- package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +85 -49
- package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +2 -2
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js +83 -10
- package/dist/cjs/pds-filter.cjs.entry.js +24 -2
- package/dist/cjs/pds-image.cjs.entry.js +148 -6
- package/dist/cjs/pds-input.cjs.entry.js +4 -4
- package/dist/cjs/pds-link.cjs.entry.js +4 -5
- package/dist/cjs/pds-loader.cjs.entry.js +4 -3
- package/dist/cjs/pds-modal-footer.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-header.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal.cjs.entry.js +9 -12
- package/dist/cjs/pds-multiselect.cjs.entry.js +64 -18
- package/dist/cjs/pds-popover.cjs.entry.js +8 -6
- package/dist/cjs/pds-progress.cjs.entry.js +3 -3
- package/dist/cjs/pds-radio-group.cjs.entry.js +4 -4
- package/dist/cjs/pds-radio.cjs.entry.js +6 -6
- package/dist/cjs/pds-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-select.cjs.entry.js +2 -2
- package/dist/cjs/pds-sortable-item.cjs.entry.js +28 -5
- package/dist/cjs/pds-sortable.cjs.entry.js +356 -4
- package/dist/cjs/pds-switch.cjs.entry.js +92 -15
- package/dist/cjs/pds-tab.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-cell.cjs.entry.js +24 -5
- package/dist/cjs/pds-table-head-cell.cjs.entry.js +59 -11
- package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-table.cjs.entry.js +260 -5
- package/dist/cjs/pds-tabpanel.cjs.entry.js +1 -1
- package/dist/cjs/pds-tabs.cjs.entry.js +3 -3
- package/dist/cjs/pds-text.cjs.entry.js +5 -3
- package/dist/cjs/pds-textarea.cjs.entry.js +8 -7
- package/dist/cjs/pds-toast.cjs.entry.js +8 -4
- package/dist/cjs/pds-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/pine-core.cjs.js +1 -1
- package/dist/cjs/sortable-label-DOcJrHvA.js +37 -0
- package/dist/cjs/{truncation-tooltip-Bikp7n9I.js → truncation-tooltip-CM5HgRHh.js} +69 -0
- package/dist/collection/components/pds-alert/pds-alert.css +0 -3
- package/dist/collection/components/pds-alert/pds-alert.js +3 -2
- package/dist/collection/components/pds-avatar/pds-avatar.js +7 -6
- package/dist/collection/components/pds-avatar/stories/pds-avatar.stories.js +1 -1
- package/dist/collection/components/pds-box/pds-box.css +1273 -1189
- package/dist/collection/components/pds-box/pds-box.js +180 -156
- package/dist/collection/components/pds-box/stories/pds-box.stories.js +79 -37
- package/dist/collection/components/pds-button/pds-button.js +26 -4
- package/dist/collection/components/pds-button/stories/pds-button.stories.js +25 -11
- package/dist/collection/components/pds-checkbox/pds-checkbox.js +10 -10
- package/dist/collection/components/pds-chip/pds-chip.js +3 -3
- package/dist/collection/components/pds-combobox/pds-combobox.css +162 -53
- package/dist/collection/components/pds-combobox/pds-combobox.js +261 -121
- package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +35 -4
- package/dist/collection/components/pds-copytext/pds-copytext.js +2 -2
- package/dist/collection/components/pds-datepicker/pds-datepicker.js +3 -3
- package/dist/collection/components/pds-datepicker/presets.js +42 -7
- package/dist/collection/components/pds-drawer/pds-drawer-content/pds-drawer-content.js +2 -5
- package/dist/collection/components/pds-drawer/pds-drawer-footer/pds-drawer-footer.js +2 -1
- package/dist/collection/components/pds-drawer/pds-drawer-header/pds-drawer-header.js +2 -1
- package/dist/collection/components/pds-drawer/pds-drawer.js +8 -10
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.css +17 -8
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +95 -62
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.js +3 -3
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.css +2 -0
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +84 -9
- package/dist/collection/components/pds-dropdown-menu/stories/pds-dropdown-menu.stories.js +24 -1
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.css +2 -1
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +24 -7
- package/dist/collection/components/pds-image/image-interface.js +1 -0
- package/dist/collection/components/pds-image/pds-image.css +11 -0
- package/dist/collection/components/pds-image/pds-image.js +249 -8
- package/dist/collection/components/pds-image/stories/pds-image.stories.js +117 -1
- package/dist/collection/components/pds-input/pds-input.js +14 -9
- package/dist/collection/components/pds-link/pds-link.js +10 -14
- package/dist/collection/components/pds-link/stories/pds-link.stories.js +6 -2
- package/dist/collection/components/pds-loader/pds-loader.js +5 -4
- package/dist/collection/components/pds-modal/pds-modal-footer/pds-modal-footer.js +2 -1
- package/dist/collection/components/pds-modal/pds-modal-header/pds-modal-header.js +2 -1
- package/dist/collection/components/pds-modal/pds-modal.js +11 -13
- package/dist/collection/components/pds-modal/stories/pds-modal.stories.js +7 -7
- package/dist/collection/components/pds-multiselect/pds-multiselect.css +2 -2
- package/dist/collection/components/pds-multiselect/pds-multiselect.js +63 -18
- package/dist/collection/components/pds-popover/pds-popover.css +1 -1
- package/dist/collection/components/pds-popover/pds-popover.js +9 -7
- package/dist/collection/components/pds-progress/pds-progress.js +4 -4
- package/dist/collection/components/pds-radio/pds-radio.css +5 -1
- package/dist/collection/components/pds-radio/pds-radio.js +9 -9
- package/dist/collection/components/pds-radio/stories/pds-radio.stories.js +9 -9
- package/dist/collection/components/pds-radio-group/pds-radio-group.js +7 -7
- package/dist/collection/components/pds-radio-group/stories/pds-radio-group.stories.js +3 -3
- package/dist/collection/components/pds-row/stories/pds-row.stories.js +15 -14
- package/dist/collection/components/pds-select/pds-select.js +7 -4
- package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.css +38 -0
- package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.js +47 -5
- package/dist/collection/components/pds-sortable/pds-sortable.js +481 -5
- package/dist/collection/components/pds-sortable/sortable-label.js +33 -0
- package/dist/collection/components/pds-sortable/stories/pds-sortable.stories.js +27 -0
- package/dist/collection/components/pds-switch/pds-switch.js +114 -17
- package/dist/collection/components/pds-switch/stories/pds-switch.stories.js +79 -0
- package/dist/collection/components/pds-table/pds-table-body/pds-table-body.js +4 -1
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +47 -4
- package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +6 -2
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.css +11 -0
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +98 -10
- package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +5 -1
- package/dist/collection/components/pds-table/pds-table.css +8 -0
- package/dist/collection/components/pds-table/pds-table.js +295 -7
- package/dist/collection/components/pds-table/stories/pds-table.stories.js +131 -6
- package/dist/collection/components/pds-tabs/pds-tabs.js +3 -3
- package/dist/collection/components/pds-tabs/stories/pds-tabs.stories.js +1 -1
- package/dist/collection/components/pds-text/pds-text.js +5 -3
- package/dist/collection/components/pds-textarea/pds-textarea.js +16 -14
- package/dist/collection/components/pds-textarea/stories/pds-textarea.stories.js +2 -13
- package/dist/collection/components/pds-toast/pds-toast.css +4 -3
- package/dist/collection/components/pds-toast/pds-toast.js +9 -5
- package/dist/collection/components/pds-toast/stories/pds-toast.stories.js +2 -2
- package/dist/collection/components/pds-tooltip/pds-tooltip.css +2 -1
- package/dist/collection/components/pds-tooltip/stories/pds-tooltip.stories.js +17 -17
- package/dist/collection/utils/aria-references.js +9 -3
- package/dist/collection/utils/truncation-tooltip.js +67 -0
- package/dist/docs.json +1124 -374
- package/dist/esm/aria-references-CNn1lObg.js +50 -0
- package/dist/esm/{attributes-DkeVeN0g.js → attributes-CD8knu3a.js} +3 -0
- package/dist/esm/{index-DvN3tyZp.js → index-B0DXTeeV.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/pds-accordion.entry.js +1 -1
- package/dist/esm/pds-alert.entry.js +2 -2
- package/dist/esm/pds-avatar.entry.js +4 -3
- package/dist/esm/pds-box.entry.js +4 -3
- package/dist/esm/pds-button.entry.js +24 -44
- package/dist/esm/pds-checkbox.entry.js +5 -5
- package/dist/esm/pds-chip.entry.js +4 -4
- package/dist/esm/pds-combobox.entry.js +246 -106
- package/dist/esm/pds-copytext.entry.js +4 -4
- package/dist/esm/pds-datepicker.entry.js +45 -10
- package/dist/esm/pds-drawer-content.entry.js +1 -1
- package/dist/esm/pds-drawer-footer.entry.js +1 -1
- package/dist/esm/pds-drawer-header.entry.js +1 -1
- package/dist/esm/pds-drawer.entry.js +5 -7
- package/dist/esm/pds-dropdown-menu-item.entry.js +85 -49
- package/dist/esm/pds-dropdown-menu-separator.entry.js +2 -2
- package/dist/esm/pds-dropdown-menu.entry.js +84 -11
- package/dist/esm/pds-filter.entry.js +25 -3
- package/dist/esm/pds-image.entry.js +149 -7
- package/dist/esm/pds-input.entry.js +5 -5
- package/dist/esm/pds-link.entry.js +5 -6
- package/dist/esm/pds-loader.entry.js +4 -3
- package/dist/esm/pds-modal-footer.entry.js +1 -1
- package/dist/esm/pds-modal-header.entry.js +1 -1
- package/dist/esm/pds-modal.entry.js +9 -12
- package/dist/esm/pds-multiselect.entry.js +65 -19
- package/dist/esm/pds-popover.entry.js +8 -6
- package/dist/esm/pds-progress.entry.js +3 -3
- package/dist/esm/pds-radio-group.entry.js +5 -5
- package/dist/esm/pds-radio.entry.js +7 -7
- package/dist/esm/pds-row.entry.js +1 -1
- package/dist/esm/pds-select.entry.js +3 -3
- package/dist/esm/pds-sortable-item.entry.js +29 -6
- package/dist/esm/pds-sortable.entry.js +357 -5
- package/dist/esm/pds-switch.entry.js +94 -17
- package/dist/esm/pds-tab.entry.js +1 -1
- package/dist/esm/pds-table-body.entry.js +1 -1
- package/dist/esm/pds-table-cell.entry.js +24 -5
- package/dist/esm/pds-table-head-cell.entry.js +60 -12
- package/dist/esm/pds-table-head.entry.js +1 -1
- package/dist/esm/pds-table-row.entry.js +1 -1
- package/dist/esm/pds-table.entry.js +261 -6
- package/dist/esm/pds-tabpanel.entry.js +1 -1
- package/dist/esm/pds-tabs.entry.js +3 -3
- package/dist/esm/pds-text.entry.js +5 -3
- package/dist/esm/pds-textarea.entry.js +9 -8
- package/dist/esm/pds-toast.entry.js +8 -4
- package/dist/esm/pds-tooltip.entry.js +1 -1
- package/dist/esm/pine-core.js +1 -1
- package/dist/esm/sortable-label-PItnzVVR.js +35 -0
- package/dist/esm/{truncation-tooltip-DBcPipr9.js → truncation-tooltip-CkIWm6Z-.js} +68 -1
- package/dist/esm-es5/aria-references-CNn1lObg.js +1 -0
- package/dist/esm-es5/{attributes-DkeVeN0g.js → attributes-CD8knu3a.js} +1 -1
- package/dist/esm-es5/{index-DvN3tyZp.js → index-B0DXTeeV.js} +1 -1
- package/dist/esm-es5/loader.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 +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-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-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-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-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/esm-es5/sortable-label-PItnzVVR.js +1 -0
- package/dist/esm-es5/truncation-tooltip-CkIWm6Z-.js +1 -0
- package/dist/pine-core/{p-f834cb07.system.entry.js → p-00891b8d.system.entry.js} +1 -1
- package/dist/pine-core/{p-3f8bd3fb.system.entry.js → p-053ff8eb.system.entry.js} +1 -1
- package/dist/pine-core/p-08b9e3ad.entry.js +1 -0
- package/dist/pine-core/{p-4d98bc0c.system.entry.js → p-0a7570dd.system.entry.js} +1 -1
- package/dist/pine-core/{p-d018dc60.system.entry.js → p-0ac4262e.system.entry.js} +1 -1
- package/dist/pine-core/{p-89d38a82.system.entry.js → p-0e1b8bd1.system.entry.js} +1 -1
- package/dist/pine-core/{p-e1d1b5d8.entry.js → p-12fdc65f.entry.js} +1 -1
- package/dist/pine-core/{p-d48fe5a0.system.entry.js → p-16fceef6.system.entry.js} +1 -1
- package/dist/pine-core/p-1765a41b.system.entry.js +1 -0
- package/dist/pine-core/{p-a594c41f.entry.js → p-18524c25.entry.js} +1 -1
- package/dist/pine-core/p-1a013a5c.system.entry.js +1 -0
- package/dist/pine-core/{p-2b9622c1.system.entry.js → p-1ab52531.system.entry.js} +1 -1
- package/dist/pine-core/p-1c584a20.entry.js +1 -0
- package/dist/pine-core/p-1edef412.entry.js +1 -0
- package/dist/pine-core/{p-5946203c.entry.js → p-1f998e3e.entry.js} +1 -1
- package/dist/pine-core/{p-39e57657.entry.js → p-1fb1ca3d.entry.js} +1 -1
- package/dist/pine-core/p-2b6becc2.entry.js +1 -0
- package/dist/pine-core/p-2cc7c682.entry.js +1 -0
- package/dist/pine-core/{p-639acef8.system.entry.js → p-2ddcd845.system.entry.js} +1 -1
- package/dist/pine-core/{p-6a1aa8d3.entry.js → p-2f15e85f.entry.js} +1 -1
- package/dist/pine-core/{p-67f795d5.system.entry.js → p-33da254f.system.entry.js} +1 -1
- package/dist/pine-core/{p-c6a9e62c.system.entry.js → p-3fc9ef80.system.entry.js} +1 -1
- package/dist/pine-core/p-4125a4a6.system.entry.js +1 -0
- package/dist/pine-core/p-47df9e9f.system.entry.js +3 -0
- package/dist/pine-core/p-51680c9c.system.entry.js +1 -0
- package/dist/pine-core/p-55535481.system.entry.js +1 -0
- package/dist/pine-core/p-55a4659a.system.entry.js +1 -0
- package/dist/pine-core/{p-c5e1eb3c.system.entry.js → p-57af5c29.system.entry.js} +1 -1
- package/dist/pine-core/p-57edd301.system.entry.js +1 -0
- package/dist/pine-core/{p-bfa34194.entry.js → p-5d582798.entry.js} +1 -1
- package/dist/pine-core/p-5db87fda.system.entry.js +1 -0
- package/dist/pine-core/{p-19cf1d91.system.entry.js → p-5eb0c78c.system.entry.js} +1 -1
- package/dist/pine-core/{p-42f70f93.system.entry.js → p-6017afb5.system.entry.js} +1 -1
- package/dist/pine-core/{p-63f85859.system.entry.js → p-60e65fe0.system.entry.js} +1 -1
- package/dist/pine-core/{p-973c3ac0.entry.js → p-627a94da.entry.js} +1 -1
- package/dist/pine-core/{p-a9d96e22.entry.js → p-68328afc.entry.js} +1 -1
- package/dist/pine-core/{p-bd7dc317.system.entry.js → p-72668673.system.entry.js} +1 -1
- package/dist/pine-core/p-72ff5ad2.system.entry.js +1 -0
- package/dist/pine-core/p-736ea7dd.entry.js +7 -0
- package/dist/pine-core/p-765f4207.entry.js +1 -0
- package/dist/pine-core/{p-2a18852f.entry.js → p-77530cf2.entry.js} +1 -1
- package/dist/pine-core/p-77a22399.entry.js +1 -0
- package/dist/pine-core/p-783127bf.entry.js +1 -0
- package/dist/pine-core/{p-d9719e37.entry.js → p-82f7eed1.entry.js} +1 -1
- package/dist/pine-core/{p-124a0a24.entry.js → p-84d4ae26.entry.js} +1 -1
- package/dist/pine-core/p-8deeda07.entry.js +1 -0
- package/dist/pine-core/{p-849ec281.system.entry.js → p-8e17a6d8.system.entry.js} +1 -1
- package/dist/pine-core/p-8e7e7bba.entry.js +1 -0
- package/dist/pine-core/{p-e82f758f.system.entry.js → p-907c69e9.system.entry.js} +1 -1
- package/dist/pine-core/{p-1415c988.system.entry.js → p-90f83a5b.system.entry.js} +1 -1
- package/dist/pine-core/p-97145eee.system.entry.js +1 -0
- package/dist/pine-core/{p-a09c9c5e.system.entry.js → p-9d983e09.system.entry.js} +1 -1
- package/dist/pine-core/{p-1e3ef425.entry.js → p-9e005996.entry.js} +1 -1
- package/dist/pine-core/{p-DvN3tyZp.js → p-B0DXTeeV.js} +1 -1
- package/dist/pine-core/{p-CNXspDYs.system.js → p-BlJQebvG.system.js} +1 -1
- package/dist/pine-core/p-C35-349-.system.js +1 -0
- package/dist/pine-core/{p-vFsJv75D.system.js → p-CIe1DGXa.system.js} +1 -1
- package/dist/pine-core/p-CNn1lObg.js +1 -0
- package/dist/pine-core/p-CQJ44c6o.system.js +1 -0
- package/dist/pine-core/p-Dv9QBmIF.js +1 -0
- package/dist/pine-core/p-PItnzVVR.js +1 -0
- package/dist/pine-core/p-VPGVqK3P.system.js +1 -0
- package/dist/pine-core/p-XK45dzWR.system.js +1 -1
- package/dist/pine-core/p-a149af29.entry.js +1 -0
- package/dist/pine-core/p-a20d9eca.system.entry.js +1 -0
- package/dist/pine-core/{p-f6f4fd42.entry.js → p-a5782d99.entry.js} +1 -1
- package/dist/pine-core/p-a5e9c583.entry.js +1 -0
- package/dist/pine-core/{p-4d47023c.system.entry.js → p-a9eaf160.system.entry.js} +1 -1
- package/dist/pine-core/{p-143b33a6.entry.js → p-b00b07e3.entry.js} +1 -1
- package/dist/pine-core/{p-c7a53c4f.entry.js → p-b7b29392.entry.js} +1 -1
- package/dist/pine-core/p-b96bdff6.entry.js +1 -0
- package/dist/pine-core/{p-f71d71ca.entry.js → p-bbd9ab75.entry.js} +1 -1
- package/dist/pine-core/p-bdab6c9f.entry.js +1 -0
- package/dist/pine-core/p-biShcgLI.js +1 -0
- package/dist/pine-core/{p-548bce53.system.entry.js → p-c12b5cd7.system.entry.js} +1 -1
- package/dist/pine-core/p-c1dc7692.entry.js +1 -0
- package/dist/pine-core/p-c76d8b9e.system.entry.js +1 -0
- package/dist/pine-core/{p-590df41a.entry.js → p-c89ea2d3.entry.js} +1 -1
- package/dist/pine-core/{p-d920d759.system.entry.js → p-c9630934.system.entry.js} +1 -1
- package/dist/pine-core/{p-6f4ab1ea.system.entry.js → p-cb9227f6.system.entry.js} +1 -1
- package/dist/pine-core/p-ceef0eb1.entry.js +1 -0
- package/dist/pine-core/p-d1283e8d.entry.js +1 -0
- package/dist/pine-core/p-d676926d.system.entry.js +1 -0
- package/dist/pine-core/{p-61cfdbb2.entry.js → p-d7d7a4e1.entry.js} +1 -1
- package/dist/pine-core/p-d85d50cb.entry.js +1 -0
- package/dist/pine-core/p-daa802f1.entry.js +2 -0
- package/dist/pine-core/p-ddf4b9b5.system.entry.js +1 -0
- package/dist/pine-core/p-de3b319e.system.entry.js +8 -0
- package/dist/pine-core/{p-cb9baf78.system.entry.js → p-e00777da.system.entry.js} +1 -1
- package/dist/pine-core/p-e2541eeb.entry.js +1 -0
- package/dist/pine-core/{p-01f1cdaf.system.entry.js → p-e2a1a49a.system.entry.js} +1 -1
- package/dist/pine-core/p-e4ebea88.system.entry.js +1 -0
- package/dist/pine-core/{p-947582e1.entry.js → p-e554bd64.entry.js} +1 -1
- package/dist/pine-core/{p-dd7ded84.entry.js → p-e6427c87.entry.js} +1 -1
- package/dist/pine-core/{p-50ddadbf.entry.js → p-e72e8b8f.entry.js} +1 -1
- package/dist/pine-core/p-e92d0f0f.system.entry.js +1 -0
- package/dist/pine-core/{p-9b32727a.system.entry.js → p-eab165b9.system.entry.js} +1 -1
- package/dist/pine-core/p-eabc4bd8.entry.js +1 -0
- package/dist/pine-core/p-ef9f84f2.system.entry.js +1 -0
- package/dist/pine-core/{p-c9ae7964.entry.js → p-f026af73.entry.js} +1 -1
- package/dist/pine-core/{p-99530cb5.entry.js → p-f0509c8e.entry.js} +1 -1
- package/dist/pine-core/p-f1252e72.system.entry.js +1 -0
- package/dist/pine-core/p-f3496fd1.entry.js +1 -0
- package/dist/pine-core/{p-eecd9ad8.system.entry.js → p-f90f4be7.system.entry.js} +1 -1
- package/dist/pine-core/p-f9bdaadd.system.entry.js +1 -0
- package/dist/pine-core/{p-128c04e7.entry.js → p-fda791df.entry.js} +1 -1
- package/dist/pine-core/p-fea4296d.entry.js +1 -0
- package/dist/pine-core/pine-core.esm.js +1 -1
- package/dist/types/components/pds-alert/pds-alert.d.ts +2 -1
- package/dist/types/components/pds-avatar/pds-avatar.d.ts +5 -4
- package/dist/types/components/pds-box/pds-box.d.ts +68 -57
- package/dist/types/components/pds-button/pds-button.d.ts +14 -3
- package/dist/types/components/pds-checkbox/pds-checkbox.d.ts +15 -8
- package/dist/types/components/pds-chip/pds-chip.d.ts +2 -2
- package/dist/types/components/pds-combobox/pds-combobox.d.ts +48 -11
- package/dist/types/components/pds-copytext/pds-copytext.d.ts +3 -1
- package/dist/types/components/pds-datepicker/datepicker-interface.d.ts +20 -4
- package/dist/types/components/pds-datepicker/pds-datepicker.d.ts +3 -2
- package/dist/types/components/pds-datepicker/presets.d.ts +3 -2
- package/dist/types/components/pds-drawer/pds-drawer-content/pds-drawer-content.d.ts +1 -4
- package/dist/types/components/pds-drawer/pds-drawer-footer/pds-drawer-footer.d.ts +1 -0
- package/dist/types/components/pds-drawer/pds-drawer-header/pds-drawer-header.d.ts +1 -0
- package/dist/types/components/pds-drawer/pds-drawer.d.ts +4 -6
- package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.d.ts +20 -16
- package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.d.ts +1 -1
- package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu.d.ts +7 -0
- package/dist/types/components/pds-filters/pds-filter/pds-filter.d.ts +6 -5
- package/dist/types/components/pds-image/image-interface.d.ts +12 -0
- package/dist/types/components/pds-image/pds-image.d.ts +69 -9
- package/dist/types/components/pds-input/pds-input.d.ts +17 -7
- package/dist/types/components/pds-link/pds-link.d.ts +8 -8
- package/dist/types/components/pds-loader/pds-loader.d.ts +3 -2
- package/dist/types/components/pds-modal/pds-modal-footer/pds-modal-footer.d.ts +1 -0
- package/dist/types/components/pds-modal/pds-modal-header/pds-modal-header.d.ts +1 -0
- package/dist/types/components/pds-modal/pds-modal.d.ts +7 -9
- package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +14 -8
- package/dist/types/components/pds-popover/pds-popover.d.ts +2 -2
- package/dist/types/components/pds-progress/pds-progress.d.ts +2 -2
- package/dist/types/components/pds-radio/pds-radio.d.ts +6 -5
- package/dist/types/components/pds-radio-group/pds-radio-group.d.ts +5 -4
- package/dist/types/components/pds-select/pds-select.d.ts +9 -3
- package/dist/types/components/pds-sortable/pds-sortable-item/pds-sortable-item.d.ts +8 -2
- package/dist/types/components/pds-sortable/pds-sortable.d.ts +82 -1
- package/dist/types/components/pds-sortable/sortable-label.d.ts +7 -0
- package/dist/types/components/pds-switch/pds-switch.d.ts +17 -2
- package/dist/types/components/pds-table/pds-table-body/pds-table-body.d.ts +3 -0
- package/dist/types/components/pds-table/pds-table-cell/pds-table-cell.d.ts +10 -0
- package/dist/types/components/pds-table/pds-table-head/pds-table-head.d.ts +5 -1
- package/dist/types/components/pds-table/pds-table-head-cell/pds-table-head-cell.d.ts +21 -0
- package/dist/types/components/pds-table/pds-table-row/pds-table-row.d.ts +4 -0
- package/dist/types/components/pds-table/pds-table.d.ts +76 -2
- package/dist/types/components/pds-tabs/pds-tabs.d.ts +1 -1
- package/dist/types/components/pds-textarea/pds-textarea.d.ts +15 -13
- package/dist/types/components/pds-toast/pds-toast.d.ts +5 -1
- package/dist/types/components.d.ts +480 -325
- package/dist/types/utils/aria-references.d.ts +4 -0
- package/dist/types/utils/truncation-tooltip.d.ts +39 -0
- package/dist/types/utils/types.d.ts +3 -0
- package/dist/vscode.html-data.json +340 -134
- package/hydrate/index.js +1800 -353
- package/hydrate/index.mjs +1800 -353
- package/package.json +3 -3
- package/readme.md +26 -55
- package/dist/esm-es5/truncation-tooltip-DBcPipr9.js +0 -1
- package/dist/pine-core/p-07323107.entry.js +0 -1
- package/dist/pine-core/p-08b8e941.entry.js +0 -1
- package/dist/pine-core/p-0b7b3fc2.system.entry.js +0 -3
- package/dist/pine-core/p-0d5f0ab5.system.entry.js +0 -1
- package/dist/pine-core/p-14dedf01.system.entry.js +0 -1
- package/dist/pine-core/p-1ca8d183.entry.js +0 -1
- package/dist/pine-core/p-1f62bb71.entry.js +0 -7
- package/dist/pine-core/p-2dd30d12.entry.js +0 -1
- package/dist/pine-core/p-3359a935.entry.js +0 -1
- package/dist/pine-core/p-35s7h-dk.js +0 -1
- package/dist/pine-core/p-3610cb3b.entry.js +0 -1
- package/dist/pine-core/p-39276663.entry.js +0 -1
- package/dist/pine-core/p-3a1dc752.system.entry.js +0 -1
- package/dist/pine-core/p-42d43c3f.system.entry.js +0 -1
- package/dist/pine-core/p-4a90b9c8.system.entry.js +0 -1
- package/dist/pine-core/p-4cfe922b.entry.js +0 -1
- package/dist/pine-core/p-5f181694.system.entry.js +0 -1
- package/dist/pine-core/p-60a30975.system.entry.js +0 -1
- package/dist/pine-core/p-62aa6a78.system.entry.js +0 -1
- package/dist/pine-core/p-64bcb378.entry.js +0 -1
- package/dist/pine-core/p-724baba3.system.entry.js +0 -1
- package/dist/pine-core/p-72659a0e.system.entry.js +0 -1
- package/dist/pine-core/p-8ade17ce.entry.js +0 -1
- package/dist/pine-core/p-8e7f75e6.entry.js +0 -1
- package/dist/pine-core/p-8fb520df.entry.js +0 -1
- package/dist/pine-core/p-92115e88.entry.js +0 -1
- package/dist/pine-core/p-94c9b7d1.system.entry.js +0 -1
- package/dist/pine-core/p-97356d4b.entry.js +0 -1
- package/dist/pine-core/p-97653e60.entry.js +0 -1
- package/dist/pine-core/p-97b73359.entry.js +0 -1
- package/dist/pine-core/p-BZVUD2on.js +0 -1
- package/dist/pine-core/p-Dj-z_ugg.system.js +0 -1
- package/dist/pine-core/p-ad5208a4.system.entry.js +0 -1
- package/dist/pine-core/p-afc2f165.entry.js +0 -1
- package/dist/pine-core/p-bcc378ba.system.entry.js +0 -8
- package/dist/pine-core/p-c8a0b562.system.entry.js +0 -1
- package/dist/pine-core/p-d4968f9d.system.entry.js +0 -1
- package/dist/pine-core/p-d6f338e0.entry.js +0 -1
- package/dist/pine-core/p-da8b864a.entry.js +0 -2
- package/dist/pine-core/p-db7fb5a3.entry.js +0 -1
- package/dist/pine-core/p-de455073.system.entry.js +0 -1
- package/dist/pine-core/p-e3de6a1d.entry.js +0 -1
- package/dist/pine-core/p-e84fa9ed.entry.js +0 -1
- package/dist/pine-core/p-eb4f0daa.system.entry.js +0 -1
- package/dist/pine-core/p-eb56af4a.system.entry.js +0 -1
- package/dist/pine-core/p-ef0eba9b.system.entry.js +0 -1
- package/dist/pine-core/p-f11cce27.system.entry.js +0 -1
- package/dist/pine-core/p-f354dbac.entry.js +0 -1
|
@@ -10,6 +10,10 @@ import { FlyoutController, buildPanelEntries, findGroup, groupBadgeOf, groupIcon
|
|
|
10
10
|
* @slot trigger-content - Custom content for the button trigger when customTriggerContent is true
|
|
11
11
|
* @slot empty - Custom empty state message when no options match
|
|
12
12
|
* @slot loading - Custom loading indicator
|
|
13
|
+
* @part button-trigger - Exposes the button trigger for styling. Appears only when `trigger` is `button`.
|
|
14
|
+
* @part chip-trigger - Exposes the chip trigger for styling. Appears only when `trigger` is `chip`.
|
|
15
|
+
* @part combobox - Exposes the outer container around the label, trigger and messages for styling.
|
|
16
|
+
* @part input - Exposes the native `input` element for styling. Appears only when `trigger` is `input`, the default.
|
|
13
17
|
*/
|
|
14
18
|
export class PdsCombobox {
|
|
15
19
|
constructor() {
|
|
@@ -35,11 +39,6 @@ export class PdsCombobox {
|
|
|
35
39
|
* @default 'bottom-start'
|
|
36
40
|
*/
|
|
37
41
|
this.dropdownPlacement = 'bottom-start';
|
|
38
|
-
/**
|
|
39
|
-
* Width of the dropdown. Any valid CSS width value.
|
|
40
|
-
* @default '236px'
|
|
41
|
-
*/
|
|
42
|
-
this.dropdownWidth = '236px';
|
|
43
42
|
/**
|
|
44
43
|
* Where to mount the dropdown listbox (`host` or `body`, sometimes called “append to body”).
|
|
45
44
|
* Use `body` inside scrollable containers (for example modals) so the list is not clipped by
|
|
@@ -67,16 +66,18 @@ export class PdsCombobox {
|
|
|
67
66
|
*/
|
|
68
67
|
this.noOptionsFoundLabel = 'No options found';
|
|
69
68
|
/**
|
|
70
|
-
* Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
|
|
71
|
-
*
|
|
69
|
+
* Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
|
|
70
|
+
* value, including its padding.
|
|
71
|
+
* @default '388px'
|
|
72
72
|
*/
|
|
73
|
-
this.flyoutMaxWidth = '
|
|
73
|
+
this.flyoutMaxWidth = '388px';
|
|
74
74
|
/**
|
|
75
|
-
* Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
|
|
76
|
-
* The flyout is as wide as its options, between this and
|
|
77
|
-
*
|
|
75
|
+
* Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
|
|
76
|
+
* value, including its padding. The flyout is as wide as its options, between this and
|
|
77
|
+
* `flyout-max-width`.
|
|
78
|
+
* @default '288px'
|
|
78
79
|
*/
|
|
79
|
-
this.flyoutMinWidth = '
|
|
80
|
+
this.flyoutMinWidth = '288px';
|
|
80
81
|
/**
|
|
81
82
|
* How option groups (`<optgroup>`, or the `group` field of `options`) are shown in the dropdown.
|
|
82
83
|
* `inline` lists each group's label above its options. `flyout` lists the groups, and opens a
|
|
@@ -163,7 +164,7 @@ export class PdsCombobox {
|
|
|
163
164
|
*/
|
|
164
165
|
this.chipDot = false;
|
|
165
166
|
/**
|
|
166
|
-
* The value of the
|
|
167
|
+
* The `value` of the selected option.
|
|
167
168
|
*/
|
|
168
169
|
this.value = '';
|
|
169
170
|
/**
|
|
@@ -287,15 +288,30 @@ export class PdsCombobox {
|
|
|
287
288
|
* the list shows every option until the user types (then normal filtering applies).
|
|
288
289
|
*/
|
|
289
290
|
this.expandFilterListWhileOpen = false;
|
|
291
|
+
this.onHeightGlideCancel = (event) => {
|
|
292
|
+
const panel = this.listboxEl;
|
|
293
|
+
if (event.animationName !== 'pds-combobox-height-glide' || event.target !== panel)
|
|
294
|
+
return;
|
|
295
|
+
// Turning around mid-glide cancels the old glide as the new one starts; only a glide with none
|
|
296
|
+
// left running cleans up.
|
|
297
|
+
const running = panel.getAnimations().some(a => a.animationName === 'pds-combobox-height-glide');
|
|
298
|
+
// A drill waiting to render glides from here next; it cleans up then.
|
|
299
|
+
if (!running && this.drillFromHeight === undefined)
|
|
300
|
+
this.endHeightGlide();
|
|
301
|
+
};
|
|
290
302
|
this.onPanelPointer = (event) => {
|
|
291
303
|
const canHover = event.pointerType !== 'touch';
|
|
292
304
|
if (this.pointerCanHover !== canHover)
|
|
293
305
|
this.pointerCanHover = canHover;
|
|
294
306
|
};
|
|
295
307
|
this.onDrillAnimationEnd = (event) => {
|
|
296
|
-
// Only the
|
|
308
|
+
// Only the component's own ends (the slide by name, the glide by its target): slotted consumer
|
|
309
|
+
// content can animate inside the list too.
|
|
297
310
|
if (event.animationName === 'pds-combobox-drill')
|
|
298
311
|
this.drillDirection = null;
|
|
312
|
+
if (event.animationName === 'pds-combobox-height-glide' && event.target === this.listboxEl && this.drillFromHeight === undefined) {
|
|
313
|
+
this.endHeightGlide();
|
|
314
|
+
}
|
|
299
315
|
};
|
|
300
316
|
/** `<label for>` only works on the input trigger; for a div trigger a click on the label focuses it. */
|
|
301
317
|
this.onLabelClick = () => {
|
|
@@ -593,6 +609,8 @@ export class PdsCombobox {
|
|
|
593
609
|
}
|
|
594
610
|
}
|
|
595
611
|
};
|
|
612
|
+
/** A pick that fills the field from its placeholder fades in; a value it loads with doesn't. */
|
|
613
|
+
this.fadesValueIn = false;
|
|
596
614
|
this.handleScroll = (e) => {
|
|
597
615
|
if (!this.asyncUrl || !this.hasMore || this.loading)
|
|
598
616
|
return;
|
|
@@ -711,6 +729,14 @@ export class PdsCombobox {
|
|
|
711
729
|
if (this.usesBodyPortal && this.isOpen) {
|
|
712
730
|
this.syncBodyPortal();
|
|
713
731
|
}
|
|
732
|
+
// Opening places the dropdown a tick later, which can run before the dropdown has rendered and
|
|
733
|
+
// then skips it, leaving it without its dropdown-width and max-height. Place a newly rendered
|
|
734
|
+
// dropdown here too.
|
|
735
|
+
if (this.isOpen && this.triggerEl && this.listboxEl && this.listboxEl !== this.placedListboxEl) {
|
|
736
|
+
this.placedListboxEl = this.listboxEl;
|
|
737
|
+
void this.positionDropdown();
|
|
738
|
+
}
|
|
739
|
+
this.glideDrillHeight();
|
|
714
740
|
const row = (_a = this.listboxEl) === null || _a === void 0 ? void 0 : _a.querySelector('.pds-combobox__group-row--open');
|
|
715
741
|
const flyoutEl = row === null || row === void 0 ? void 0 : row.querySelector('.pds-combobox__flyout');
|
|
716
742
|
if (this.isOpen && this.listboxEl && row && flyoutEl) {
|
|
@@ -719,18 +745,6 @@ export class PdsCombobox {
|
|
|
719
745
|
else {
|
|
720
746
|
this.flyout.stopPositioning();
|
|
721
747
|
}
|
|
722
|
-
// The row back is sticky over the group's options; scrolling an option into view stops below
|
|
723
|
-
// it. Set before any scroll below, and when it first applies, scroll the highlighted option
|
|
724
|
-
// again: the list keeps its offset on drilling in, and an earlier scroll had no padding.
|
|
725
|
-
if (this.panelTreeEl) {
|
|
726
|
-
const header = this.hidesPanelSearch ? this.panelTreeEl.querySelector('.pds-combobox__group-back-trigger') : null;
|
|
727
|
-
const padding = header ? `${header.offsetHeight}px` : '';
|
|
728
|
-
if (this.panelTreeEl.style.scrollPaddingBlockStart !== padding) {
|
|
729
|
-
this.panelTreeEl.style.scrollPaddingBlockStart = padding;
|
|
730
|
-
if (padding !== '' && this.highlightedIndex >= 0)
|
|
731
|
-
this.pendingOptionFocus = true;
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
748
|
if (this.pendingOptionFocus) {
|
|
735
749
|
this.pendingOptionFocus = false;
|
|
736
750
|
this.updateOptionFocus();
|
|
@@ -758,8 +772,7 @@ export class PdsCombobox {
|
|
|
758
772
|
* Scrolls just enough to show `el`, as `scrollIntoView({ block: 'nearest' })` does. In the drill-in
|
|
759
773
|
* panel it scrolls the list alone, and never sideways: while a drill-in slide offsets a row past
|
|
760
774
|
* the list's edge, `scrollIntoView` also scrolls the list horizontally to reach it, which eats most
|
|
761
|
-
* of the slide.
|
|
762
|
-
* but doesn't scroll the page or a scrolling ancestor.
|
|
775
|
+
* of the slide. It doesn't scroll the page or a scrolling ancestor.
|
|
763
776
|
*/
|
|
764
777
|
scrollIntoViewNearest(el, smooth) {
|
|
765
778
|
const behavior = smooth ? 'smooth' : 'auto';
|
|
@@ -767,18 +780,29 @@ export class PdsCombobox {
|
|
|
767
780
|
el.scrollIntoView({ block: 'nearest', behavior });
|
|
768
781
|
return;
|
|
769
782
|
}
|
|
770
|
-
|
|
783
|
+
// The row back is the drilled-in header, above the scrolling options: always in view.
|
|
784
|
+
if (el.classList.contains('pds-combobox__group-back-trigger'))
|
|
785
|
+
return;
|
|
786
|
+
const list = this.scrollListEl;
|
|
771
787
|
if (!list)
|
|
772
788
|
return;
|
|
773
789
|
const offset = el.getBoundingClientRect().top - list.getBoundingClientRect().top - list.clientTop;
|
|
774
|
-
|
|
775
|
-
const padding = el.classList.contains('pds-combobox__group-back-trigger') ? 0 : parseFloat(list.style.scrollPaddingBlockStart) || 0;
|
|
776
|
-
const top = list.scrollTop + offset - padding;
|
|
790
|
+
const top = list.scrollTop + offset;
|
|
777
791
|
const bottom = list.scrollTop + offset + el.offsetHeight - list.clientHeight;
|
|
778
792
|
const target = top < list.scrollTop ? top : bottom > list.scrollTop ? bottom : null;
|
|
779
793
|
if (target !== null)
|
|
780
794
|
list.scrollTo({ top: target, behavior });
|
|
781
795
|
}
|
|
796
|
+
/**
|
|
797
|
+
* The element that scrolls the panel's rows. Every layer is a header (the search field, or a
|
|
798
|
+
* drilled-in group's row back) above the rows that scroll: drilled in, the group's options;
|
|
799
|
+
* otherwise the list under the search field, or the panel itself.
|
|
800
|
+
*/
|
|
801
|
+
get scrollListEl() {
|
|
802
|
+
var _a;
|
|
803
|
+
const list = this.usesPanelSearch ? this.panelTreeEl : this.listboxEl;
|
|
804
|
+
return (_a = list === null || list === void 0 ? void 0 : list.querySelector('.pds-combobox__group-back > .pds-combobox__drill-in-options')) !== null && _a !== void 0 ? _a : list;
|
|
805
|
+
}
|
|
782
806
|
focusPanel(el) {
|
|
783
807
|
var _a, _b;
|
|
784
808
|
this.panelFocusEl = el;
|
|
@@ -796,6 +820,7 @@ export class PdsCombobox {
|
|
|
796
820
|
this.openGroup = null;
|
|
797
821
|
// The reset isn't a drill-out, so it doesn't slide either.
|
|
798
822
|
this.drillDirection = null;
|
|
823
|
+
this.endHeightGlide();
|
|
799
824
|
}
|
|
800
825
|
openGroupChanged(next, previous) {
|
|
801
826
|
this.handPanelFocusToList();
|
|
@@ -807,6 +832,74 @@ export class PdsCombobox {
|
|
|
807
832
|
this.drillDirection = 'in';
|
|
808
833
|
else if (next === null && previous !== null)
|
|
809
834
|
this.drillDirection = 'out';
|
|
835
|
+
else
|
|
836
|
+
return;
|
|
837
|
+
// The views differ in height; measured now, before the next one renders, so it can glide.
|
|
838
|
+
const panel = this.listboxEl;
|
|
839
|
+
if (!panel)
|
|
840
|
+
return;
|
|
841
|
+
const from = panel.getBoundingClientRect().height;
|
|
842
|
+
this.drillFromHeight = from;
|
|
843
|
+
// Pinned there until componentDidRender measures the new view, however late: a child component
|
|
844
|
+
// that renders late could otherwise let the browser paint the new view at its full height first.
|
|
845
|
+
panel.style.height = `${from}px`;
|
|
846
|
+
panel.classList.add('pds-combobox__listbox--height-hold');
|
|
847
|
+
this.syncPanelOverflow();
|
|
848
|
+
}
|
|
849
|
+
releaseHeightHold() {
|
|
850
|
+
const panel = this.listboxEl;
|
|
851
|
+
panel === null || panel === void 0 ? void 0 : panel.style.removeProperty('height');
|
|
852
|
+
panel === null || panel === void 0 ? void 0 : panel.classList.remove('pds-combobox__listbox--height-hold');
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Hands the dropdown's height before and after a drill to the SCSS glide. Neither is known ahead,
|
|
856
|
+
* so they're measured: CSS can't animate to the height its content turns out to be.
|
|
857
|
+
*/
|
|
858
|
+
glideDrillHeight() {
|
|
859
|
+
const from = this.drillFromHeight;
|
|
860
|
+
this.drillFromHeight = undefined;
|
|
861
|
+
const panel = this.listboxEl;
|
|
862
|
+
if (from === undefined || !panel)
|
|
863
|
+
return;
|
|
864
|
+
// A drill back mid-glide starts from where the last one is now, then measures the real height.
|
|
865
|
+
this.releaseHeightHold();
|
|
866
|
+
panel.classList.remove('pds-combobox__listbox--height-glide');
|
|
867
|
+
this.syncPanelOverflow();
|
|
868
|
+
const to = panel.getBoundingClientRect().height;
|
|
869
|
+
if (Math.abs(to - from) < 1) {
|
|
870
|
+
this.endHeightGlide();
|
|
871
|
+
return;
|
|
872
|
+
}
|
|
873
|
+
panel.style.setProperty('--pds-combobox-glide-from', `${from}px`);
|
|
874
|
+
panel.style.setProperty('--pds-combobox-glide-to', `${to}px`);
|
|
875
|
+
panel.classList.add('pds-combobox__listbox--height-glide');
|
|
876
|
+
this.syncPanelOverflow();
|
|
877
|
+
// A glide cut short without ending (the panel hidden mid-way) still cleans up. JSX has no
|
|
878
|
+
// `onAnimationCancel`; adding the same listener again is a no-op.
|
|
879
|
+
panel.addEventListener('animationcancel', this.onHeightGlideCancel);
|
|
880
|
+
}
|
|
881
|
+
/** Ends a glide, and a drill still waiting to glide, so nothing starts once it renders. */
|
|
882
|
+
endHeightGlide() {
|
|
883
|
+
this.drillFromHeight = undefined;
|
|
884
|
+
this.releaseHeightHold();
|
|
885
|
+
const panel = this.listboxEl;
|
|
886
|
+
panel === null || panel === void 0 ? void 0 : panel.classList.remove('pds-combobox__listbox--height-glide');
|
|
887
|
+
this.syncPanelOverflow();
|
|
888
|
+
panel === null || panel === void 0 ? void 0 : panel.style.removeProperty('--pds-combobox-glide-from');
|
|
889
|
+
panel === null || panel === void 0 ? void 0 : panel.style.removeProperty('--pds-combobox-glide-to');
|
|
890
|
+
panel === null || panel === void 0 ? void 0 : panel.removeEventListener('animationcancel', this.onHeightGlideCancel);
|
|
891
|
+
}
|
|
892
|
+
/**
|
|
893
|
+
* With `max-height`, the panel's own scroll, set inline so it outranks the stylesheet: hidden under a
|
|
894
|
+
* fixed search field, and while the height glides (so no scrollbar flashes), otherwise auto.
|
|
895
|
+
*/
|
|
896
|
+
syncPanelOverflow() {
|
|
897
|
+
var _a;
|
|
898
|
+
if (((_a = this.maxHeight) !== null && _a !== void 0 ? _a : '') === '' || !this.listboxEl)
|
|
899
|
+
return;
|
|
900
|
+
const gliding = this.listboxEl.classList.contains('pds-combobox__listbox--height-glide') ||
|
|
901
|
+
this.listboxEl.classList.contains('pds-combobox__listbox--height-hold');
|
|
902
|
+
this.listboxEl.style.overflowY = this.usesPanelSearch || gliding ? 'hidden' : 'auto';
|
|
810
903
|
}
|
|
811
904
|
/** A flyout with no room beside the dropdown drills in, which can hide the focused search field too. */
|
|
812
905
|
flyoutFallbackChanged() {
|
|
@@ -838,6 +931,7 @@ export class PdsCombobox {
|
|
|
838
931
|
}
|
|
839
932
|
isOpenChanged(isOpen) {
|
|
840
933
|
if (!isOpen) {
|
|
934
|
+
this.endHeightGlide();
|
|
841
935
|
this.revealedGroupLabel = null;
|
|
842
936
|
this.drillDirection = null;
|
|
843
937
|
this.openGroup = null;
|
|
@@ -1197,61 +1291,66 @@ export class PdsCombobox {
|
|
|
1197
1291
|
this.updateOptionsFromAsync();
|
|
1198
1292
|
return;
|
|
1199
1293
|
}
|
|
1200
|
-
// Get all elements from the slot
|
|
1294
|
+
// Get all elements from the slot. Before the first render there's no slot yet, so read the
|
|
1295
|
+
// host's own children that it will hold (through any slot passing options on): otherwise a
|
|
1296
|
+
// combobox created with a `value`, such as a form re-rendered after a pick, paints its
|
|
1297
|
+
// placeholder for a frame, until `slotchange` finds the selected option.
|
|
1201
1298
|
const slot = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('slot[name="option"], slot:not([name])');
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
}
|
|
1226
|
-
});
|
|
1227
|
-
// Set initial selected option based on value property
|
|
1228
|
-
let initialSelected = null;
|
|
1229
|
-
// Check if value property matches any option
|
|
1230
|
-
if (this.value) {
|
|
1231
|
-
initialSelected = this.optionEls.find(opt => opt.value === this.value) || null;
|
|
1232
|
-
if (initialSelected) {
|
|
1233
|
-
// Update the display text to show the option's text content
|
|
1234
|
-
this.displayText = this.getOptionLabel(initialSelected);
|
|
1235
|
-
// Keep this.value as the actual option value (already correct)
|
|
1236
|
-
}
|
|
1237
|
-
}
|
|
1238
|
-
// For chip triggers, ensure we always have a selected option
|
|
1239
|
-
const firstEnabled = this.optionEls.find(opt => !isOptionDisabled(opt));
|
|
1240
|
-
if (initialSelected === null && this.trigger === 'chip' && firstEnabled !== undefined) {
|
|
1241
|
-
initialSelected = firstEnabled;
|
|
1242
|
-
this.value = initialSelected.value;
|
|
1243
|
-
this.displayText = this.getOptionLabel(initialSelected);
|
|
1244
|
-
console.warn('PDS Combobox: Chip triggers should always have a selected option. Automatically selected the first enabled option.');
|
|
1299
|
+
const allElements = slot
|
|
1300
|
+
? slot.assignedElements({ flatten: true })
|
|
1301
|
+
: Array.from(this.el.children)
|
|
1302
|
+
.filter(el => !el.getAttribute('slot'))
|
|
1303
|
+
.flatMap(el => (el.tagName === 'SLOT' ? el.assignedElements({ flatten: true }) : [el]));
|
|
1304
|
+
// Separate options from group labels and flatten optgroups
|
|
1305
|
+
this.allItems = [];
|
|
1306
|
+
this.optionEls = [];
|
|
1307
|
+
allElements.forEach(el => {
|
|
1308
|
+
if (el.tagName === 'OPTION') {
|
|
1309
|
+
this.optionEls.push(el);
|
|
1310
|
+
this.allItems.push(el);
|
|
1311
|
+
}
|
|
1312
|
+
else if (el.tagName === 'OPTGROUP') {
|
|
1313
|
+
const optgroup = el;
|
|
1314
|
+
this.allItems.push(optgroup);
|
|
1315
|
+
// Add optgroup children (options)
|
|
1316
|
+
Array.from(optgroup.children).forEach(child => {
|
|
1317
|
+
if (child.tagName === 'OPTION') {
|
|
1318
|
+
this.optionEls.push(child);
|
|
1319
|
+
this.allItems.push(child);
|
|
1320
|
+
}
|
|
1321
|
+
});
|
|
1245
1322
|
}
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
this.setSelectedOption(initialSelected);
|
|
1323
|
+
else if (el.tagName === 'PDS-TEXT') {
|
|
1324
|
+
this.allItems.push(el);
|
|
1249
1325
|
}
|
|
1250
|
-
|
|
1251
|
-
|
|
1326
|
+
});
|
|
1327
|
+
// Set initial selected option based on value property
|
|
1328
|
+
let initialSelected = null;
|
|
1329
|
+
// Check if value property matches any option
|
|
1330
|
+
if (this.value) {
|
|
1331
|
+
initialSelected = this.optionEls.find(opt => opt.value === this.value) || null;
|
|
1332
|
+
if (initialSelected) {
|
|
1333
|
+
// Update the display text to show the option's text content
|
|
1334
|
+
this.displayText = this.getOptionLabel(initialSelected);
|
|
1335
|
+
// Keep this.value as the actual option value (already correct)
|
|
1252
1336
|
}
|
|
1253
|
-
this.filterOptions();
|
|
1254
1337
|
}
|
|
1338
|
+
// For chip triggers, ensure we always have a selected option
|
|
1339
|
+
const firstEnabled = this.optionEls.find(opt => !isOptionDisabled(opt));
|
|
1340
|
+
if (initialSelected === null && this.trigger === 'chip' && firstEnabled !== undefined) {
|
|
1341
|
+
initialSelected = firstEnabled;
|
|
1342
|
+
this.value = initialSelected.value;
|
|
1343
|
+
this.displayText = this.getOptionLabel(initialSelected);
|
|
1344
|
+
console.warn('PDS Combobox: Chip triggers should always have a selected option. Automatically selected the first enabled option.');
|
|
1345
|
+
}
|
|
1346
|
+
// Update selection if we found a different selected option or if we don't have one
|
|
1347
|
+
if (initialSelected && initialSelected !== this.selectedOption) {
|
|
1348
|
+
this.setSelectedOption(initialSelected);
|
|
1349
|
+
}
|
|
1350
|
+
else if (!this.selectedOption && initialSelected) {
|
|
1351
|
+
this.setSelectedOption(initialSelected);
|
|
1352
|
+
}
|
|
1353
|
+
this.filterOptions();
|
|
1255
1354
|
}
|
|
1256
1355
|
// Helper method to get option label, falling back to text content if no label attribute
|
|
1257
1356
|
getOptionLabel(option) {
|
|
@@ -1327,10 +1426,19 @@ export class PdsCombobox {
|
|
|
1327
1426
|
else {
|
|
1328
1427
|
this.selectedOptionChipProps = null;
|
|
1329
1428
|
}
|
|
1429
|
+
// Immediately update layout content too, the same way: the @Watch('selectedOption') below
|
|
1430
|
+
// isn't active yet the first time this runs, during componentWillLoad's initial selection,
|
|
1431
|
+
// so a preselected layout option would otherwise show its plain label until some later change
|
|
1432
|
+
// triggers the watcher.
|
|
1433
|
+
this.selectedOptionLayoutContent = option && this.isOptionLayout(option)
|
|
1434
|
+
? this.getOptionLayoutContent(option)
|
|
1435
|
+
: '';
|
|
1330
1436
|
}
|
|
1331
1437
|
filterOptions() {
|
|
1332
|
-
// A new list replaces the rows a slide was animating, so
|
|
1438
|
+
// A new list replaces the rows a slide or height glide was animating, so their end events may
|
|
1439
|
+
// never come.
|
|
1333
1440
|
this.drillDirection = null;
|
|
1441
|
+
this.endHeightGlide();
|
|
1334
1442
|
// Ensure allItems includes optionEls if not already populated (for edge cases)
|
|
1335
1443
|
if (this.allItems.length === 0 && this.optionEls.length > 0) {
|
|
1336
1444
|
this.allItems = [...this.optionEls];
|
|
@@ -1349,11 +1457,13 @@ export class PdsCombobox {
|
|
|
1349
1457
|
if (groupLabel !== null && groupLabel.toLowerCase().includes(val))
|
|
1350
1458
|
return true;
|
|
1351
1459
|
}
|
|
1352
|
-
//
|
|
1353
|
-
|
|
1354
|
-
|
|
1460
|
+
// `data-search-text`, when set, is what search matches, so an option can be found by more
|
|
1461
|
+
// than its label without a custom layout. A layout option otherwise matches its text.
|
|
1462
|
+
const searchText = option.getAttribute('data-search-text');
|
|
1463
|
+
if (searchText)
|
|
1355
1464
|
return searchText.toLowerCase().includes(val);
|
|
1356
|
-
|
|
1465
|
+
if (this.isOptionLayout(option))
|
|
1466
|
+
return (option.textContent || '').toLowerCase().includes(val);
|
|
1357
1467
|
return this.getOptionLabel(option).toLowerCase().includes(val);
|
|
1358
1468
|
});
|
|
1359
1469
|
// Rebuild filtered items maintaining group structure - simplified approach
|
|
@@ -1403,6 +1513,7 @@ export class PdsCombobox {
|
|
|
1403
1513
|
}
|
|
1404
1514
|
}
|
|
1405
1515
|
positionDropdown() {
|
|
1516
|
+
var _a;
|
|
1406
1517
|
if (!this.triggerEl || !this.listboxEl) {
|
|
1407
1518
|
return;
|
|
1408
1519
|
}
|
|
@@ -1410,21 +1521,24 @@ export class PdsCombobox {
|
|
|
1410
1521
|
const zIndex = this.usesBodyPortal
|
|
1411
1522
|
? 'var(--pine-z-index-priority)'
|
|
1412
1523
|
: 'var(--pine-z-index-raised)';
|
|
1413
|
-
|
|
1524
|
+
// Unset, the panel's own width applies, which differs with its padding (see the dropdown panel styles).
|
|
1525
|
+
this.listboxEl.style.width = (_a = this.dropdownWidth) !== null && _a !== void 0 ? _a : '';
|
|
1414
1526
|
if (this.maxHeight) {
|
|
1415
1527
|
this.listboxEl.style.maxHeight = this.maxHeight;
|
|
1416
1528
|
// With panel search, the options list scrolls under a fixed search field.
|
|
1417
|
-
this.
|
|
1529
|
+
this.syncPanelOverflow();
|
|
1418
1530
|
}
|
|
1419
1531
|
this.listboxEl.offsetHeight;
|
|
1420
1532
|
return computePosition(this.triggerEl, this.listboxEl, {
|
|
1421
1533
|
placement: this.dropdownPlacement,
|
|
1422
1534
|
strategy,
|
|
1423
|
-
middleware: [offset(
|
|
1424
|
-
}).then(({ x, y }) => {
|
|
1535
|
+
middleware: [offset(8), flip(), shift({ padding: 5 })],
|
|
1536
|
+
}).then(({ x, y, placement }) => {
|
|
1425
1537
|
if (!this.listboxEl) {
|
|
1426
1538
|
return;
|
|
1427
1539
|
}
|
|
1540
|
+
// Where it landed after flipping, so the opening motion moves away from the field.
|
|
1541
|
+
this.listboxEl.dataset.placement = placement;
|
|
1428
1542
|
Object.assign(this.listboxEl.style, {
|
|
1429
1543
|
left: `${x}px`,
|
|
1430
1544
|
top: `${y}px`,
|
|
@@ -1710,6 +1824,8 @@ export class PdsCombobox {
|
|
|
1710
1824
|
highlightOptionAt(options, index) {
|
|
1711
1825
|
if (options.length === 0)
|
|
1712
1826
|
return;
|
|
1827
|
+
// Only the keys move it, so it shows the keyboard's ring, as in the grouped panel.
|
|
1828
|
+
this.keyboardNavigating = true;
|
|
1713
1829
|
this.highlightedIndex = Math.max(0, Math.min(options.length - 1, index));
|
|
1714
1830
|
this.updateOptionFocus();
|
|
1715
1831
|
}
|
|
@@ -2137,6 +2253,8 @@ export class PdsCombobox {
|
|
|
2137
2253
|
handleOptionClick(option) {
|
|
2138
2254
|
if (isOptionDisabled(option))
|
|
2139
2255
|
return;
|
|
2256
|
+
if (this.selectedIcon === null)
|
|
2257
|
+
this.fadesValueIn = true;
|
|
2140
2258
|
// Update reactive state - single source of truth
|
|
2141
2259
|
// The @Watch('selectedOption') will handle displayText, value, and form internals
|
|
2142
2260
|
this.setSelectedOption(option);
|
|
@@ -2144,12 +2262,34 @@ export class PdsCombobox {
|
|
|
2144
2262
|
this.clearExpandFilterList();
|
|
2145
2263
|
this.pdsComboboxChange.emit({ value: option.value });
|
|
2146
2264
|
}
|
|
2265
|
+
/** The row shown while options load: at the top of the list, or of a drilled-in group's options. */
|
|
2266
|
+
renderLoadingRow() {
|
|
2267
|
+
if (!this.loading)
|
|
2268
|
+
return null;
|
|
2269
|
+
const hasSlottedLoading = !this.usesBodyPortal && !!this.el.querySelector('[slot="loading"]');
|
|
2270
|
+
return (h("li", { class: "pds-combobox__loading", role: "presentation" }, hasSlottedLoading ? h("slot", { name: "loading" }) : h("pds-loader", { size: "small" })));
|
|
2271
|
+
}
|
|
2272
|
+
/** The row after the last option while more can load, inside whatever scrolls them. */
|
|
2273
|
+
renderLoadMoreRow() {
|
|
2274
|
+
if (!this.hasMore || this.loading)
|
|
2275
|
+
return null;
|
|
2276
|
+
return (h("li", { class: "pds-combobox__load-more", role: "presentation" }, h("pds-loader", { size: "small" })));
|
|
2277
|
+
}
|
|
2278
|
+
/** Drilled into a group: the group and its place among the panel's entries; otherwise null. */
|
|
2279
|
+
drilledInEntry(entries) {
|
|
2280
|
+
if (this.effectiveGroupDisplay !== 'drill-in' || this.openGroup === null)
|
|
2281
|
+
return null;
|
|
2282
|
+
const position = entries.findIndex(entry => entry.kind === 'group' && entry.group.optgroup === this.openGroup);
|
|
2283
|
+
const open = entries[position];
|
|
2284
|
+
return (open === null || open === void 0 ? void 0 : open.kind) === 'group' ? { group: open.group, position } : null;
|
|
2285
|
+
}
|
|
2147
2286
|
renderDropdown() {
|
|
2148
2287
|
if (!this.isOpen) {
|
|
2149
2288
|
return null;
|
|
2150
2289
|
}
|
|
2151
2290
|
const hasSlottedEmpty = !this.usesBodyPortal && !!this.el.querySelector('[slot="empty"]');
|
|
2152
|
-
|
|
2291
|
+
// Drilled in, the group's options scroll under the row back, so their loading rows go with them.
|
|
2292
|
+
const drilledIn = this.showsGroupedPanel && this.drilledInEntry(this.panelEntries()) !== null;
|
|
2153
2293
|
const selectableOptions = this.filteredItems.filter(item => item.tagName === 'OPTION');
|
|
2154
2294
|
const withSearch = this.usesPanelSearch;
|
|
2155
2295
|
// While a drilled-in group hides the search field, the list takes focus in its place.
|
|
@@ -2171,11 +2311,11 @@ export class PdsCombobox {
|
|
|
2171
2311
|
this.panelTreeEl = el;
|
|
2172
2312
|
else
|
|
2173
2313
|
this.listboxEl = el;
|
|
2174
|
-
}, onScroll: this.handleScroll },
|
|
2314
|
+
}, onScroll: this.handleScroll }, !drilledIn && this.renderLoadingRow(), !this.loading && this.filteredItems.length === 0 && (h("li", { class: "pds-combobox__empty", role: "presentation" }, hasSlottedEmpty ? (h("slot", { name: "empty" })) : (h("span", null, this.noOptionsFoundLabel)))), this.showsGroupedPanel ? this.renderGroupedPanel() : this.renderListboxItems(selectableOptions.length), !drilledIn && this.renderLoadMoreRow()));
|
|
2175
2315
|
if (!withSearch)
|
|
2176
2316
|
return list;
|
|
2177
2317
|
// The search field sits above the list; the wrapper is what's positioned and portaled.
|
|
2178
|
-
return (h("div", { class: "pds-combobox__listbox pds-combobox__listbox--with-search", ref: el => (this.listboxEl = el), onMouseDown: this.onPanelMouseDown,
|
|
2318
|
+
return (h("div", { class: "pds-combobox__listbox pds-combobox__listbox--with-search", ref: el => (this.listboxEl = el), onAnimationEnd: this.onDrillAnimationEnd, onMouseDown: this.onPanelMouseDown,
|
|
2179
2319
|
// Portaled, the panel sits outside .pds-combobox, so its focusout wouldn't reach that handler.
|
|
2180
2320
|
onFocusout: this.usesBodyPortal ? this.onComboboxFocusOut : undefined }, !listTakesFocus && this.renderPanelSearch(), list));
|
|
2181
2321
|
}
|
|
@@ -2315,7 +2455,11 @@ export class PdsCombobox {
|
|
|
2315
2455
|
return true;
|
|
2316
2456
|
}
|
|
2317
2457
|
renderPanelSearch() {
|
|
2318
|
-
return (h("div", { key: "panel-search", class:
|
|
2458
|
+
return (h("div", { key: "panel-search", class: {
|
|
2459
|
+
'pds-combobox__panel-search': true,
|
|
2460
|
+
// Coming back from a group, the search field slides in with the groups.
|
|
2461
|
+
'pds-combobox__panel-search--drill-out': this.drillDirection === 'out',
|
|
2462
|
+
} }, h("pds-icon", { name: "search", size: "regular", "aria-hidden": "true" }), h("input", { ref: el => (this.panelSearchEl = el), type: "text", class: "pds-combobox__panel-search-input", placeholder: this.searchPlaceholder, value: this.panelQuery, role: "combobox", "aria-label": this.searchOptionsLabel, "aria-haspopup": this.popupRole, "aria-controls": this.listboxId, "aria-autocomplete": "list", "aria-expanded": "true", "aria-activedescendant": this.activeDescendantId, autocomplete: "off", onInput: this.onPanelSearchInput, onKeyDown: this.onPanelSearchKeyDown })));
|
|
2319
2463
|
}
|
|
2320
2464
|
/**
|
|
2321
2465
|
* An option, as a listbox `option` or, given a tree `level`, a `treeitem`. `posinset` and
|
|
@@ -2334,6 +2478,8 @@ export class PdsCombobox {
|
|
|
2334
2478
|
: badge && `${this.getOptionLabel(option)}, ${badge.label}`, tabindex: this.usesBodyPortal || this.usesPanelSearch || tree ? '-1' : isHighlighted ? '0' : '-1', class: {
|
|
2335
2479
|
'pds-combobox__option': true,
|
|
2336
2480
|
'pds-combobox__option--highlighted': isHighlighted,
|
|
2481
|
+
// The keyboard's place, as on the group rows (`--keyboard`).
|
|
2482
|
+
'pds-combobox__option--keyboard': isHighlighted && this.keyboardNavigating,
|
|
2337
2483
|
'pds-combobox__option--layout': isLayout,
|
|
2338
2484
|
'pds-combobox__option--chip': isChip,
|
|
2339
2485
|
'pds-combobox__option--disabled': isDisabled,
|
|
@@ -2395,12 +2541,9 @@ export class PdsCombobox {
|
|
|
2395
2541
|
renderGroupedPanel() {
|
|
2396
2542
|
const entries = this.panelEntries();
|
|
2397
2543
|
const setsize = entries.length;
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
if ((open === null || open === void 0 ? void 0 : open.kind) === 'group')
|
|
2402
|
-
return this.renderGroupBackRow(open.group, { posinset: position + 1, setsize });
|
|
2403
|
-
}
|
|
2544
|
+
const drilled = this.drilledInEntry(entries);
|
|
2545
|
+
if (drilled)
|
|
2546
|
+
return this.renderGroupBackRow(drilled.group, { posinset: drilled.position + 1, setsize });
|
|
2404
2547
|
this.renderedGroups = [];
|
|
2405
2548
|
return entries.map((entry, position) => {
|
|
2406
2549
|
const placement = { posinset: position + 1, setsize };
|
|
@@ -2428,13 +2571,13 @@ export class PdsCombobox {
|
|
|
2428
2571
|
// As the group rows: shaded for the keys, and by `:hover` for the pointer.
|
|
2429
2572
|
'pds-combobox__group-back--highlighted': this.keyboardNavigating && this.highlightedGroupRow === group.optgroup,
|
|
2430
2573
|
'pds-combobox__group-back--keyboard': this.keyboardNavigating && this.highlightedGroupRow === group.optgroup,
|
|
2431
|
-
}, role: "treeitem", "aria-expanded": "true", "aria-disabled": disabled ? 'true' : undefined, "aria-level": 1, "aria-posinset": posinset, "aria-setsize": setsize, "aria-labelledby": `${id}-label` }, h("div", { class: "pds-combobox__group-row-trigger pds-combobox__group-back-trigger", onMouseDown: this.onOptionMouseDown, onMouseEnter: this.onGroupBackMouseEnter, onClick: this.onGroupBackClick }, h("span", { class: "pds-combobox__group-row-label", id: `${id}-label` }, h("pds-icon", { name: "caret-left", size: "regular", "aria-hidden": "true", class: "pds-combobox__group-row-caret" }), h("span", { class: "visually-hidden" }, this.drillInBackLabel, ": "), group.label)), h("ul", { class: "pds-combobox__drill-in-options", role: "group", "aria-label": group.label }, this.renderGroupOptions(group))));
|
|
2574
|
+
}, role: "treeitem", "aria-expanded": "true", "aria-disabled": disabled ? 'true' : undefined, "aria-level": 1, "aria-posinset": posinset, "aria-setsize": setsize, "aria-labelledby": `${id}-label` }, h("div", { class: "pds-combobox__group-row-trigger pds-combobox__group-back-trigger", onMouseDown: this.onOptionMouseDown, onMouseEnter: this.onGroupBackMouseEnter, onClick: this.onGroupBackClick }, h("span", { class: "pds-combobox__group-row-label", id: `${id}-label` }, h("pds-icon", { name: "caret-left", size: "regular", "aria-hidden": "true", class: "pds-combobox__group-row-caret" }), h("span", { class: "visually-hidden" }, this.drillInBackLabel, ": "), group.label)), h("ul", { class: "pds-combobox__drill-in-options", role: "group", "aria-label": group.label, onScroll: this.handleScroll }, this.renderLoadingRow(), this.renderGroupOptions(group), this.renderLoadMoreRow())));
|
|
2432
2575
|
}
|
|
2433
2576
|
renderGroupRow(group, groupIndex, { posinset, setsize }) {
|
|
2434
2577
|
const flyout = this.effectiveGroupDisplay === 'flyout';
|
|
2435
2578
|
const isOpen = flyout && this.openGroup === group.optgroup;
|
|
2436
|
-
//
|
|
2437
|
-
//
|
|
2579
|
+
// `--has-selection` is a state hook only (tests read it), not styled. The fill follows
|
|
2580
|
+
// `--highlighted` (always in flyout, in drill-in only for the keys) and a flyout's `--open` row.
|
|
2438
2581
|
const hasSelection = flyout && group.options.some(({ option }) => this.isOptionSelected(option));
|
|
2439
2582
|
const isCurrent = this.highlightedGroupRow === group.optgroup;
|
|
2440
2583
|
const disabled = isGroupDisabled(group);
|
|
@@ -2465,6 +2608,7 @@ export class PdsCombobox {
|
|
|
2465
2608
|
'pds-combobox__button-trigger-label': true,
|
|
2466
2609
|
'pds-combobox__button-trigger-label--placeholder': !this.selectedLabel,
|
|
2467
2610
|
'pds-combobox__button-trigger-label--with-icon': icon !== null,
|
|
2611
|
+
'pds-combobox__button-trigger-label--value-in': icon !== null && this.fadesValueIn,
|
|
2468
2612
|
} }, icon !== null && (
|
|
2469
2613
|
// `name`, not `icon`: `icon` also loads URLs and data: SVGs, unsanitized.
|
|
2470
2614
|
h("pds-icon", { name: icon, size: "regular", "aria-hidden": "true", class: "pds-combobox__button-trigger-icon" })), this.truncate ? (
|
|
@@ -2605,13 +2749,13 @@ export class PdsCombobox {
|
|
|
2605
2749
|
]
|
|
2606
2750
|
.filter(Boolean)
|
|
2607
2751
|
.join(' ');
|
|
2608
|
-
return (h(Host, { key: '
|
|
2752
|
+
return (h(Host, { key: '3a7f09752d2dff0fbf653852cd9ea474a44c61d5', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: '56d3bf86655abfd945228ee0bc3a556a6ad766b3', class: "pds-combobox", tabIndex: -1, onFocusout: this.onComboboxFocusOut, part: "combobox" }, this.hasVisibleLabel && (h("label", { key: 'a07f37d62bca1b15df3aa258d94c0df4609b93b3', htmlFor: this.trigger === 'input' ? this.componentId : undefined, id: this.labelId, class: "pds-combobox__label", onClick: this.onLabelClick }, this.label)), this.trigger === 'input' ? (h("div", { class: "pds-combobox__input-wrapper", style: { width: this.triggerWidth } }, h("input", { ref: el => {
|
|
2609
2753
|
this.inputEl = el;
|
|
2610
2754
|
this.triggerEl = el;
|
|
2611
2755
|
}, class: {
|
|
2612
2756
|
'pds-combobox__input': true,
|
|
2613
2757
|
'pds-combobox__input--invalid': this.isInvalid(),
|
|
2614
|
-
}, 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" }), h("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (h("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())) : (h("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, onMouseEnter: this.truncate ? this.onButtonTriggerMouseEnter : undefined, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), h("div", { key: '
|
|
2758
|
+
}, 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" }), h("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (h("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())) : (h("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, onMouseEnter: this.truncate ? this.onButtonTriggerMouseEnter : undefined, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), h("div", { key: '0c0accd76b79aba9fa3072eb68800102d458d0a7', style: { display: 'none' } }, h("slot", { key: 'be9cc4c897788342bbc96321f033ed4fd97e80ff', onSlotchange: () => this.updateOptions() })), this.renderDropdown(), this.groupDisplay !== 'inline' && [
|
|
2615
2759
|
h("span", { key: "drill-status", class: "visually-hidden", role: "status", "aria-live": "polite" }, this.isOpen && this.effectiveGroupDisplay === 'drill-in' && this.openGroup !== null ? this.openGroup.label : ''),
|
|
2616
2760
|
// Its own region: sharing one, revealing a row then opening it would leave the text the
|
|
2617
2761
|
// same, and opening the group would go unannounced.
|
|
@@ -2788,19 +2932,15 @@ export class PdsCombobox {
|
|
|
2788
2932
|
"references": {}
|
|
2789
2933
|
},
|
|
2790
2934
|
"required": false,
|
|
2791
|
-
"optional":
|
|
2935
|
+
"optional": true,
|
|
2792
2936
|
"docs": {
|
|
2793
|
-
"tags": [
|
|
2794
|
-
|
|
2795
|
-
"text": "'236px'"
|
|
2796
|
-
}],
|
|
2797
|
-
"text": "Width of the dropdown. Any valid CSS width value."
|
|
2937
|
+
"tags": [],
|
|
2938
|
+
"text": "Width of the dropdown, including its padding. Any valid CSS width value.\nWithout it, the dropdown is 252px wide, 244px with grouped options and 236px with a panel search."
|
|
2798
2939
|
},
|
|
2799
2940
|
"getter": false,
|
|
2800
2941
|
"setter": false,
|
|
2801
2942
|
"reflect": false,
|
|
2802
|
-
"attribute": "dropdown-width"
|
|
2803
|
-
"defaultValue": "'236px'"
|
|
2943
|
+
"attribute": "dropdown-width"
|
|
2804
2944
|
},
|
|
2805
2945
|
"dropdownMount": {
|
|
2806
2946
|
"type": "string",
|
|
@@ -2884,15 +3024,15 @@ export class PdsCombobox {
|
|
|
2884
3024
|
"docs": {
|
|
2885
3025
|
"tags": [{
|
|
2886
3026
|
"name": "default",
|
|
2887
|
-
"text": "'
|
|
3027
|
+
"text": "'388px'"
|
|
2888
3028
|
}],
|
|
2889
|
-
"text": "Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
|
|
3029
|
+
"text": "Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width\nvalue, including its padding."
|
|
2890
3030
|
},
|
|
2891
3031
|
"getter": false,
|
|
2892
3032
|
"setter": false,
|
|
2893
3033
|
"reflect": false,
|
|
2894
3034
|
"attribute": "flyout-max-width",
|
|
2895
|
-
"defaultValue": "'
|
|
3035
|
+
"defaultValue": "'388px'"
|
|
2896
3036
|
},
|
|
2897
3037
|
"flyoutMinWidth": {
|
|
2898
3038
|
"type": "string",
|
|
@@ -2907,15 +3047,15 @@ export class PdsCombobox {
|
|
|
2907
3047
|
"docs": {
|
|
2908
3048
|
"tags": [{
|
|
2909
3049
|
"name": "default",
|
|
2910
|
-
"text": "'
|
|
3050
|
+
"text": "'288px'"
|
|
2911
3051
|
}],
|
|
2912
|
-
"text": "Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
|
|
3052
|
+
"text": "Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width\nvalue, including its padding. The flyout is as wide as its options, between this and\n`flyout-max-width`."
|
|
2913
3053
|
},
|
|
2914
3054
|
"getter": false,
|
|
2915
3055
|
"setter": false,
|
|
2916
3056
|
"reflect": false,
|
|
2917
3057
|
"attribute": "flyout-min-width",
|
|
2918
|
-
"defaultValue": "'
|
|
3058
|
+
"defaultValue": "'288px'"
|
|
2919
3059
|
},
|
|
2920
3060
|
"groupDisplay": {
|
|
2921
3061
|
"type": "string",
|
|
@@ -3369,7 +3509,7 @@ export class PdsCombobox {
|
|
|
3369
3509
|
"optional": false,
|
|
3370
3510
|
"docs": {
|
|
3371
3511
|
"tags": [],
|
|
3372
|
-
"text": "The value of the
|
|
3512
|
+
"text": "The `value` of the selected option."
|
|
3373
3513
|
},
|
|
3374
3514
|
"getter": false,
|
|
3375
3515
|
"setter": false,
|