@pine-ds/core 3.7.0 → 3.8.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/form.js +16 -1
- package/components/form.js.map +1 -1
- package/components/index2.js +1 -1
- package/components/index2.js.map +1 -1
- package/components/mock-pds-modal.js +1 -1
- package/components/mock-pds-modal.js.map +1 -1
- package/components/pds-button2.js +1 -1
- package/components/pds-button2.js.map +1 -1
- package/components/pds-checkbox2.js +7 -4
- package/components/pds-checkbox2.js.map +1 -1
- package/components/pds-chip.js +1 -100
- package/components/pds-chip.js.map +1 -1
- package/components/pds-chip2.js +105 -0
- package/components/pds-chip2.js.map +1 -0
- package/components/pds-combobox.js +414 -43
- package/components/pds-combobox.js.map +1 -1
- package/components/pds-copytext.js +3 -3
- package/components/pds-copytext.js.map +1 -1
- package/components/pds-dropdown-menu.js +1 -1
- package/components/pds-dropdown-menu.js.map +1 -1
- package/components/pds-filter.js +3 -3
- package/components/pds-filter.js.map +1 -1
- package/components/pds-input.js +1 -1
- package/components/pds-input.js.map +1 -1
- package/components/pds-modal.js +1 -1
- package/components/pds-modal.js.map +1 -1
- package/components/pds-popover.js +123 -15
- package/components/pds-popover.js.map +1 -1
- package/components/pds-radio.js +10 -4
- package/components/pds-radio.js.map +1 -1
- package/components/pds-select.js +21 -5
- package/components/pds-select.js.map +1 -1
- package/components/pds-switch.js +7 -4
- package/components/pds-switch.js.map +1 -1
- package/components/pds-tab.js +1 -1
- package/components/pds-tab.js.map +1 -1
- package/components/pds-table-cell2.js +1 -1
- package/components/pds-table-cell2.js.map +1 -1
- package/components/pds-table-head-cell2.js +1 -1
- package/components/pds-table-head-cell2.js.map +1 -1
- package/components/pds-table-head.js +1 -1
- package/components/pds-table-head.js.map +1 -1
- package/components/pds-table-row.js +1 -1
- package/components/pds-table-row.js.map +1 -1
- package/components/pds-table.js +1 -1
- package/components/pds-table.js.map +1 -1
- package/components/pds-tabs.js +14 -4
- package/components/pds-tabs.js.map +1 -1
- package/components/pds-textarea.js +9 -6
- package/components/pds-textarea.js.map +1 -1
- package/components/pds-tooltip.js +4 -4
- package/components/pds-tooltip.js.map +1 -1
- package/dist/cjs/{form-Bx4nzJBo.js → form-hmpgbT1I.js} +18 -2
- package/dist/cjs/form-hmpgbT1I.js.map +1 -0
- package/dist/cjs/{index-CTirFLR-.js → index-DtnvzYhe.js} +3 -3
- package/dist/cjs/index-DtnvzYhe.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mock-pds-modal.cjs.entry.js +1 -1
- package/dist/cjs/mock-pds-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/mock-pds-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
- package/dist/cjs/pds-avatar.cjs.entry.js +1 -1
- package/dist/cjs/pds-button.cjs.entry.js +2 -2
- package/dist/cjs/pds-button.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-button.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-checkbox.cjs.entry.js +8 -5
- package/dist/cjs/pds-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-chip.cjs.entry.js +3 -3
- package/dist/cjs/pds-chip.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-chip.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-combobox.cjs.entry.js +398 -40
- package/dist/cjs/pds-combobox.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-combobox.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-copytext.cjs.entry.js +4 -4
- package/dist/cjs/pds-copytext.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-copytext.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-dropdown-menu.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-filter.cjs.entry.js +4 -4
- package/dist/cjs/pds-filter.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-filter.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-input.cjs.entry.js +3 -3
- package/dist/cjs/pds-input.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-input.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-link.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-popover.cjs.entry.js +117 -12
- package/dist/cjs/pds-popover.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-popover.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-radio.cjs.entry.js +11 -5
- package/dist/cjs/pds-radio.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-radio.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-select.cjs.entry.js +20 -5
- package/dist/cjs/pds-select.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-select.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-sortable-item.cjs.entry.js +1 -1
- package/dist/cjs/pds-switch.cjs.entry.js +8 -5
- package/dist/cjs/pds-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-switch.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-tab.cjs.entry.js +1 -1
- package/dist/cjs/pds-tab.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-tab.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-table-cell.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-head-cell.cjs.entry.js +2 -2
- package/dist/cjs/pds-table-head-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-table-head-cell.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-head.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-table-head.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-row.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-table-row.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table.cjs.entry.js +1 -1
- package/dist/cjs/pds-table.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-table.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-tabs.cjs.entry.js +14 -4
- package/dist/cjs/pds-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-tabs.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-textarea.cjs.entry.js +10 -7
- package/dist/cjs/pds-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-textarea.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-tooltip.cjs.entry.js +4 -4
- package/dist/cjs/pds-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/pds-tooltip.entry.cjs.js.map +1 -1
- package/dist/cjs/pine-core.cjs.js +1 -1
- package/dist/collection/components/pds-button/pds-button.css +6 -3
- package/dist/collection/components/pds-checkbox/pds-checkbox.js +7 -4
- package/dist/collection/components/pds-checkbox/pds-checkbox.js.map +1 -1
- package/dist/collection/components/pds-chip/pds-chip.css +2 -2
- package/dist/collection/components/pds-chip/pds-chip.js +17 -5
- package/dist/collection/components/pds-chip/pds-chip.js.map +1 -1
- package/dist/collection/components/pds-combobox/pds-combobox.css +175 -4
- package/dist/collection/components/pds-combobox/pds-combobox.js +516 -43
- package/dist/collection/components/pds-combobox/pds-combobox.js.map +1 -1
- package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +79 -2
- package/dist/collection/components/pds-copytext/pds-copytext.css +6 -3
- package/dist/collection/components/pds-copytext/pds-copytext.js +2 -2
- package/dist/collection/components/pds-copytext/pds-copytext.js.map +1 -1
- package/dist/collection/components/pds-copytext/stories/pds-copytext.stories.js +1 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.css +1 -1
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.css +1 -1
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +2 -2
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js.map +1 -1
- package/dist/collection/components/pds-input/pds-input.css +18 -3
- package/dist/collection/components/pds-input/stories/pds-input.stories.js +42 -0
- package/dist/collection/components/pds-modal/pds-modal.css +2 -2
- package/dist/collection/components/pds-popover/pds-popover.css +3 -0
- package/dist/collection/components/pds-popover/pds-popover.js +226 -17
- package/dist/collection/components/pds-popover/pds-popover.js.map +1 -1
- package/dist/collection/components/pds-popover/popover-interface.js +2 -0
- package/dist/collection/components/pds-popover/popover-interface.js.map +1 -0
- package/dist/collection/components/pds-popover/stories/pds-popover.stories.js +1 -1
- package/dist/collection/components/pds-radio/pds-radio.js +10 -4
- package/dist/collection/components/pds-radio/pds-radio.js.map +1 -1
- package/dist/collection/components/pds-select/pds-select.css +1 -1
- package/dist/collection/components/pds-select/pds-select.js +19 -2
- package/dist/collection/components/pds-select/pds-select.js.map +1 -1
- package/dist/collection/components/pds-switch/pds-switch.js +7 -4
- package/dist/collection/components/pds-switch/pds-switch.js.map +1 -1
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.css +1 -1
- package/dist/collection/components/pds-table/pds-table-head/pds-table-head.css +1 -1
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.css +1 -1
- package/dist/collection/components/pds-table/pds-table-row/pds-table-row.css +1 -1
- package/dist/collection/components/pds-table/pds-table.css +1 -1
- package/dist/collection/components/pds-tabs/pds-tab/pds-tab.css +2 -2
- package/dist/collection/components/pds-tabs/pds-tabs.js +14 -4
- package/dist/collection/components/pds-tabs/pds-tabs.js.map +1 -1
- package/dist/collection/components/pds-tabs/stories/pds-tabs.stories.js +1 -1
- package/dist/collection/components/pds-textarea/pds-textarea.css +1 -1
- package/dist/collection/components/pds-textarea/pds-textarea.js +8 -5
- package/dist/collection/components/pds-textarea/pds-textarea.js.map +1 -1
- package/dist/collection/components/pds-tooltip/pds-tooltip.css +1 -1
- package/dist/collection/components/pds-tooltip/pds-tooltip.js +3 -3
- package/dist/collection/components/pds-tooltip/pds-tooltip.js.map +1 -1
- package/dist/collection/utils/form.js +15 -0
- package/dist/collection/utils/form.js.map +1 -1
- package/dist/collection/utils/types.js.map +1 -1
- package/dist/docs.json +341 -17
- package/dist/esm/form-DwjNklzi.js +47 -0
- package/dist/esm/form-DwjNklzi.js.map +1 -0
- package/dist/esm/{index-D4MkIUXU.js → index-D4zJBIgl.js} +3 -3
- package/dist/esm/index-D4zJBIgl.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mock-pds-modal.entry.js +1 -1
- package/dist/esm/mock-pds-modal.entry.js.map +1 -1
- package/dist/esm/pds-accordion.entry.js +1 -1
- package/dist/esm/pds-avatar.entry.js +1 -1
- package/dist/esm/pds-button.entry.js +2 -2
- package/dist/esm/pds-button.entry.js.map +1 -1
- package/dist/esm/pds-checkbox.entry.js +8 -5
- package/dist/esm/pds-checkbox.entry.js.map +1 -1
- package/dist/esm/pds-chip.entry.js +3 -3
- package/dist/esm/pds-chip.entry.js.map +1 -1
- package/dist/esm/pds-combobox.entry.js +398 -40
- package/dist/esm/pds-combobox.entry.js.map +1 -1
- package/dist/esm/pds-copytext.entry.js +4 -4
- package/dist/esm/pds-copytext.entry.js.map +1 -1
- package/dist/esm/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu.entry.js.map +1 -1
- package/dist/esm/pds-filter.entry.js +4 -4
- package/dist/esm/pds-filter.entry.js.map +1 -1
- package/dist/esm/pds-input.entry.js +3 -3
- package/dist/esm/pds-input.entry.js.map +1 -1
- package/dist/esm/pds-link.entry.js +1 -1
- package/dist/esm/pds-modal.entry.js +1 -1
- package/dist/esm/pds-modal.entry.js.map +1 -1
- package/dist/esm/pds-popover.entry.js +118 -13
- package/dist/esm/pds-popover.entry.js.map +1 -1
- package/dist/esm/pds-radio.entry.js +12 -6
- package/dist/esm/pds-radio.entry.js.map +1 -1
- package/dist/esm/pds-select.entry.js +20 -5
- package/dist/esm/pds-select.entry.js.map +1 -1
- package/dist/esm/pds-sortable-item.entry.js +1 -1
- package/dist/esm/pds-switch.entry.js +8 -5
- package/dist/esm/pds-switch.entry.js.map +1 -1
- package/dist/esm/pds-tab.entry.js +1 -1
- package/dist/esm/pds-tab.entry.js.map +1 -1
- package/dist/esm/pds-table-cell.entry.js +1 -1
- package/dist/esm/pds-table-cell.entry.js.map +1 -1
- package/dist/esm/pds-table-head-cell.entry.js +2 -2
- package/dist/esm/pds-table-head-cell.entry.js.map +1 -1
- package/dist/esm/pds-table-head.entry.js +1 -1
- package/dist/esm/pds-table-head.entry.js.map +1 -1
- package/dist/esm/pds-table-row.entry.js +1 -1
- package/dist/esm/pds-table-row.entry.js.map +1 -1
- package/dist/esm/pds-table.entry.js +1 -1
- package/dist/esm/pds-table.entry.js.map +1 -1
- package/dist/esm/pds-tabs.entry.js +14 -4
- package/dist/esm/pds-tabs.entry.js.map +1 -1
- package/dist/esm/pds-textarea.entry.js +10 -7
- package/dist/esm/pds-textarea.entry.js.map +1 -1
- package/dist/esm/pds-tooltip.entry.js +4 -4
- package/dist/esm/pds-tooltip.entry.js.map +1 -1
- package/dist/esm/pine-core.js +1 -1
- package/dist/esm-es5/form-DwjNklzi.js +2 -0
- package/dist/esm-es5/form-DwjNklzi.js.map +1 -0
- package/dist/esm-es5/{index-D4MkIUXU.js → index-D4zJBIgl.js} +1 -1
- package/dist/esm-es5/index-D4zJBIgl.js.map +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
- package/dist/esm-es5/mock-pds-modal.entry.js.map +1 -1
- package/dist/esm-es5/pds-accordion.entry.js +1 -1
- package/dist/esm-es5/pds-avatar.entry.js +1 -1
- package/dist/esm-es5/pds-button.entry.js +1 -1
- package/dist/esm-es5/pds-button.entry.js.map +1 -1
- package/dist/esm-es5/pds-checkbox.entry.js +1 -1
- package/dist/esm-es5/pds-checkbox.entry.js.map +1 -1
- package/dist/esm-es5/pds-chip.entry.js +1 -1
- package/dist/esm-es5/pds-chip.entry.js.map +1 -1
- package/dist/esm-es5/pds-combobox.entry.js +1 -1
- package/dist/esm-es5/pds-combobox.entry.js.map +1 -1
- package/dist/esm-es5/pds-copytext.entry.js +1 -1
- package/dist/esm-es5/pds-copytext.entry.js.map +1 -1
- package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu.entry.js.map +1 -1
- package/dist/esm-es5/pds-filter.entry.js +1 -1
- package/dist/esm-es5/pds-filter.entry.js.map +1 -1
- package/dist/esm-es5/pds-input.entry.js +1 -1
- package/dist/esm-es5/pds-input.entry.js.map +1 -1
- package/dist/esm-es5/pds-link.entry.js +1 -1
- package/dist/esm-es5/pds-modal.entry.js +1 -1
- package/dist/esm-es5/pds-modal.entry.js.map +1 -1
- package/dist/esm-es5/pds-popover.entry.js +1 -1
- package/dist/esm-es5/pds-popover.entry.js.map +1 -1
- package/dist/esm-es5/pds-radio.entry.js +1 -1
- package/dist/esm-es5/pds-radio.entry.js.map +1 -1
- package/dist/esm-es5/pds-select.entry.js +1 -1
- package/dist/esm-es5/pds-select.entry.js.map +1 -1
- package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
- package/dist/esm-es5/pds-switch.entry.js +1 -1
- package/dist/esm-es5/pds-switch.entry.js.map +1 -1
- package/dist/esm-es5/pds-tab.entry.js +1 -1
- package/dist/esm-es5/pds-tab.entry.js.map +1 -1
- package/dist/esm-es5/pds-table-cell.entry.js +1 -1
- package/dist/esm-es5/pds-table-cell.entry.js.map +1 -1
- package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
- package/dist/esm-es5/pds-table-head-cell.entry.js.map +1 -1
- package/dist/esm-es5/pds-table-head.entry.js +1 -1
- package/dist/esm-es5/pds-table-head.entry.js.map +1 -1
- package/dist/esm-es5/pds-table-row.entry.js +1 -1
- package/dist/esm-es5/pds-table-row.entry.js.map +1 -1
- package/dist/esm-es5/pds-table.entry.js +1 -1
- package/dist/esm-es5/pds-table.entry.js.map +1 -1
- package/dist/esm-es5/pds-tabs.entry.js +1 -1
- package/dist/esm-es5/pds-tabs.entry.js.map +1 -1
- package/dist/esm-es5/pds-textarea.entry.js +1 -1
- package/dist/esm-es5/pds-textarea.entry.js.map +1 -1
- package/dist/esm-es5/pds-tooltip.entry.js +1 -1
- package/dist/esm-es5/pds-tooltip.entry.js.map +1 -1
- package/dist/esm-es5/pine-core.js +1 -1
- package/dist/pine-core/mock-pds-modal.entry.esm.js.map +1 -1
- package/dist/pine-core/p-00346c62.system.entry.js +2 -0
- package/dist/pine-core/p-00346c62.system.entry.js.map +1 -0
- package/dist/pine-core/{p-8ded79aa.system.entry.js → p-0486ecc6.system.entry.js} +2 -2
- package/dist/pine-core/{p-8ded79aa.system.entry.js.map → p-0486ecc6.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-af56cb57.entry.js → p-100de2b7.entry.js} +2 -2
- package/dist/pine-core/p-1b932ee3.entry.js +2 -0
- package/dist/pine-core/p-1b932ee3.entry.js.map +1 -0
- package/dist/pine-core/p-20466115.entry.js +2 -0
- package/dist/pine-core/p-20466115.entry.js.map +1 -0
- package/dist/pine-core/{p-72d87dc6.system.entry.js → p-2054b5cb.system.entry.js} +2 -2
- package/dist/pine-core/{p-c0601420.system.entry.js → p-2aab28b1.system.entry.js} +2 -2
- package/dist/pine-core/p-3dce3bc0.system.entry.js +2 -0
- package/dist/pine-core/p-3dce3bc0.system.entry.js.map +1 -0
- package/dist/pine-core/p-45d574f1.system.entry.js +2 -0
- package/dist/pine-core/p-45d574f1.system.entry.js.map +1 -0
- package/dist/pine-core/p-465e3418.system.entry.js +2 -0
- package/dist/pine-core/p-465e3418.system.entry.js.map +1 -0
- package/dist/pine-core/p-4xv5UVkx.system.js.map +1 -0
- package/dist/pine-core/p-538b3902.system.entry.js +2 -0
- package/dist/pine-core/p-538b3902.system.entry.js.map +1 -0
- package/dist/pine-core/p-61a25ab2.entry.js +2 -0
- package/dist/pine-core/p-61a25ab2.entry.js.map +1 -0
- package/dist/pine-core/p-6381a811.system.entry.js +4 -0
- package/dist/pine-core/p-6381a811.system.entry.js.map +1 -0
- package/dist/pine-core/p-6c36cab6.entry.js +2 -0
- package/dist/pine-core/p-6c36cab6.entry.js.map +1 -0
- package/dist/pine-core/p-6ed297cb.entry.js +2 -0
- package/dist/pine-core/p-6ed297cb.entry.js.map +1 -0
- package/dist/pine-core/p-708e963c.system.entry.js +2 -0
- package/dist/pine-core/p-708e963c.system.entry.js.map +1 -0
- package/dist/pine-core/p-7090d42d.system.entry.js +2 -0
- package/dist/pine-core/p-7090d42d.system.entry.js.map +1 -0
- package/dist/pine-core/{p-896e2f1b.entry.js → p-725c350c.entry.js} +2 -2
- package/dist/pine-core/{p-896e2f1b.entry.js.map → p-725c350c.entry.js.map} +1 -1
- package/dist/pine-core/p-75187352.system.entry.js +2 -0
- package/dist/pine-core/p-75187352.system.entry.js.map +1 -0
- package/dist/pine-core/p-79422986.entry.js +2 -0
- package/dist/pine-core/p-79422986.entry.js.map +1 -0
- package/dist/pine-core/p-81bc089e.entry.js +2 -0
- package/dist/pine-core/p-81bc089e.entry.js.map +1 -0
- package/dist/pine-core/p-85c41629.entry.js +2 -0
- package/dist/pine-core/p-85c41629.entry.js.map +1 -0
- package/dist/pine-core/p-86263a62.entry.js +2 -0
- package/dist/pine-core/p-86263a62.entry.js.map +1 -0
- package/dist/pine-core/p-87ed43d5.entry.js +2 -0
- package/dist/pine-core/p-87ed43d5.entry.js.map +1 -0
- package/dist/pine-core/{p-a54d6a53.entry.js → p-88773b86.entry.js} +2 -2
- package/dist/pine-core/p-8b4fb3f0.entry.js +2 -0
- package/dist/pine-core/p-8b4fb3f0.entry.js.map +1 -0
- package/dist/pine-core/p-8b5fc4b4.system.entry.js +2 -0
- package/dist/pine-core/p-8b5fc4b4.system.entry.js.map +1 -0
- package/dist/pine-core/p-94183716.entry.js +2 -0
- package/dist/pine-core/p-94183716.entry.js.map +1 -0
- package/dist/pine-core/p-9766923f.entry.js +2 -0
- package/dist/pine-core/p-9766923f.entry.js.map +1 -0
- package/dist/pine-core/p-9b335a9f.entry.js +2 -0
- package/dist/pine-core/p-9b335a9f.entry.js.map +1 -0
- package/dist/pine-core/p-9c579956.system.entry.js +2 -0
- package/dist/pine-core/p-9c579956.system.entry.js.map +1 -0
- package/dist/pine-core/p-9cf2b7a6.entry.js +2 -0
- package/dist/pine-core/p-9cf2b7a6.entry.js.map +1 -0
- package/dist/pine-core/{p-COwpA8ab.system.js.map → p-B-Doh1Wu.system.js.map} +1 -1
- package/dist/pine-core/{p-BSkbMuB5.system.js → p-BG99uNIQ.system.js} +1 -1
- package/dist/pine-core/p-BG99uNIQ.system.js.map +1 -0
- package/dist/pine-core/p-BHavepTY.system.js +2 -0
- package/dist/pine-core/p-BHavepTY.system.js.map +1 -0
- package/dist/pine-core/p-BLC5kuro.system.js.map +1 -0
- package/dist/pine-core/p-BPjnTOEL.system.js +1 -1
- package/dist/pine-core/{p-X5M4eshC.system.js.map → p-BRIdBthP.system.js.map} +1 -1
- package/dist/pine-core/{p-B57Bybw-.system.js.map → p-BkPtASB1.system.js.map} +1 -1
- package/dist/pine-core/p-Bkfqi7zE.system.js.map +1 -0
- package/dist/pine-core/p-C1KChp5Q.system.js.map +1 -0
- package/dist/pine-core/p-C2W-sHx5.system.js.map +1 -0
- package/dist/pine-core/p-CIBXMJd-.system.js.map +1 -0
- package/dist/pine-core/p-CJNB_wrl.system.js.map +1 -0
- package/dist/pine-core/p-CSa_b_JX.system.js.map +1 -0
- package/dist/pine-core/p-Cid662up.system.js.map +1 -0
- package/dist/pine-core/p-Cqzmj3D8.system.js.map +1 -0
- package/dist/pine-core/p-Cxlv_2hD.system.js.map +1 -0
- package/dist/pine-core/p-D0foS5EP.system.js.map +1 -0
- package/dist/pine-core/{p-D4MkIUXU.js → p-D4zJBIgl.js} +1 -1
- package/dist/pine-core/p-D4zJBIgl.js.map +1 -0
- package/dist/pine-core/p-DCjZr2HA.system.js.map +1 -0
- package/dist/pine-core/p-DN3VK2yy.system.js.map +1 -0
- package/dist/pine-core/{p-DgE9ds9o.system.js.map → p-DOqVoXeA.system.js.map} +1 -1
- package/dist/pine-core/p-DW3lkDNz.system.js.map +1 -0
- package/dist/pine-core/p-DfrSuf6X.system.js.map +1 -0
- package/dist/pine-core/p-DpemOPFJ.system.js.map +1 -0
- package/dist/pine-core/p-DpzRSULT.system.js.map +1 -0
- package/dist/pine-core/p-DtdXdmNp.system.js.map +1 -0
- package/dist/pine-core/p-Dw05F6Xg.system.js.map +1 -0
- package/dist/pine-core/p-DwjNklzi.js +2 -0
- package/dist/pine-core/p-DwjNklzi.js.map +1 -0
- package/dist/pine-core/p-GrmqKqN8.system.js.map +1 -0
- package/dist/pine-core/p-HHZU8rBT.system.js.map +1 -0
- package/dist/pine-core/p-a2708028.entry.js +2 -0
- package/dist/pine-core/p-a2708028.entry.js.map +1 -0
- package/dist/pine-core/{p-46820152.entry.js → p-a3785977.entry.js} +2 -2
- package/dist/pine-core/p-a707a7da.system.entry.js +2 -0
- package/dist/pine-core/p-a707a7da.system.entry.js.map +1 -0
- package/dist/pine-core/p-acd87a10.entry.js +2 -0
- package/dist/pine-core/p-acd87a10.entry.js.map +1 -0
- package/dist/pine-core/p-ae4ec5cf.system.entry.js +2 -0
- package/dist/pine-core/p-ae4ec5cf.system.entry.js.map +1 -0
- package/dist/pine-core/p-b23dd01c.entry.js +2 -0
- package/dist/pine-core/p-b23dd01c.entry.js.map +1 -0
- package/dist/pine-core/p-b9aafec7.system.entry.js +2 -0
- package/dist/pine-core/p-b9aafec7.system.entry.js.map +1 -0
- package/dist/pine-core/p-c3579585.system.entry.js +2 -0
- package/dist/pine-core/p-c3579585.system.entry.js.map +1 -0
- package/dist/pine-core/p-cffc98ae.entry.js +3 -0
- package/dist/pine-core/p-cffc98ae.entry.js.map +1 -0
- package/dist/pine-core/{p-559b4ebc.entry.js → p-d1b27fa4.entry.js} +2 -2
- package/dist/pine-core/p-d2b15290.system.entry.js +2 -0
- package/dist/pine-core/p-d2b15290.system.entry.js.map +1 -0
- package/dist/pine-core/p-d4d22aee.entry.js +2 -0
- package/dist/pine-core/p-d4d22aee.entry.js.map +1 -0
- package/dist/pine-core/{p-c63e7909.system.entry.js → p-dace69e7.system.entry.js} +2 -2
- package/dist/pine-core/p-e34c1224.system.entry.js +2 -0
- package/dist/pine-core/p-e34c1224.system.entry.js.map +1 -0
- package/dist/pine-core/p-e5adbf74.system.entry.js +2 -0
- package/dist/pine-core/p-e5adbf74.system.entry.js.map +1 -0
- package/dist/pine-core/p-e6085566.system.entry.js +2 -0
- package/dist/pine-core/p-e6085566.system.entry.js.map +1 -0
- package/dist/pine-core/p-e683e197.system.entry.js +2 -0
- package/dist/pine-core/p-e683e197.system.entry.js.map +1 -0
- package/dist/pine-core/p-e6b051e8.system.entry.js +2 -0
- package/dist/pine-core/p-e6b051e8.system.entry.js.map +1 -0
- package/dist/pine-core/{p-ab4307c7.system.entry.js → p-e702a8dc.system.entry.js} +2 -2
- package/dist/pine-core/p-f15cd180.entry.js +2 -0
- package/dist/pine-core/p-f15cd180.entry.js.map +1 -0
- package/dist/pine-core/p-f6d0bd39.entry.js +2 -0
- package/dist/pine-core/p-f6d0bd39.entry.js.map +1 -0
- package/dist/pine-core/p-f92d7570.system.entry.js +2 -0
- package/dist/pine-core/p-f92d7570.system.entry.js.map +1 -0
- package/dist/pine-core/{p-d325287b.entry.js.map → p-ozqEY4Zc.system.js.map} +1 -1
- package/dist/pine-core/pds-button.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-checkbox.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-chip.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-combobox.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-copytext.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-dropdown-menu.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-filter.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-input.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-modal.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-popover.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-radio.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-select.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-switch.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-tab.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-cell.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-head-cell.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-head.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-row.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-tabs.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-textarea.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-tooltip.entry.esm.js.map +1 -1
- package/dist/pine-core/pine-core.css +1 -1
- package/dist/pine-core/pine-core.esm.js +1 -1
- package/dist/types/components/pds-checkbox/pds-checkbox.d.ts +1 -0
- package/dist/types/components/pds-chip/pds-chip.d.ts +3 -2
- package/dist/types/components/pds-combobox/pds-combobox.d.ts +56 -2
- package/dist/types/components/pds-popover/pds-popover.d.ts +33 -2
- package/dist/types/components/pds-popover/popover-interface.d.ts +8 -0
- package/dist/types/components/pds-radio/pds-radio.d.ts +3 -0
- package/dist/types/components/pds-select/pds-select.d.ts +6 -0
- package/dist/types/components/pds-switch/pds-switch.d.ts +1 -0
- package/dist/types/components/pds-textarea/pds-textarea.d.ts +1 -0
- package/dist/types/components.d.ts +94 -10
- package/dist/types/utils/form.d.ts +9 -0
- package/dist/types/utils/types.d.ts +2 -0
- package/hydrate/index.js +629 -101
- package/hydrate/index.mjs +629 -101
- package/package.json +2 -2
- package/dist/cjs/form-Bx4nzJBo.js.map +0 -1
- package/dist/cjs/index-CTirFLR-.js.map +0 -1
- package/dist/esm/form-DTL_39D_.js +0 -32
- package/dist/esm/form-DTL_39D_.js.map +0 -1
- package/dist/esm/index-D4MkIUXU.js.map +0 -1
- package/dist/esm-es5/form-DTL_39D_.js +0 -2
- package/dist/esm-es5/form-DTL_39D_.js.map +0 -1
- package/dist/esm-es5/index-D4MkIUXU.js.map +0 -1
- package/dist/pine-core/p-0075bbbe.system.entry.js +0 -2
- package/dist/pine-core/p-0075bbbe.system.entry.js.map +0 -1
- package/dist/pine-core/p-0975b749.system.entry.js +0 -2
- package/dist/pine-core/p-0975b749.system.entry.js.map +0 -1
- package/dist/pine-core/p-0befa8f0.entry.js +0 -2
- package/dist/pine-core/p-0befa8f0.entry.js.map +0 -1
- package/dist/pine-core/p-0d18171c.system.entry.js +0 -2
- package/dist/pine-core/p-0d18171c.system.entry.js.map +0 -1
- package/dist/pine-core/p-1773aeac.system.entry.js +0 -2
- package/dist/pine-core/p-1773aeac.system.entry.js.map +0 -1
- package/dist/pine-core/p-265372d3.entry.js +0 -2
- package/dist/pine-core/p-265372d3.entry.js.map +0 -1
- package/dist/pine-core/p-29b2af94.entry.js +0 -2
- package/dist/pine-core/p-29b2af94.entry.js.map +0 -1
- package/dist/pine-core/p-2b452883.system.entry.js +0 -2
- package/dist/pine-core/p-2b452883.system.entry.js.map +0 -1
- package/dist/pine-core/p-30e8c3ea.entry.js +0 -2
- package/dist/pine-core/p-30e8c3ea.entry.js.map +0 -1
- package/dist/pine-core/p-31f6fcc1.entry.js +0 -2
- package/dist/pine-core/p-31f6fcc1.entry.js.map +0 -1
- package/dist/pine-core/p-3b20aa93.system.entry.js +0 -2
- package/dist/pine-core/p-3b20aa93.system.entry.js.map +0 -1
- package/dist/pine-core/p-3e7933bf.entry.js +0 -2
- package/dist/pine-core/p-3e7933bf.entry.js.map +0 -1
- package/dist/pine-core/p-4534e8cc.system.entry.js +0 -2
- package/dist/pine-core/p-4534e8cc.system.entry.js.map +0 -1
- package/dist/pine-core/p-4b3a8cab.entry.js +0 -2
- package/dist/pine-core/p-4b3a8cab.entry.js.map +0 -1
- package/dist/pine-core/p-4c8bebd8.system.entry.js +0 -2
- package/dist/pine-core/p-4c8bebd8.system.entry.js.map +0 -1
- package/dist/pine-core/p-4dda1edf.entry.js +0 -2
- package/dist/pine-core/p-4dda1edf.entry.js.map +0 -1
- package/dist/pine-core/p-4e55730d.entry.js +0 -2
- package/dist/pine-core/p-4e55730d.entry.js.map +0 -1
- package/dist/pine-core/p-56f6f106.entry.js +0 -2
- package/dist/pine-core/p-56f6f106.entry.js.map +0 -1
- package/dist/pine-core/p-5cc0244d.system.entry.js +0 -2
- package/dist/pine-core/p-5cc0244d.system.entry.js.map +0 -1
- package/dist/pine-core/p-74f03e75.entry.js +0 -2
- package/dist/pine-core/p-74f03e75.entry.js.map +0 -1
- package/dist/pine-core/p-7b0517e5.system.entry.js +0 -2
- package/dist/pine-core/p-7b0517e5.system.entry.js.map +0 -1
- package/dist/pine-core/p-7b66bc50.entry.js +0 -3
- package/dist/pine-core/p-7b66bc50.entry.js.map +0 -1
- package/dist/pine-core/p-7eb22880.entry.js +0 -2
- package/dist/pine-core/p-7eb22880.entry.js.map +0 -1
- package/dist/pine-core/p-8501429f.entry.js +0 -2
- package/dist/pine-core/p-8501429f.entry.js.map +0 -1
- package/dist/pine-core/p-94fe15b0.system.entry.js +0 -2
- package/dist/pine-core/p-94fe15b0.system.entry.js.map +0 -1
- package/dist/pine-core/p-95aee0b1.entry.js +0 -2
- package/dist/pine-core/p-95aee0b1.entry.js.map +0 -1
- package/dist/pine-core/p-B02VgXkx.system.js.map +0 -1
- package/dist/pine-core/p-BFiM1S8V.system.js.map +0 -1
- package/dist/pine-core/p-BG7_qxVr.system.js +0 -2
- package/dist/pine-core/p-BG7_qxVr.system.js.map +0 -1
- package/dist/pine-core/p-BJhtHwq5.system.js.map +0 -1
- package/dist/pine-core/p-BQFgzIQT.system.js.map +0 -1
- package/dist/pine-core/p-BSkbMuB5.system.js.map +0 -1
- package/dist/pine-core/p-BigOVPun.system.js.map +0 -1
- package/dist/pine-core/p-BmFGXXkm.system.js.map +0 -1
- package/dist/pine-core/p-CHVzHNgU.system.js.map +0 -1
- package/dist/pine-core/p-CV0Lw9gs.system.js.map +0 -1
- package/dist/pine-core/p-CZqgW7e3.system.js.map +0 -1
- package/dist/pine-core/p-Cc1q-FuD.system.js.map +0 -1
- package/dist/pine-core/p-D3SrjYeb.system.js.map +0 -1
- package/dist/pine-core/p-D4MkIUXU.js.map +0 -1
- package/dist/pine-core/p-D9veIL-g.system.js.map +0 -1
- package/dist/pine-core/p-DGFR-x7P.system.js.map +0 -1
- package/dist/pine-core/p-DTL_39D_.js +0 -2
- package/dist/pine-core/p-DTL_39D_.js.map +0 -1
- package/dist/pine-core/p-DeR0sSWy.system.js.map +0 -1
- package/dist/pine-core/p-Df597YUK.system.js.map +0 -1
- package/dist/pine-core/p-Ek6vvXfI.system.js.map +0 -1
- package/dist/pine-core/p-WO5h6NYA.system.js.map +0 -1
- package/dist/pine-core/p-Z5rOSkoA.system.js.map +0 -1
- package/dist/pine-core/p-a5cf0088.system.entry.js +0 -2
- package/dist/pine-core/p-a5cf0088.system.entry.js.map +0 -1
- package/dist/pine-core/p-aa2782b9.system.entry.js +0 -2
- package/dist/pine-core/p-aa2782b9.system.entry.js.map +0 -1
- package/dist/pine-core/p-b32d34d0.entry.js +0 -2
- package/dist/pine-core/p-b32d34d0.entry.js.map +0 -1
- package/dist/pine-core/p-b378ca03.entry.js +0 -2
- package/dist/pine-core/p-b378ca03.entry.js.map +0 -1
- package/dist/pine-core/p-b699a14f.system.entry.js +0 -2
- package/dist/pine-core/p-b699a14f.system.entry.js.map +0 -1
- package/dist/pine-core/p-c2d2fe64.system.entry.js +0 -2
- package/dist/pine-core/p-c2d2fe64.system.entry.js.map +0 -1
- package/dist/pine-core/p-d325287b.entry.js +0 -2
- package/dist/pine-core/p-d52d96b5.system.entry.js +0 -4
- package/dist/pine-core/p-d52d96b5.system.entry.js.map +0 -1
- package/dist/pine-core/p-d5c63517.system.entry.js +0 -2
- package/dist/pine-core/p-d5c63517.system.entry.js.map +0 -1
- package/dist/pine-core/p-d65d252d.entry.js +0 -2
- package/dist/pine-core/p-d65d252d.entry.js.map +0 -1
- package/dist/pine-core/p-dbe41087.system.entry.js +0 -2
- package/dist/pine-core/p-dbe41087.system.entry.js.map +0 -1
- package/dist/pine-core/p-e03b7f4a.system.entry.js +0 -2
- package/dist/pine-core/p-e03b7f4a.system.entry.js.map +0 -1
- package/dist/pine-core/p-f6b269ac.entry.js +0 -2
- package/dist/pine-core/p-f6b269ac.entry.js.map +0 -1
- package/dist/pine-core/p-f70aef6e.system.entry.js +0 -2
- package/dist/pine-core/p-f70aef6e.system.entry.js.map +0 -1
- package/dist/pine-core/p-fd3d548f.entry.js +0 -2
- package/dist/pine-core/p-fd3d548f.entry.js.map +0 -1
- package/dist/pine-core/p-fddf82f8.entry.js +0 -2
- package/dist/pine-core/p-fddf82f8.entry.js.map +0 -1
- package/dist/pine-core/p-fdf22be1.system.entry.js +0 -2
- package/dist/pine-core/p-fdf22be1.system.entry.js.map +0 -1
- package/dist/pine-core/p-fe7ece91.system.entry.js +0 -2
- package/dist/pine-core/p-fe7ece91.system.entry.js.map +0 -1
- package/dist/pine-core/p-iM8w34Dq.system.js.map +0 -1
- package/dist/pine-core/p-kbAzjMDU.system.js.map +0 -1
- package/dist/pine-core/p-nawkAoxk.system.js.map +0 -1
- package/dist/pine-core/p-oDk-2Jyq.system.js.map +0 -1
- package/dist/pine-core/p-wlxYjeBe.system.js.map +0 -1
- /package/dist/pine-core/{p-af56cb57.entry.js.map → p-100de2b7.entry.js.map} +0 -0
- /package/dist/pine-core/{p-72d87dc6.system.entry.js.map → p-2054b5cb.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c0601420.system.entry.js.map → p-2aab28b1.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a54d6a53.entry.js.map → p-88773b86.entry.js.map} +0 -0
- /package/dist/pine-core/{p-46820152.entry.js.map → p-a3785977.entry.js.map} +0 -0
- /package/dist/pine-core/{p-559b4ebc.entry.js.map → p-d1b27fa4.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c63e7909.system.entry.js.map → p-dace69e7.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ab4307c7.system.entry.js.map → p-e702a8dc.system.entry.js.map} +0 -0
|
@@ -45,7 +45,7 @@ export class PdsCombobox {
|
|
|
45
45
|
*/
|
|
46
46
|
this.mode = 'filter';
|
|
47
47
|
/**
|
|
48
|
-
* Determines the combobox trigger: 'input' (editable input)
|
|
48
|
+
* Determines the combobox trigger: 'input' (editable input), 'button' (button-like, non-editable), or 'chip' (chip-like, non-editable).
|
|
49
49
|
* @default 'input'
|
|
50
50
|
*/
|
|
51
51
|
this.trigger = 'input';
|
|
@@ -59,10 +59,29 @@ export class PdsCombobox {
|
|
|
59
59
|
* @default 'secondary'
|
|
60
60
|
*/
|
|
61
61
|
this.triggerVariant = 'secondary';
|
|
62
|
+
/**
|
|
63
|
+
* The sentiment for the chip trigger. Matches Pine chip sentiments.
|
|
64
|
+
* @default 'neutral'
|
|
65
|
+
*/
|
|
66
|
+
this.chipSentiment = 'neutral';
|
|
67
|
+
/**
|
|
68
|
+
* Whether the chip trigger should be displayed in a larger size.
|
|
69
|
+
* @default false
|
|
70
|
+
*/
|
|
71
|
+
this.chipLarge = false;
|
|
72
|
+
/**
|
|
73
|
+
* Whether a dot should be displayed on the chip trigger.
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
this.chipDot = false;
|
|
62
77
|
/**
|
|
63
78
|
* The value of the combobox input.
|
|
64
79
|
*/
|
|
65
80
|
this.value = '';
|
|
81
|
+
/**
|
|
82
|
+
* Internal state for the display text shown in the input/trigger
|
|
83
|
+
*/
|
|
84
|
+
this.displayText = '';
|
|
66
85
|
/**
|
|
67
86
|
* Internal state for filtered options and group labels
|
|
68
87
|
*/
|
|
@@ -83,11 +102,16 @@ export class PdsCombobox {
|
|
|
83
102
|
* Internal state for the sanitized layout content of the selected option
|
|
84
103
|
*/
|
|
85
104
|
this.selectedOptionLayoutContent = '';
|
|
105
|
+
/**
|
|
106
|
+
* Internal state to track chip properties for automatic rendering
|
|
107
|
+
*/
|
|
108
|
+
this.selectedOptionChipProps = null;
|
|
86
109
|
this.optionEls = [];
|
|
87
110
|
this.allItems = [];
|
|
111
|
+
this.isUpdatingFromSelection = false;
|
|
88
112
|
this.handleInput = (e) => {
|
|
89
113
|
const target = e.target;
|
|
90
|
-
this.
|
|
114
|
+
this.displayText = target.value;
|
|
91
115
|
this.isOpen = true;
|
|
92
116
|
this.filterOptions();
|
|
93
117
|
setTimeout(() => this.openDropdownPositioning(), 0);
|
|
@@ -97,6 +121,7 @@ export class PdsCombobox {
|
|
|
97
121
|
if (!this.isOpen) {
|
|
98
122
|
this.isOpen = true;
|
|
99
123
|
this.filterOptions();
|
|
124
|
+
this.setInitialHighlightedIndex();
|
|
100
125
|
setTimeout(() => this.openDropdownPositioning(), 0);
|
|
101
126
|
}
|
|
102
127
|
};
|
|
@@ -106,10 +131,7 @@ export class PdsCombobox {
|
|
|
106
131
|
this.isOpen = true;
|
|
107
132
|
this.filterOptions();
|
|
108
133
|
// Set highlighted index immediately for testing
|
|
109
|
-
|
|
110
|
-
if (selectableOptions.length > 0) {
|
|
111
|
-
this.highlightedIndex = 0;
|
|
112
|
-
}
|
|
134
|
+
this.setInitialHighlightedIndex();
|
|
113
135
|
setTimeout(() => {
|
|
114
136
|
this.openDropdownPositioning();
|
|
115
137
|
// For input trigger, keep focus on input and use aria-activedescendant
|
|
@@ -188,6 +210,13 @@ export class PdsCombobox {
|
|
|
188
210
|
this.restoreFocusToTrigger();
|
|
189
211
|
}
|
|
190
212
|
break;
|
|
213
|
+
case ' ':
|
|
214
|
+
e.preventDefault();
|
|
215
|
+
if (this.highlightedIndex >= 0 && this.highlightedIndex < selectableOptions.length) {
|
|
216
|
+
this.handleOptionClick(selectableOptions[this.highlightedIndex]);
|
|
217
|
+
this.restoreFocusToTrigger();
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
191
220
|
case 'Escape':
|
|
192
221
|
e.preventDefault();
|
|
193
222
|
this.isOpen = false;
|
|
@@ -232,12 +261,9 @@ export class PdsCombobox {
|
|
|
232
261
|
if (this.isOpen) {
|
|
233
262
|
this.filterOptions();
|
|
234
263
|
// Set highlighted index and prepare for keyboard navigation
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
// For button trigger, prepare for arrow-key navigation mode
|
|
239
|
-
this.isArrowKeyNavigationMode = true;
|
|
240
|
-
}
|
|
264
|
+
this.setInitialHighlightedIndex();
|
|
265
|
+
// For button trigger, prepare for arrow-key navigation mode
|
|
266
|
+
this.isArrowKeyNavigationMode = true;
|
|
241
267
|
setTimeout(() => this.openDropdownPositioning(), 0);
|
|
242
268
|
}
|
|
243
269
|
else {
|
|
@@ -253,10 +279,7 @@ export class PdsCombobox {
|
|
|
253
279
|
this.isOpen = true;
|
|
254
280
|
this.filterOptions();
|
|
255
281
|
// Set highlighted index immediately
|
|
256
|
-
|
|
257
|
-
if (selectableOptions.length > 0) {
|
|
258
|
-
this.highlightedIndex = 0;
|
|
259
|
-
}
|
|
282
|
+
this.setInitialHighlightedIndex();
|
|
260
283
|
setTimeout(() => {
|
|
261
284
|
this.openDropdownPositioning();
|
|
262
285
|
// For all button trigger keyboard opening, focus the first option so subsequent navigation works
|
|
@@ -297,24 +320,110 @@ export class PdsCombobox {
|
|
|
297
320
|
this.highlightedIndex = -1;
|
|
298
321
|
this.isArrowKeyNavigationMode = false; // Reset arrow-key navigation mode
|
|
299
322
|
this.updateAriaActiveDescendant(); // Clear aria-activedescendant
|
|
300
|
-
// If there's a selected option but the
|
|
301
|
-
if (this.selectedOption && this.
|
|
302
|
-
this.
|
|
323
|
+
// If there's a selected option but the display text doesn't match, restore the selected option's display text
|
|
324
|
+
if (this.selectedOption && this.displayText !== this.getOptionLabel(this.selectedOption)) {
|
|
325
|
+
this.displayText = this.getOptionLabel(this.selectedOption);
|
|
326
|
+
// The @Watch('selectedOption') will handle value and form internals if needed
|
|
303
327
|
}
|
|
304
328
|
}
|
|
305
329
|
};
|
|
306
330
|
}
|
|
331
|
+
connectedCallback() {
|
|
332
|
+
// Initialize ElementInternals for form association
|
|
333
|
+
if (this.el.attachInternals) {
|
|
334
|
+
this.internals = this.el.attachInternals();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
307
337
|
componentWillLoad() {
|
|
308
338
|
this.updateOptions();
|
|
309
339
|
}
|
|
340
|
+
componentDidLoad() {
|
|
341
|
+
var _a, _b, _c;
|
|
342
|
+
// Check for value-based preselection if no option is selected yet
|
|
343
|
+
if (!this.selectedOption && this.value && this.optionEls.length > 0) {
|
|
344
|
+
const matchingOption = this.optionEls.find(opt => opt.value === this.value);
|
|
345
|
+
if (matchingOption) {
|
|
346
|
+
this.setSelectedOption(matchingOption);
|
|
347
|
+
// Update the display text to show the option's text content
|
|
348
|
+
this.displayText = this.getOptionLabel(matchingOption);
|
|
349
|
+
// Keep this.value as the actual option value
|
|
350
|
+
// this.value remains unchanged (already matches matchingOption.value)
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Initialize form value with current value
|
|
354
|
+
if (this.internals) {
|
|
355
|
+
try {
|
|
356
|
+
this.internals.setFormValue((_c = (_b = (_a = this.selectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : this.value) !== null && _c !== void 0 ? _c : '');
|
|
357
|
+
}
|
|
358
|
+
catch (e) {
|
|
359
|
+
// ElementInternals.setFormValue not available in unit tests
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
310
363
|
handleValueChange() {
|
|
311
364
|
this.filterOptions();
|
|
365
|
+
// Sync with form internals for form association
|
|
366
|
+
if (this.internals) {
|
|
367
|
+
try {
|
|
368
|
+
this.internals.setFormValue(this.value);
|
|
369
|
+
}
|
|
370
|
+
catch (e) {
|
|
371
|
+
// ElementInternals.setFormValue not available in unit tests
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// Find and select option that matches the value (for external value changes)
|
|
375
|
+
// Only do this if we're not already updating from a selection
|
|
376
|
+
if (!this.isUpdatingFromSelection && this.value && this.optionEls.length > 0) {
|
|
377
|
+
const currentSelectedValue = this.selectedOption ? this.selectedOption.value : null;
|
|
378
|
+
// If the value doesn't match the currently selected option's value, we need to update
|
|
379
|
+
if (this.value !== currentSelectedValue) {
|
|
380
|
+
const matchingOption = this.optionEls.find(opt => opt.value === this.value);
|
|
381
|
+
if (matchingOption) {
|
|
382
|
+
this.isUpdatingFromSelection = true;
|
|
383
|
+
this.setSelectedOption(matchingOption);
|
|
384
|
+
// Update the display text to show the option's text content
|
|
385
|
+
this.displayText = this.getOptionLabel(matchingOption);
|
|
386
|
+
// Keep this.value as the actual option value (already correct)
|
|
387
|
+
this.isUpdatingFromSelection = false;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
312
391
|
}
|
|
313
392
|
handleSelectedOptionChange() {
|
|
314
393
|
// Update the layout content when selected option changes
|
|
315
394
|
this.selectedOptionLayoutContent = this.selectedOption && this.isOptionLayout(this.selectedOption)
|
|
316
395
|
? this.getOptionLayoutContent(this.selectedOption)
|
|
317
396
|
: '';
|
|
397
|
+
// Update chip properties for automatic rendering when selected option changes
|
|
398
|
+
this.selectedOptionChipProps = this.selectedOption && this.isOptionChip(this.selectedOption)
|
|
399
|
+
? this.getOptionChipProps(this.selectedOption)
|
|
400
|
+
: null;
|
|
401
|
+
// Update display text when selected option changes
|
|
402
|
+
if (this.selectedOption) {
|
|
403
|
+
this.displayText = this.getOptionLabel(this.selectedOption);
|
|
404
|
+
this.value = this.selectedOption.value;
|
|
405
|
+
// Update form internals with the actual option value
|
|
406
|
+
if (this.internals) {
|
|
407
|
+
try {
|
|
408
|
+
this.internals.setFormValue(this.selectedOption.value);
|
|
409
|
+
}
|
|
410
|
+
catch (e) {
|
|
411
|
+
// ElementInternals.setFormValue not available in unit tests
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
this.displayText = '';
|
|
417
|
+
this.value = '';
|
|
418
|
+
if (this.internals) {
|
|
419
|
+
try {
|
|
420
|
+
this.internals.setFormValue('');
|
|
421
|
+
}
|
|
422
|
+
catch (e) {
|
|
423
|
+
// ElementInternals.setFormValue not available in unit tests
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
318
427
|
}
|
|
319
428
|
updateOptions() {
|
|
320
429
|
var _a;
|
|
@@ -345,9 +454,29 @@ export class PdsCombobox {
|
|
|
345
454
|
this.allItems.push(el);
|
|
346
455
|
}
|
|
347
456
|
});
|
|
348
|
-
// Set initial selected option
|
|
349
|
-
|
|
350
|
-
|
|
457
|
+
// Set initial selected option based on value property
|
|
458
|
+
let initialSelected = null;
|
|
459
|
+
// Check if value property matches any option
|
|
460
|
+
if (this.value) {
|
|
461
|
+
initialSelected = this.optionEls.find(opt => opt.value === this.value) || null;
|
|
462
|
+
if (initialSelected) {
|
|
463
|
+
// Update the display text to show the option's text content
|
|
464
|
+
this.displayText = this.getOptionLabel(initialSelected);
|
|
465
|
+
// Keep this.value as the actual option value (already correct)
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
// For chip triggers, ensure we always have a selected option
|
|
469
|
+
if (!initialSelected && this.trigger === 'chip' && this.optionEls.length > 0) {
|
|
470
|
+
initialSelected = this.optionEls[0]; // Select first option as default
|
|
471
|
+
this.value = initialSelected.value;
|
|
472
|
+
this.displayText = this.getOptionLabel(initialSelected);
|
|
473
|
+
console.warn('PDS Combobox: Chip triggers should always have a selected option. Automatically selected the first option.');
|
|
474
|
+
}
|
|
475
|
+
// Update selection if we found a different selected option or if we don't have one
|
|
476
|
+
if (initialSelected && initialSelected !== this.selectedOption) {
|
|
477
|
+
this.setSelectedOption(initialSelected);
|
|
478
|
+
}
|
|
479
|
+
else if (!this.selectedOption && initialSelected) {
|
|
351
480
|
this.setSelectedOption(initialSelected);
|
|
352
481
|
}
|
|
353
482
|
this.filterOptions();
|
|
@@ -397,6 +526,22 @@ export class PdsCombobox {
|
|
|
397
526
|
isOptionLayout(option) {
|
|
398
527
|
return this.customOptionLayouts && option.hasAttribute('data-layout');
|
|
399
528
|
}
|
|
529
|
+
// Helper method to check if option has chip attributes (new automatic approach)
|
|
530
|
+
isOptionChip(option) {
|
|
531
|
+
return option.hasAttribute('chip-sentiment') ||
|
|
532
|
+
option.hasAttribute('chip-large') ||
|
|
533
|
+
option.hasAttribute('chip-icon') ||
|
|
534
|
+
option.hasAttribute('chip-dot');
|
|
535
|
+
}
|
|
536
|
+
// Helper method to get chip properties from option attributes
|
|
537
|
+
getOptionChipProps(option) {
|
|
538
|
+
return {
|
|
539
|
+
sentiment: option.getAttribute('chip-sentiment') || 'neutral',
|
|
540
|
+
large: option.hasAttribute('chip-large'),
|
|
541
|
+
icon: option.getAttribute('chip-icon') || undefined,
|
|
542
|
+
dot: option.hasAttribute('chip-dot')
|
|
543
|
+
};
|
|
544
|
+
}
|
|
400
545
|
// Helper method to check if option is selected (single source of truth)
|
|
401
546
|
isOptionSelected(option) {
|
|
402
547
|
return this.selectedOption === option;
|
|
@@ -404,6 +549,13 @@ export class PdsCombobox {
|
|
|
404
549
|
// Helper method to set selected option (centralized state management)
|
|
405
550
|
setSelectedOption(option) {
|
|
406
551
|
this.selectedOption = option;
|
|
552
|
+
// Immediately update chip properties for automatic rendering to ensure reactivity
|
|
553
|
+
if (option && this.isOptionChip(option)) {
|
|
554
|
+
this.selectedOptionChipProps = this.getOptionChipProps(option);
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
this.selectedOptionChipProps = null;
|
|
558
|
+
}
|
|
407
559
|
}
|
|
408
560
|
filterOptions() {
|
|
409
561
|
// Ensure allItems includes optionEls if not already populated (for edge cases)
|
|
@@ -414,7 +566,7 @@ export class PdsCombobox {
|
|
|
414
566
|
this.filteredItems = [...this.allItems];
|
|
415
567
|
}
|
|
416
568
|
else {
|
|
417
|
-
const val = this.
|
|
569
|
+
const val = this.displayText.toLowerCase();
|
|
418
570
|
const filteredOptions = this.optionEls.filter(option => {
|
|
419
571
|
// For layout options, search both text content and data-search-text attribute
|
|
420
572
|
if (this.isOptionLayout(option)) {
|
|
@@ -470,7 +622,7 @@ export class PdsCombobox {
|
|
|
470
622
|
left: `${x}px`,
|
|
471
623
|
top: `${y}px`,
|
|
472
624
|
position: 'absolute',
|
|
473
|
-
zIndex:
|
|
625
|
+
zIndex: 'var(--pine-z-index-raised)',
|
|
474
626
|
});
|
|
475
627
|
});
|
|
476
628
|
}
|
|
@@ -487,6 +639,27 @@ export class PdsCombobox {
|
|
|
487
639
|
(_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
488
640
|
}
|
|
489
641
|
}
|
|
642
|
+
/**
|
|
643
|
+
* Sets the initial highlighted index when dropdown opens.
|
|
644
|
+
* If there's a selected option, highlight it. Otherwise, highlight the first option.
|
|
645
|
+
*/
|
|
646
|
+
setInitialHighlightedIndex() {
|
|
647
|
+
const selectableOptions = this.filteredItems.filter(item => item.tagName === 'OPTION');
|
|
648
|
+
if (selectableOptions.length === 0) {
|
|
649
|
+
this.highlightedIndex = -1;
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
// If there's a selected option, find its index in the filtered options
|
|
653
|
+
if (this.selectedOption) {
|
|
654
|
+
const selectedIndex = selectableOptions.findIndex(option => option === this.selectedOption);
|
|
655
|
+
if (selectedIndex >= 0) {
|
|
656
|
+
this.highlightedIndex = selectedIndex;
|
|
657
|
+
return;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
// No selected option or selected option not in filtered results, highlight first option
|
|
661
|
+
this.highlightedIndex = 0;
|
|
662
|
+
}
|
|
490
663
|
/**
|
|
491
664
|
* Focus management helper - moves focus to the first option when dropdown opens
|
|
492
665
|
*/
|
|
@@ -494,7 +667,7 @@ export class PdsCombobox {
|
|
|
494
667
|
if (this.isOpen) {
|
|
495
668
|
const selectableOptions = this.filteredItems.filter(item => item.tagName === 'OPTION');
|
|
496
669
|
if (selectableOptions.length > 0) {
|
|
497
|
-
this.
|
|
670
|
+
this.setInitialHighlightedIndex();
|
|
498
671
|
// DON'T focus the option elements - keep focus on trigger and use aria-activedescendant
|
|
499
672
|
// This prevents the focusout event that was closing the dropdown
|
|
500
673
|
// But still call updateOptionFocus for scrolling
|
|
@@ -513,20 +686,20 @@ export class PdsCombobox {
|
|
|
513
686
|
this.isArrowKeyNavigationMode = true;
|
|
514
687
|
const selectableOptions = this.filteredItems.filter(item => item.tagName === 'OPTION');
|
|
515
688
|
if (selectableOptions.length > 0) {
|
|
516
|
-
this.
|
|
517
|
-
// For arrow key navigation, actually focus the
|
|
689
|
+
this.setInitialHighlightedIndex();
|
|
690
|
+
// For arrow key navigation, actually focus the highlighted option
|
|
518
691
|
if (this.listboxEl) {
|
|
519
692
|
const optionElements = this.listboxEl.querySelectorAll('[role="option"]');
|
|
520
|
-
const
|
|
521
|
-
if (
|
|
693
|
+
const highlightedOption = optionElements[this.highlightedIndex];
|
|
694
|
+
if (highlightedOption) {
|
|
522
695
|
// Remove tabindex from all options first
|
|
523
696
|
optionElements.forEach(option => {
|
|
524
697
|
option.setAttribute('tabindex', '-1');
|
|
525
698
|
});
|
|
526
|
-
// Set tabindex and focus on
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
699
|
+
// Set tabindex and focus on highlighted option
|
|
700
|
+
highlightedOption.setAttribute('tabindex', '0');
|
|
701
|
+
highlightedOption.focus();
|
|
702
|
+
highlightedOption.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
|
|
530
703
|
}
|
|
531
704
|
}
|
|
532
705
|
// Update aria-activedescendant on trigger
|
|
@@ -592,7 +765,7 @@ export class PdsCombobox {
|
|
|
592
765
|
}
|
|
593
766
|
// Get the label of the selected option
|
|
594
767
|
get selectedLabel() {
|
|
595
|
-
return this.
|
|
768
|
+
return this.displayText || '';
|
|
596
769
|
}
|
|
597
770
|
// Get the layout content of the selected option for button trigger
|
|
598
771
|
get selectedLayoutContent() {
|
|
@@ -602,10 +775,110 @@ export class PdsCombobox {
|
|
|
602
775
|
get selectedHasLayout() {
|
|
603
776
|
return this.selectedOption ? this.isOptionLayout(this.selectedOption) : false;
|
|
604
777
|
}
|
|
778
|
+
// Extract chip sentiment from selected option's attributes, layout content, or slotted trigger content
|
|
779
|
+
get selectedChipSentiment() {
|
|
780
|
+
// First priority: Check selected option's chip attributes (new automatic approach)
|
|
781
|
+
if (this.selectedOption && this.isOptionChip(this.selectedOption)) {
|
|
782
|
+
const sentiment = this.selectedOption.getAttribute('chip-sentiment');
|
|
783
|
+
if (sentiment)
|
|
784
|
+
return sentiment;
|
|
785
|
+
}
|
|
786
|
+
// Second priority: Check selected option's layout content (existing custom layout approach)
|
|
787
|
+
if (this.selectedOption && this.isOptionLayout(this.selectedOption)) {
|
|
788
|
+
const chipElement = this.selectedOption.querySelector('pds-chip');
|
|
789
|
+
const sentiment = chipElement === null || chipElement === void 0 ? void 0 : chipElement.getAttribute('sentiment');
|
|
790
|
+
if (sentiment)
|
|
791
|
+
return sentiment;
|
|
792
|
+
}
|
|
793
|
+
// Third priority: Check if we have custom trigger content with a chip (initial state)
|
|
794
|
+
if (this.customTriggerContent) {
|
|
795
|
+
const slottedChip = this.el.querySelector('pds-chip[slot="trigger-content"]');
|
|
796
|
+
if (slottedChip) {
|
|
797
|
+
const sentiment = slottedChip.getAttribute('sentiment');
|
|
798
|
+
if (sentiment)
|
|
799
|
+
return sentiment;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
// Fallback: Use component props
|
|
803
|
+
return this.chipSentiment;
|
|
804
|
+
}
|
|
805
|
+
// Extract chip large from selected option's attributes, layout content, or slotted trigger content
|
|
806
|
+
get selectedChipLarge() {
|
|
807
|
+
// First priority: Check selected option's chip attributes (new automatic approach)
|
|
808
|
+
if (this.selectedOption && this.isOptionChip(this.selectedOption)) {
|
|
809
|
+
if (this.selectedOption.hasAttribute('chip-large'))
|
|
810
|
+
return true;
|
|
811
|
+
}
|
|
812
|
+
// Second priority: Check selected option's layout content (existing custom layout approach)
|
|
813
|
+
if (this.selectedOption && this.isOptionLayout(this.selectedOption)) {
|
|
814
|
+
const chipElement = this.selectedOption.querySelector('pds-chip');
|
|
815
|
+
if (chipElement === null || chipElement === void 0 ? void 0 : chipElement.hasAttribute('large'))
|
|
816
|
+
return true;
|
|
817
|
+
}
|
|
818
|
+
// Third priority: Check if we have custom trigger content with a chip (initial state)
|
|
819
|
+
if (this.customTriggerContent) {
|
|
820
|
+
const slottedChip = this.el.querySelector('pds-chip[slot="trigger-content"]');
|
|
821
|
+
if (slottedChip && slottedChip.hasAttribute('large')) {
|
|
822
|
+
return true;
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
// Fallback: Use component props
|
|
826
|
+
return this.chipLarge;
|
|
827
|
+
}
|
|
828
|
+
// Extract chip icon from selected option's attributes, layout content, or slotted trigger content
|
|
829
|
+
get selectedChipIcon() {
|
|
830
|
+
// First priority: Check selected option's chip attributes (new automatic approach)
|
|
831
|
+
if (this.selectedOption && this.isOptionChip(this.selectedOption)) {
|
|
832
|
+
const icon = this.selectedOption.getAttribute('chip-icon');
|
|
833
|
+
if (icon)
|
|
834
|
+
return icon;
|
|
835
|
+
}
|
|
836
|
+
// Second priority: Check selected option's layout content (existing custom layout approach)
|
|
837
|
+
if (this.selectedOption && this.isOptionLayout(this.selectedOption)) {
|
|
838
|
+
const chipElement = this.selectedOption.querySelector('pds-chip');
|
|
839
|
+
const icon = chipElement === null || chipElement === void 0 ? void 0 : chipElement.getAttribute('icon');
|
|
840
|
+
if (icon)
|
|
841
|
+
return icon;
|
|
842
|
+
}
|
|
843
|
+
// Third priority: Check if we have custom trigger content with a chip (initial state)
|
|
844
|
+
if (this.customTriggerContent) {
|
|
845
|
+
const slottedChip = this.el.querySelector('pds-chip[slot="trigger-content"]');
|
|
846
|
+
if (slottedChip) {
|
|
847
|
+
const icon = slottedChip.getAttribute('icon');
|
|
848
|
+
if (icon)
|
|
849
|
+
return icon;
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
// Fallback: Use component props
|
|
853
|
+
return this.chipIcon;
|
|
854
|
+
}
|
|
855
|
+
// Extract chip dot from selected option's attributes, layout content, or slotted trigger content
|
|
856
|
+
get selectedChipDot() {
|
|
857
|
+
// First priority: Check selected option's chip attributes (new automatic approach)
|
|
858
|
+
if (this.selectedOption && this.isOptionChip(this.selectedOption)) {
|
|
859
|
+
if (this.selectedOption.hasAttribute('chip-dot'))
|
|
860
|
+
return true;
|
|
861
|
+
}
|
|
862
|
+
// Second priority: Check selected option's layout content (existing custom layout approach)
|
|
863
|
+
if (this.selectedOption && this.isOptionLayout(this.selectedOption)) {
|
|
864
|
+
const chipElement = this.selectedOption.querySelector('pds-chip');
|
|
865
|
+
if (chipElement === null || chipElement === void 0 ? void 0 : chipElement.hasAttribute('dot'))
|
|
866
|
+
return true;
|
|
867
|
+
}
|
|
868
|
+
// Third priority: Check if we have custom trigger content with a chip (initial state)
|
|
869
|
+
if (this.customTriggerContent) {
|
|
870
|
+
const slottedChip = this.el.querySelector('pds-chip[slot="trigger-content"]');
|
|
871
|
+
if (slottedChip && slottedChip.hasAttribute('dot')) {
|
|
872
|
+
return true;
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
// Fallback: Use component props
|
|
876
|
+
return this.chipDot;
|
|
877
|
+
}
|
|
605
878
|
handleOptionClick(option) {
|
|
606
879
|
// Update reactive state - single source of truth
|
|
880
|
+
// The @Watch('selectedOption') will handle displayText, value, and form internals
|
|
607
881
|
this.setSelectedOption(option);
|
|
608
|
-
this.value = this.getOptionLabel(option);
|
|
609
882
|
this.isOpen = false;
|
|
610
883
|
this.pdsComboboxChange.emit({ value: option.value });
|
|
611
884
|
}
|
|
@@ -629,12 +902,14 @@ export class PdsCombobox {
|
|
|
629
902
|
const isSelected = this.isOptionSelected(option);
|
|
630
903
|
const isHighlighted = this.highlightedIndex === optionIndex;
|
|
631
904
|
const isLayout = this.isOptionLayout(option);
|
|
905
|
+
const isChip = this.isOptionChip(option);
|
|
632
906
|
const currentOptionIndex = optionIndex++;
|
|
633
|
-
return (h("li", { key: option.value, id: `pds-combobox-option-${currentOptionIndex}`, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-setsize": selectableOptions.length, "aria-posinset": currentOptionIndex + 1, "aria-label": isLayout ? option.getAttribute('aria-label') || this.getOptionLabel(option) : undefined, tabindex: isHighlighted ? '0' : '-1', class: {
|
|
907
|
+
return (h("li", { key: option.value, id: `pds-combobox-option-${currentOptionIndex}`, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-setsize": selectableOptions.length, "aria-posinset": currentOptionIndex + 1, "aria-label": isLayout || isChip ? option.getAttribute('aria-label') || this.getOptionLabel(option) : undefined, tabindex: isHighlighted ? '0' : '-1', class: {
|
|
634
908
|
'pds-combobox__option': true,
|
|
635
909
|
'pds-combobox__option--highlighted': isHighlighted,
|
|
636
910
|
'pds-combobox__option--layout': isLayout,
|
|
637
|
-
|
|
911
|
+
'pds-combobox__option--chip': isChip,
|
|
912
|
+
}, "data-option-index": currentOptionIndex, onMouseDown: this.onOptionMouseDown, onClick: this.onOptionClick, onMouseEnter: this.onOptionMouseEnter, onKeyDown: this.onOptionKeyDown }, isLayout ? (h("pds-box", { class: "pds-combobox__option-layout-wrapper", innerHTML: this.getOptionLayoutContent(option) })) : isChip ? (this.renderOptionChip(option)) : (this.getOptionLabel(option)), isSelected && h("pds-icon", { icon: "check", size: "regular", class: "pds-combobox__option-check" })));
|
|
638
913
|
}
|
|
639
914
|
return null;
|
|
640
915
|
})));
|
|
@@ -655,6 +930,23 @@ export class PdsCombobox {
|
|
|
655
930
|
shouldShowLayoutContent() {
|
|
656
931
|
return this.selectedHasLayout && !!this.selectedLayoutContent;
|
|
657
932
|
}
|
|
933
|
+
// Helper method to build chip trigger CSS classes
|
|
934
|
+
getChipTriggerClass() {
|
|
935
|
+
const classes = ['pds-combobox__chip-trigger'];
|
|
936
|
+
// Add sentiment class
|
|
937
|
+
classes.push(`pds-combobox__chip-trigger--${this.selectedChipSentiment}`);
|
|
938
|
+
// Always use dropdown variant for chip triggers
|
|
939
|
+
classes.push('pds-combobox__chip-trigger--dropdown');
|
|
940
|
+
// Add large class if needed
|
|
941
|
+
if (this.selectedChipLarge) {
|
|
942
|
+
classes.push('pds-combobox__chip-trigger--large');
|
|
943
|
+
}
|
|
944
|
+
// Add dot class if needed
|
|
945
|
+
if (this.selectedChipDot) {
|
|
946
|
+
classes.push('pds-combobox__chip-trigger--dot');
|
|
947
|
+
}
|
|
948
|
+
return classes.join(' ');
|
|
949
|
+
}
|
|
658
950
|
renderButtonTriggerContent() {
|
|
659
951
|
// Case 1: Custom trigger content with layout priority
|
|
660
952
|
if (this.customTriggerContent) {
|
|
@@ -671,15 +963,81 @@ export class PdsCombobox {
|
|
|
671
963
|
// Case 3: Standard mode with default text content
|
|
672
964
|
return [this.renderDefaultContent(), this.renderCaretIcon()];
|
|
673
965
|
}
|
|
966
|
+
renderChipTriggerContent() {
|
|
967
|
+
// Case 1: Custom trigger content with layout priority
|
|
968
|
+
if (this.customTriggerContent) {
|
|
969
|
+
if (this.shouldShowLayoutContent()) {
|
|
970
|
+
// When using custom layouts, the chip handles its own dropdown arrow
|
|
971
|
+
return this.renderChipTriggerLayoutContent();
|
|
972
|
+
}
|
|
973
|
+
// Fall back to slot content when no layout is available - chip handles its own dropdown arrow
|
|
974
|
+
return h("slot", { name: "trigger-content" });
|
|
975
|
+
}
|
|
976
|
+
// Case 2: Standard mode with layout content
|
|
977
|
+
if (this.shouldShowLayoutContent()) {
|
|
978
|
+
// When using custom layouts, the chip handles its own dropdown arrow
|
|
979
|
+
return this.renderChipTriggerLayoutContent();
|
|
980
|
+
}
|
|
981
|
+
// Case 3: Automatic chip mode - selected option has chip attributes
|
|
982
|
+
if (this.selectedOption && this.selectedOptionChipProps) {
|
|
983
|
+
// Render as chip automatically - chip handles its own dropdown arrow
|
|
984
|
+
return this.renderSelectedOptionAsChip();
|
|
985
|
+
}
|
|
986
|
+
// Case 4: Standard mode with default text content
|
|
987
|
+
return [
|
|
988
|
+
this.renderChipTriggerDefaultContent(),
|
|
989
|
+
this.renderCaretIcon()
|
|
990
|
+
];
|
|
991
|
+
}
|
|
992
|
+
// Helper method to render selected option as chip for trigger (automatic approach)
|
|
993
|
+
renderSelectedOptionAsChip() {
|
|
994
|
+
if (!this.selectedOption || !this.selectedOptionChipProps)
|
|
995
|
+
return null;
|
|
996
|
+
return (h("pds-chip", { sentiment: this.selectedOptionChipProps.sentiment, variant: "dropdown" // Always use dropdown variant for triggers
|
|
997
|
+
,
|
|
998
|
+
large: this.selectedOptionChipProps.large, icon: this.selectedOptionChipProps.icon, dot: this.selectedOptionChipProps.dot, class: "pds-combobox__chip-trigger-auto" }, this.getOptionLabel(this.selectedOption)));
|
|
999
|
+
}
|
|
1000
|
+
// Helper method to render chip trigger layout content
|
|
1001
|
+
renderChipTriggerLayoutContent() {
|
|
1002
|
+
return (h("div", { class: "pds-combobox__chip-trigger-layout-wrapper", innerHTML: this.getModifiedLayoutContentForTrigger() }));
|
|
1003
|
+
}
|
|
1004
|
+
// Helper method to modify layout content for trigger use (ensure dropdown variant)
|
|
1005
|
+
getModifiedLayoutContentForTrigger() {
|
|
1006
|
+
let content = this.selectedLayoutContent;
|
|
1007
|
+
// If the content contains a pds-chip, ensure it has variant="dropdown"
|
|
1008
|
+
if (content.includes('<pds-chip')) {
|
|
1009
|
+
// Use a temporary div to parse and modify the HTML
|
|
1010
|
+
const tempDiv = document.createElement('div');
|
|
1011
|
+
tempDiv.innerHTML = content;
|
|
1012
|
+
const chipElement = tempDiv.querySelector('pds-chip');
|
|
1013
|
+
if (chipElement) {
|
|
1014
|
+
chipElement.setAttribute('variant', 'dropdown');
|
|
1015
|
+
content = tempDiv.innerHTML;
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
return content;
|
|
1019
|
+
}
|
|
1020
|
+
// Helper method to render chip trigger default content
|
|
1021
|
+
renderChipTriggerDefaultContent() {
|
|
1022
|
+
return (h("span", { class: "pds-combobox__chip-trigger-label" }, this.selectedChipIcon && h("pds-icon", { icon: this.selectedChipIcon, class: "pds-combobox__chip-trigger-icon" }), this.selectedLabel || this.placeholder));
|
|
1023
|
+
}
|
|
1024
|
+
// Helper method to render option as chip (new automatic approach)
|
|
1025
|
+
renderOptionChip(option) {
|
|
1026
|
+
const chipProps = this.getOptionChipProps(option);
|
|
1027
|
+
return (h("pds-chip", { sentiment: chipProps.sentiment, variant: "text" // Dropdown options use text variant, not dropdown
|
|
1028
|
+
,
|
|
1029
|
+
large: chipProps.large, icon: chipProps.icon, dot: chipProps.dot, class: "pds-combobox__option-chip" }, this.getOptionLabel(option)));
|
|
1030
|
+
}
|
|
674
1031
|
render() {
|
|
675
1032
|
const triggerClass = `pds-combobox__button-trigger pds-combobox__button-trigger--${this.triggerVariant}`;
|
|
676
|
-
return (h(Host, { key: '
|
|
1033
|
+
return (h(Host, { key: 'd62992abd6eae05cfff52cfc0272490ca6370291' }, h("div", { key: 'affff971535065b7352daee494742bf7b65a61f4', class: "pds-combobox", tabIndex: -1, onFocusout: this.onComboboxFocusOut }, this.label && (h("label", { key: 'c27f88928932bc4535698cb88595b1559cb22e55', htmlFor: this.componentId, class: "pds-combobox__label" }, h("span", { key: '0b65e67897735819cb2a4dc7d6d7d355af2f28d5', class: this.hideLabel ? 'visually-hidden' : '' }, this.label))), this.trigger === 'input' ? (h("div", { class: "pds-combobox__input-wrapper", style: { width: this.triggerWidth } }, h("input", { ref: el => {
|
|
677
1034
|
this.inputEl = el;
|
|
678
1035
|
this.triggerEl = el;
|
|
679
|
-
}, class: "pds-combobox__input", type: "text", role: "combobox", "aria-autocomplete": "list", "aria-controls": "pds-combobox-listbox", "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? `pds-combobox-option-${this.highlightedIndex}` : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, value: this.
|
|
1036
|
+
}, class: "pds-combobox__input", type: "text", role: "combobox", "aria-autocomplete": "list", "aria-controls": "pds-combobox-listbox", "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? `pds-combobox-option-${this.highlightedIndex}` : undefined, "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: "combobox", "aria-haspopup": "listbox", "aria-controls": "pds-combobox-listbox", "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? `pds-combobox-option-${this.highlightedIndex}` : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, 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: "combobox", "aria-haspopup": "listbox", "aria-controls": "pds-combobox-listbox", "aria-activedescendant": this.isOpen && this.highlightedIndex >= 0 ? `pds-combobox-option-${this.highlightedIndex}` : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, 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())), h("div", { key: '47c259c2bc5b6f4f1d249d9bddd476b11c5a90fe', style: { display: 'none' } }, h("slot", { key: '83355a804fe978b6fb58838b4174bc815cf2f933', onSlotchange: () => this.updateOptions() })), this.renderDropdown())));
|
|
680
1037
|
}
|
|
681
1038
|
static get is() { return "pds-combobox"; }
|
|
682
1039
|
static get encapsulation() { return "shadow"; }
|
|
1040
|
+
static get formAssociated() { return true; }
|
|
683
1041
|
static get originalStyleUrls() {
|
|
684
1042
|
return {
|
|
685
1043
|
"$": ["pds-combobox.scss"]
|
|
@@ -711,6 +1069,25 @@ export class PdsCombobox {
|
|
|
711
1069
|
"attribute": "component-id",
|
|
712
1070
|
"reflect": false
|
|
713
1071
|
},
|
|
1072
|
+
"name": {
|
|
1073
|
+
"type": "string",
|
|
1074
|
+
"mutable": false,
|
|
1075
|
+
"complexType": {
|
|
1076
|
+
"original": "string",
|
|
1077
|
+
"resolved": "string",
|
|
1078
|
+
"references": {}
|
|
1079
|
+
},
|
|
1080
|
+
"required": false,
|
|
1081
|
+
"optional": true,
|
|
1082
|
+
"docs": {
|
|
1083
|
+
"tags": [],
|
|
1084
|
+
"text": "The name of the form control. Submitted with the form as part of a name/value pair."
|
|
1085
|
+
},
|
|
1086
|
+
"getter": false,
|
|
1087
|
+
"setter": false,
|
|
1088
|
+
"attribute": "name",
|
|
1089
|
+
"reflect": true
|
|
1090
|
+
},
|
|
714
1091
|
"customOptionLayouts": {
|
|
715
1092
|
"type": "boolean",
|
|
716
1093
|
"mutable": false,
|
|
@@ -927,8 +1304,8 @@ export class PdsCombobox {
|
|
|
927
1304
|
"type": "string",
|
|
928
1305
|
"mutable": false,
|
|
929
1306
|
"complexType": {
|
|
930
|
-
"original": "'input' | 'button'",
|
|
931
|
-
"resolved": "\"button\" | \"input\"",
|
|
1307
|
+
"original": "'input' | 'button' | 'chip'",
|
|
1308
|
+
"resolved": "\"button\" | \"chip\" | \"input\"",
|
|
932
1309
|
"references": {}
|
|
933
1310
|
},
|
|
934
1311
|
"required": false,
|
|
@@ -938,7 +1315,7 @@ export class PdsCombobox {
|
|
|
938
1315
|
"name": "default",
|
|
939
1316
|
"text": "'input'"
|
|
940
1317
|
}],
|
|
941
|
-
"text": "Determines the combobox trigger: 'input' (editable input)
|
|
1318
|
+
"text": "Determines the combobox trigger: 'input' (editable input), 'button' (button-like, non-editable), or 'chip' (chip-like, non-editable)."
|
|
942
1319
|
},
|
|
943
1320
|
"getter": false,
|
|
944
1321
|
"setter": false,
|
|
@@ -992,6 +1369,100 @@ export class PdsCombobox {
|
|
|
992
1369
|
"reflect": false,
|
|
993
1370
|
"defaultValue": "'secondary'"
|
|
994
1371
|
},
|
|
1372
|
+
"chipSentiment": {
|
|
1373
|
+
"type": "string",
|
|
1374
|
+
"mutable": false,
|
|
1375
|
+
"complexType": {
|
|
1376
|
+
"original": "ChipSentimentType",
|
|
1377
|
+
"resolved": "\"accent\" | \"brand\" | \"danger\" | \"info\" | \"neutral\" | \"success\" | \"warning\"",
|
|
1378
|
+
"references": {
|
|
1379
|
+
"ChipSentimentType": {
|
|
1380
|
+
"location": "import",
|
|
1381
|
+
"path": "@utils/types",
|
|
1382
|
+
"id": "src/utils/types.ts::ChipSentimentType"
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
},
|
|
1386
|
+
"required": false,
|
|
1387
|
+
"optional": false,
|
|
1388
|
+
"docs": {
|
|
1389
|
+
"tags": [{
|
|
1390
|
+
"name": "default",
|
|
1391
|
+
"text": "'neutral'"
|
|
1392
|
+
}],
|
|
1393
|
+
"text": "The sentiment for the chip trigger. Matches Pine chip sentiments."
|
|
1394
|
+
},
|
|
1395
|
+
"getter": false,
|
|
1396
|
+
"setter": false,
|
|
1397
|
+
"attribute": "chip-sentiment",
|
|
1398
|
+
"reflect": false,
|
|
1399
|
+
"defaultValue": "'neutral'"
|
|
1400
|
+
},
|
|
1401
|
+
"chipLarge": {
|
|
1402
|
+
"type": "boolean",
|
|
1403
|
+
"mutable": false,
|
|
1404
|
+
"complexType": {
|
|
1405
|
+
"original": "boolean",
|
|
1406
|
+
"resolved": "boolean",
|
|
1407
|
+
"references": {}
|
|
1408
|
+
},
|
|
1409
|
+
"required": false,
|
|
1410
|
+
"optional": false,
|
|
1411
|
+
"docs": {
|
|
1412
|
+
"tags": [{
|
|
1413
|
+
"name": "default",
|
|
1414
|
+
"text": "false"
|
|
1415
|
+
}],
|
|
1416
|
+
"text": "Whether the chip trigger should be displayed in a larger size."
|
|
1417
|
+
},
|
|
1418
|
+
"getter": false,
|
|
1419
|
+
"setter": false,
|
|
1420
|
+
"attribute": "chip-large",
|
|
1421
|
+
"reflect": false,
|
|
1422
|
+
"defaultValue": "false"
|
|
1423
|
+
},
|
|
1424
|
+
"chipIcon": {
|
|
1425
|
+
"type": "string",
|
|
1426
|
+
"mutable": false,
|
|
1427
|
+
"complexType": {
|
|
1428
|
+
"original": "string",
|
|
1429
|
+
"resolved": "string",
|
|
1430
|
+
"references": {}
|
|
1431
|
+
},
|
|
1432
|
+
"required": false,
|
|
1433
|
+
"optional": true,
|
|
1434
|
+
"docs": {
|
|
1435
|
+
"tags": [],
|
|
1436
|
+
"text": "The name of the icon to display in the chip trigger."
|
|
1437
|
+
},
|
|
1438
|
+
"getter": false,
|
|
1439
|
+
"setter": false,
|
|
1440
|
+
"attribute": "chip-icon",
|
|
1441
|
+
"reflect": false
|
|
1442
|
+
},
|
|
1443
|
+
"chipDot": {
|
|
1444
|
+
"type": "boolean",
|
|
1445
|
+
"mutable": false,
|
|
1446
|
+
"complexType": {
|
|
1447
|
+
"original": "boolean",
|
|
1448
|
+
"resolved": "boolean",
|
|
1449
|
+
"references": {}
|
|
1450
|
+
},
|
|
1451
|
+
"required": false,
|
|
1452
|
+
"optional": false,
|
|
1453
|
+
"docs": {
|
|
1454
|
+
"tags": [{
|
|
1455
|
+
"name": "default",
|
|
1456
|
+
"text": "false"
|
|
1457
|
+
}],
|
|
1458
|
+
"text": "Whether a dot should be displayed on the chip trigger."
|
|
1459
|
+
},
|
|
1460
|
+
"getter": false,
|
|
1461
|
+
"setter": false,
|
|
1462
|
+
"attribute": "chip-dot",
|
|
1463
|
+
"reflect": false,
|
|
1464
|
+
"defaultValue": "false"
|
|
1465
|
+
},
|
|
995
1466
|
"value": {
|
|
996
1467
|
"type": "string",
|
|
997
1468
|
"mutable": true,
|
|
@@ -1016,11 +1487,13 @@ export class PdsCombobox {
|
|
|
1016
1487
|
}
|
|
1017
1488
|
static get states() {
|
|
1018
1489
|
return {
|
|
1490
|
+
"displayText": {},
|
|
1019
1491
|
"filteredItems": {},
|
|
1020
1492
|
"highlightedIndex": {},
|
|
1021
1493
|
"isOpen": {},
|
|
1022
1494
|
"selectedOption": {},
|
|
1023
|
-
"selectedOptionLayoutContent": {}
|
|
1495
|
+
"selectedOptionLayoutContent": {},
|
|
1496
|
+
"selectedOptionChipProps": {}
|
|
1024
1497
|
};
|
|
1025
1498
|
}
|
|
1026
1499
|
static get events() {
|