@pine-ds/core 3.14.2 → 3.15.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/index2.js +1 -1
- package/components/index2.js.map +1 -1
- package/components/mock-pds-modal.js +1 -1
- package/components/pds-chip2.js +50 -3
- package/components/pds-chip2.js.map +1 -1
- package/components/pds-combobox.js +245 -12
- package/components/pds-combobox.js.map +1 -1
- package/components/pds-copytext.js +1 -1
- package/components/pds-divider.js +1 -1
- package/components/pds-dropdown-menu-item.js +10 -2
- package/components/pds-dropdown-menu-item.js.map +1 -1
- package/components/pds-dropdown-menu-separator.js +1 -1
- package/components/pds-dropdown-menu.js +1 -1
- package/components/pds-filter.js +1 -1
- package/components/pds-filters.js +1 -1
- package/components/pds-image.js +2 -2
- package/components/pds-input.js +1 -1
- package/components/pds-link2.js +7 -2
- package/components/pds-link2.js.map +1 -1
- package/components/pds-loader2.js +1 -1
- package/components/pds-modal-content.js +2 -2
- package/components/pds-modal-footer.js +1 -1
- package/components/pds-modal-header.js +1 -1
- package/components/pds-modal.js +3 -3
- package/components/pds-multiselect.js +152 -16
- package/components/pds-multiselect.js.map +1 -1
- package/components/pds-popover.js +1 -1
- package/components/pds-progress.js +1 -1
- package/components/pds-property.js +1 -1
- package/components/pds-radio-group.js +3 -3
- package/components/pds-radio.js +3 -3
- package/components/pds-row.js +1 -1
- package/components/pds-select.js +1 -1
- package/components/pds-sortable-item.js +1 -1
- package/components/pds-sortable.js +1 -1
- package/components/pds-switch.js +3 -3
- package/components/pds-tab.js +3 -3
- package/components/pds-table-body.js +1 -1
- package/components/pds-table-cell2.js +3 -3
- package/components/pds-table-cell2.js.map +1 -1
- package/components/pds-table-head-cell2.js +2 -2
- package/components/pds-table-head.js +1 -1
- package/components/pds-table-row.js +1 -1
- package/components/pds-tabpanel.js +1 -1
- package/components/pds-tabs.js +1 -1
- package/components/pds-text2.js +1 -1
- package/components/pds-textarea.js +4 -4
- package/components/pds-toast.js +3 -3
- package/components/pds-tooltip.js +2 -2
- package/dist/cjs/{index-BA--jsiy.js → index-DkQebouX.js} +3 -3
- package/dist/cjs/index-DkQebouX.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/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 +1 -1
- package/dist/cjs/pds-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/pds-chip.cjs.entry.js +47 -3
- package/dist/cjs/pds-chip.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-combobox.cjs.entry.js +221 -6
- package/dist/cjs/pds-combobox.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-copytext.cjs.entry.js +2 -2
- package/dist/cjs/pds-divider.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +8 -2
- package/dist/cjs/pds-dropdown-menu-item.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js +1 -1
- package/dist/cjs/pds-filter.cjs.entry.js +2 -2
- package/dist/cjs/pds-filters.cjs.entry.js +1 -1
- package/dist/cjs/pds-image.cjs.entry.js +2 -2
- package/dist/cjs/pds-input.cjs.entry.js +2 -2
- package/dist/cjs/pds-link.cjs.entry.js +7 -3
- package/dist/cjs/pds-link.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-loader.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-content.cjs.entry.js +2 -2
- 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 +3 -3
- package/dist/cjs/pds-multiselect.cjs.entry.js +132 -11
- package/dist/cjs/pds-multiselect.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-popover.cjs.entry.js +1 -1
- package/dist/cjs/pds-progress.cjs.entry.js +1 -1
- package/dist/cjs/pds-property.cjs.entry.js +1 -1
- package/dist/cjs/pds-radio-group.cjs.entry.js +4 -4
- package/dist/cjs/pds-radio.cjs.entry.js +4 -4
- 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 +2 -2
- package/dist/cjs/pds-sortable.cjs.entry.js +1 -1
- package/dist/cjs/pds-switch.cjs.entry.js +4 -4
- package/dist/cjs/pds-tab.cjs.entry.js +3 -3
- package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-cell.cjs.entry.js +3 -3
- package/dist/cjs/pds-table-cell.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-head-cell.cjs.entry.js +3 -3
- 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-tabpanel.cjs.entry.js +1 -1
- package/dist/cjs/pds-tabs.cjs.entry.js +1 -1
- package/dist/cjs/pds-text.cjs.entry.js +1 -1
- package/dist/cjs/pds-textarea.cjs.entry.js +5 -5
- package/dist/cjs/pds-toast.cjs.entry.js +3 -3
- package/dist/cjs/pds-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/pine-core.cjs.js +1 -1
- package/dist/collection/components/pds-chip/pds-chip.css +4 -3
- package/dist/collection/components/pds-chip/pds-chip.js +102 -1
- package/dist/collection/components/pds-chip/pds-chip.js.map +1 -1
- package/dist/collection/components/pds-chip/stories/pds-chip.stories.js +38 -0
- package/dist/collection/components/pds-combobox/combobox-interface.js +2 -0
- package/dist/collection/components/pds-combobox/combobox-interface.js.map +1 -0
- package/dist/collection/components/pds-combobox/pds-combobox.css +20 -0
- package/dist/collection/components/pds-combobox/pds-combobox.js +415 -6
- package/dist/collection/components/pds-combobox/pds-combobox.js.map +1 -1
- package/dist/collection/components/pds-copytext/pds-copytext.js +1 -1
- package/dist/collection/components/pds-divider/pds-divider.js +1 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +53 -2
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js.map +1 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.js +1 -1
- package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +1 -1
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +1 -1
- package/dist/collection/components/pds-filters/pds-filters.js +1 -1
- package/dist/collection/components/pds-image/pds-image.js +2 -2
- package/dist/collection/components/pds-input/pds-input.js +1 -1
- package/dist/collection/components/pds-link/pds-link.js +34 -2
- package/dist/collection/components/pds-link/pds-link.js.map +1 -1
- package/dist/collection/components/pds-loader/pds-loader.js +1 -1
- package/dist/collection/components/pds-modal/pds-modal-content/pds-modal-content.js +2 -2
- package/dist/collection/components/pds-modal/pds-modal-footer/pds-modal-footer.js +1 -1
- package/dist/collection/components/pds-modal/pds-modal-header/pds-modal-header.js +1 -1
- package/dist/collection/components/pds-modal/pds-modal.js +3 -3
- package/dist/collection/components/pds-modal/test/mock-pds-modal.js +1 -1
- package/dist/collection/components/pds-multiselect/multiselect-interface.js.map +1 -1
- package/dist/collection/components/pds-multiselect/pds-multiselect.css +9 -0
- package/dist/collection/components/pds-multiselect/pds-multiselect.js +191 -10
- package/dist/collection/components/pds-multiselect/pds-multiselect.js.map +1 -1
- package/dist/collection/components/pds-multiselect/stories/pds-multiselect.stories.js +41 -0
- package/dist/collection/components/pds-popover/pds-popover.js +1 -1
- package/dist/collection/components/pds-progress/pds-progress.js +1 -1
- package/dist/collection/components/pds-property/pds-property.js +1 -1
- package/dist/collection/components/pds-radio/pds-radio.js +3 -3
- package/dist/collection/components/pds-radio-group/pds-radio-group.js +3 -3
- package/dist/collection/components/pds-row/pds-row.js +1 -1
- package/dist/collection/components/pds-select/pds-select.js +1 -1
- package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.js +1 -1
- package/dist/collection/components/pds-sortable/pds-sortable.js +1 -1
- package/dist/collection/components/pds-switch/pds-switch.js +3 -3
- package/dist/collection/components/pds-table/pds-table-body/pds-table-body.js +1 -1
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.css +1 -1
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +2 -2
- package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +1 -1
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +2 -2
- package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +1 -1
- package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js +3 -3
- package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.js +1 -1
- package/dist/collection/components/pds-tabs/pds-tabs.js +1 -1
- package/dist/collection/components/pds-text/pds-text.js +1 -1
- package/dist/collection/components/pds-textarea/pds-textarea.js +4 -4
- package/dist/collection/components/pds-toast/pds-toast.js +3 -3
- package/dist/collection/components/pds-tooltip/pds-tooltip.js +2 -2
- package/dist/docs.json +588 -3
- package/dist/esm/{index-DY8eSueV.js → index-D094LgxJ.js} +3 -3
- package/dist/esm/index-D094LgxJ.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mock-pds-modal.entry.js +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 +1 -1
- package/dist/esm/pds-checkbox.entry.js +1 -1
- package/dist/esm/pds-chip.entry.js +47 -3
- package/dist/esm/pds-chip.entry.js.map +1 -1
- package/dist/esm/pds-combobox.entry.js +221 -6
- package/dist/esm/pds-combobox.entry.js.map +1 -1
- package/dist/esm/pds-copytext.entry.js +2 -2
- package/dist/esm/pds-divider.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu-item.entry.js +8 -2
- package/dist/esm/pds-dropdown-menu-item.entry.js.map +1 -1
- package/dist/esm/pds-dropdown-menu-separator.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm/pds-filter.entry.js +2 -2
- package/dist/esm/pds-filters.entry.js +1 -1
- package/dist/esm/pds-image.entry.js +2 -2
- package/dist/esm/pds-input.entry.js +2 -2
- package/dist/esm/pds-link.entry.js +7 -3
- package/dist/esm/pds-link.entry.js.map +1 -1
- package/dist/esm/pds-loader.entry.js +1 -1
- package/dist/esm/pds-modal-content.entry.js +2 -2
- 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 +3 -3
- package/dist/esm/pds-multiselect.entry.js +132 -11
- package/dist/esm/pds-multiselect.entry.js.map +1 -1
- package/dist/esm/pds-popover.entry.js +1 -1
- package/dist/esm/pds-progress.entry.js +1 -1
- package/dist/esm/pds-property.entry.js +1 -1
- package/dist/esm/pds-radio-group.entry.js +4 -4
- package/dist/esm/pds-radio.entry.js +4 -4
- package/dist/esm/pds-row.entry.js +1 -1
- package/dist/esm/pds-select.entry.js +2 -2
- package/dist/esm/pds-sortable-item.entry.js +2 -2
- package/dist/esm/pds-sortable.entry.js +1 -1
- package/dist/esm/pds-switch.entry.js +4 -4
- package/dist/esm/pds-tab.entry.js +3 -3
- package/dist/esm/pds-table-body.entry.js +1 -1
- package/dist/esm/pds-table-cell.entry.js +3 -3
- package/dist/esm/pds-table-cell.entry.js.map +1 -1
- package/dist/esm/pds-table-head-cell.entry.js +3 -3
- package/dist/esm/pds-table-head.entry.js +1 -1
- package/dist/esm/pds-table-row.entry.js +1 -1
- package/dist/esm/pds-tabpanel.entry.js +1 -1
- package/dist/esm/pds-tabs.entry.js +1 -1
- package/dist/esm/pds-text.entry.js +1 -1
- package/dist/esm/pds-textarea.entry.js +5 -5
- package/dist/esm/pds-toast.entry.js +3 -3
- package/dist/esm/pds-tooltip.entry.js +2 -2
- package/dist/esm/pine-core.js +1 -1
- package/dist/esm-es5/{index-DY8eSueV.js → index-D094LgxJ.js} +1 -1
- package/dist/esm-es5/index-D094LgxJ.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/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-checkbox.entry.js +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 +2 -2
- 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-divider.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu-item.entry.js.map +1 -1
- package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm-es5/pds-filter.entry.js +1 -1
- package/dist/esm-es5/pds-filters.entry.js +1 -1
- package/dist/esm-es5/pds-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-link.entry.js.map +1 -1
- package/dist/esm-es5/pds-loader.entry.js +1 -1
- package/dist/esm-es5/pds-modal-content.entry.js +1 -1
- package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
- package/dist/esm-es5/pds-modal-header.entry.js +1 -1
- package/dist/esm-es5/pds-modal.entry.js +1 -1
- package/dist/esm-es5/pds-multiselect.entry.js +1 -1
- package/dist/esm-es5/pds-multiselect.entry.js.map +1 -1
- package/dist/esm-es5/pds-popover.entry.js +1 -1
- package/dist/esm-es5/pds-progress.entry.js +1 -1
- package/dist/esm-es5/pds-property.entry.js +1 -1
- package/dist/esm-es5/pds-radio-group.entry.js +1 -1
- package/dist/esm-es5/pds-radio.entry.js +1 -1
- package/dist/esm-es5/pds-row.entry.js +1 -1
- package/dist/esm-es5/pds-select.entry.js +1 -1
- package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
- package/dist/esm-es5/pds-sortable.entry.js +1 -1
- 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-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.entry.js +1 -1
- package/dist/esm-es5/pds-table-row.entry.js +1 -1
- package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
- package/dist/esm-es5/pds-tabs.entry.js +1 -1
- package/dist/esm-es5/pds-text.entry.js +1 -1
- package/dist/esm-es5/pds-textarea.entry.js +1 -1
- package/dist/esm-es5/pds-toast.entry.js +1 -1
- package/dist/esm-es5/pds-tooltip.entry.js +1 -1
- package/dist/esm-es5/pine-core.js +1 -1
- package/dist/pine-core/{p-d6302edd.entry.js → p-003884fd.entry.js} +2 -2
- package/dist/pine-core/{p-9e7cd072.system.entry.js → p-0270ebee.system.entry.js} +2 -2
- package/dist/pine-core/p-06046885.entry.js +3 -0
- package/dist/pine-core/p-06046885.entry.js.map +1 -0
- package/dist/pine-core/{p-063afa19.system.entry.js → p-09ff71ad.system.entry.js} +2 -2
- package/dist/pine-core/{p-c68bceb1.entry.js → p-0ac54273.entry.js} +2 -2
- package/dist/pine-core/{p-ac56273a.system.entry.js → p-0c2f13c3.system.entry.js} +2 -2
- package/dist/pine-core/{p-c7c00a27.entry.js → p-119ccf73.entry.js} +2 -2
- package/dist/pine-core/{p-87eb8d4b.system.entry.js → p-13105538.system.entry.js} +2 -2
- package/dist/pine-core/{p-c24d11c7.entry.js → p-1951d49e.entry.js} +2 -2
- package/dist/pine-core/p-1971d358.entry.js +2 -0
- package/dist/pine-core/{p-9c928c44.entry.js.map → p-1971d358.entry.js.map} +1 -1
- package/dist/pine-core/p-19fef546.system.entry.js +4 -0
- package/dist/pine-core/p-19fef546.system.entry.js.map +1 -0
- package/dist/pine-core/{p-6d2da3ca.system.entry.js → p-1e77124d.system.entry.js} +2 -2
- package/dist/pine-core/{p-f69d3fd6.entry.js → p-220cbe98.entry.js} +2 -2
- package/dist/pine-core/{p-9d6b6ff3.system.entry.js → p-226e45be.system.entry.js} +2 -2
- package/dist/pine-core/{p-90615423.system.entry.js → p-2883cb69.system.entry.js} +2 -2
- package/dist/pine-core/{p-31168da5.entry.js → p-2d21bc31.entry.js} +2 -2
- package/dist/pine-core/p-31bfac45.entry.js +2 -0
- package/dist/pine-core/{p-a3cdff85.entry.js → p-35e91ecb.entry.js} +2 -2
- package/dist/pine-core/{p-2537aacb.entry.js → p-3815f565.entry.js} +2 -2
- package/dist/pine-core/{p-a99e8caf.entry.js → p-396d4b63.entry.js} +2 -2
- package/dist/pine-core/{p-9bb6cc3d.entry.js → p-3b0a4abe.entry.js} +2 -2
- package/dist/pine-core/{p-5b9110fe.entry.js → p-3cd53462.entry.js} +2 -2
- package/dist/pine-core/{p-a5b24b1d.system.entry.js → p-3e45826f.system.entry.js} +2 -2
- package/dist/pine-core/{p-12360e47.entry.js → p-425144ae.entry.js} +2 -2
- package/dist/pine-core/p-425144ae.entry.js.map +1 -0
- package/dist/pine-core/p-48ed8147.entry.js +2 -0
- package/dist/pine-core/p-48ed8147.entry.js.map +1 -0
- package/dist/pine-core/{p-5b3ac18e.system.entry.js → p-4a42e114.system.entry.js} +2 -2
- package/dist/pine-core/p-4c82bff5.entry.js +2 -0
- package/dist/pine-core/{p-a07b8e45.system.entry.js → p-4e24be57.system.entry.js} +2 -2
- package/dist/pine-core/p-4ed357a4.entry.js +2 -0
- package/dist/pine-core/p-4ed357a4.entry.js.map +1 -0
- package/dist/pine-core/p-50a439b5.entry.js +2 -0
- package/dist/pine-core/{p-3440138d.entry.js → p-5162baee.entry.js} +2 -2
- package/dist/pine-core/{p-426e90cb.entry.js → p-51d2999d.entry.js} +2 -2
- package/dist/pine-core/{p-ba623ced.entry.js → p-563b640d.entry.js} +2 -2
- package/dist/pine-core/{p-d1313dd6.system.entry.js → p-599a5903.system.entry.js} +2 -2
- package/dist/pine-core/{p-YqHO7iPZ.system.js.map → p-5O8bhSdk.system.js.map} +1 -1
- package/dist/pine-core/{p-5f2865df.entry.js → p-5ef5f6b3.entry.js} +2 -2
- package/dist/pine-core/{p-4c23c75b.system.entry.js → p-63a669c9.system.entry.js} +2 -2
- package/dist/pine-core/p-65d0032c.system.entry.js +2 -0
- package/dist/pine-core/{p-2f6f60d9.entry.js → p-68f97bdf.entry.js} +2 -2
- package/dist/pine-core/p-6918b378.system.entry.js +2 -0
- package/dist/pine-core/{p-5e92aa34.system.entry.js.map → p-6918b378.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-e6dc2297.entry.js → p-694cfe69.entry.js} +2 -2
- package/dist/pine-core/{p-bddc9c5a.entry.js → p-6c25dfc3.entry.js} +2 -2
- package/dist/pine-core/{p-9ada659b.entry.js → p-6cbad264.entry.js} +2 -2
- package/dist/pine-core/{p-4d9eee67.system.entry.js → p-72ca815d.system.entry.js} +2 -2
- package/dist/pine-core/{p-63269b89.entry.js → p-766e52a3.entry.js} +2 -2
- package/dist/pine-core/{p-d41112ad.entry.js → p-795e1727.entry.js} +2 -2
- package/dist/pine-core/p-795e1727.entry.js.map +1 -0
- package/dist/pine-core/{p-e8cf15d7.system.entry.js → p-7a6f11bd.system.entry.js} +2 -2
- package/dist/pine-core/{p-c292e5da.system.entry.js → p-7d7dce2c.system.entry.js} +2 -2
- package/dist/pine-core/{p-137b3289.system.entry.js → p-7da176b4.system.entry.js} +2 -2
- package/dist/pine-core/{p-9eccf7b9.entry.js → p-88dd25dd.entry.js} +2 -2
- package/dist/pine-core/p-8KFA3I5T.system.js.map +1 -0
- package/dist/pine-core/{p-757c7b80.entry.js → p-8e40c9ef.entry.js} +2 -2
- package/dist/pine-core/{p-rcUX-rt5.system.js.map → p-8tpU1leU.system.js.map} +1 -1
- package/dist/pine-core/p-94a9ff2a.system.entry.js +2 -0
- package/dist/pine-core/{p-ccab748a.entry.js → p-957647f9.entry.js} +2 -2
- package/dist/pine-core/{p-02f48157.system.entry.js → p-9606f567.system.entry.js} +2 -2
- package/dist/pine-core/{p-475bb340.entry.js → p-9660a2c2.entry.js} +2 -2
- package/dist/pine-core/{p-3f0a6a75.system.entry.js → p-9ba4acdf.system.entry.js} +2 -2
- package/dist/pine-core/{p-7dd74fe2.system.entry.js → p-9d9a5ca8.system.entry.js} +2 -2
- package/dist/pine-core/{p-LM0mZTib.system.js.map → p-9eQIEVii.system.js.map} +1 -1
- package/dist/pine-core/{p-htODgUCV.system.js.map → p-B036z4h-.system.js.map} +1 -1
- package/dist/pine-core/{p-B8OHXU49.system.js.map → p-BASnRvhy.system.js.map} +1 -1
- package/dist/pine-core/{p-4EbKXnVN.system.js.map → p-BK1BTkTt.system.js.map} +1 -1
- package/dist/pine-core/{p-CI7DD4Gj.system.js.map → p-BR9M75xt.system.js.map} +1 -1
- package/dist/pine-core/{p-bs74TBAh.system.js.map → p-BRn0ywk1.system.js.map} +1 -1
- package/dist/pine-core/{p-bkQbPz-z.system.js.map → p-Be8OBmYb.system.js.map} +1 -1
- package/dist/pine-core/p-BpZTjdau.system.js.map +1 -0
- package/dist/pine-core/{p-BJtTt670.system.js.map → p-BqkabXR7.system.js.map} +1 -1
- package/dist/pine-core/{p-DFXWnbHE.system.js.map → p-BssHFst4.system.js.map} +1 -1
- package/dist/pine-core/{p-CP48ADFM.system.js → p-BxVkyfaO.system.js} +1 -1
- package/dist/pine-core/p-BxVkyfaO.system.js.map +1 -0
- package/dist/pine-core/{p-BTe59phF.system.js.map → p-CE8RZXT8.system.js.map} +1 -1
- package/dist/pine-core/{p-Cun139qe.system.js.map → p-CJ4Gf3Nx.system.js.map} +1 -1
- package/dist/pine-core/{p-Ct9csNdF.system.js.map → p-CUv9KdhN.system.js.map} +1 -1
- package/dist/pine-core/p-CWPG1B5Z.system.js.map +1 -0
- package/dist/pine-core/{p-C48G0LPH.system.js.map → p-CcDv1OdF.system.js.map} +1 -1
- package/dist/pine-core/{p-BHjZufAO.system.js.map → p-CjQwwLdV.system.js.map} +1 -1
- package/dist/pine-core/{p-BA95hFrH.system.js.map → p-ClY6yIBF.system.js.map} +1 -1
- package/dist/pine-core/{p-Bn36FPag.system.js.map → p-D-iLwshJ.system.js.map} +1 -1
- package/dist/pine-core/{p-DkNlmqjM.system.js.map → p-D02u2D7r.system.js.map} +1 -1
- package/dist/pine-core/{p-DY8eSueV.js → p-D094LgxJ.js} +1 -1
- package/dist/pine-core/p-D094LgxJ.js.map +1 -0
- package/dist/pine-core/{p-CR01VmO6.system.js.map → p-D3Ug1A-l.system.js.map} +1 -1
- package/dist/pine-core/{p-j0609tLE.system.js.map → p-DFWnxG_e.system.js.map} +1 -1
- package/dist/pine-core/{p-DbNPEZgc.system.js.map → p-DFY2-W9M.system.js.map} +1 -1
- package/dist/pine-core/{p-5L_gsODn.system.js.map → p-DKT0sVlZ.system.js.map} +1 -1
- package/dist/pine-core/{p-Cn_QqTXg.system.js.map → p-DXoBK65z.system.js.map} +1 -1
- package/dist/pine-core/{p-Civ2VHC7.system.js.map → p-DY97YDUU.system.js.map} +1 -1
- package/dist/pine-core/{p-ClPf_JF1.system.js.map → p-DZt6ah_A.system.js.map} +1 -1
- package/dist/pine-core/{p-eUcBQ_fh.system.js.map → p-De6wHGVf.system.js.map} +1 -1
- package/dist/pine-core/p-DgtQU13G.system.js.map +1 -0
- package/dist/pine-core/{p-CpyTw2IQ.system.js.map → p-DmWm26A6.system.js.map} +1 -1
- package/dist/pine-core/{p-Lk6DnEPT.system.js.map → p-DwXA2Glx.system.js.map} +1 -1
- package/dist/pine-core/{p-CP2nsJcg.system.js.map → p-GH_AtkdO.system.js.map} +1 -1
- package/dist/pine-core/p-JAVnELnm.system.js +1 -1
- package/dist/pine-core/{p-CSLo9qKS.system.js.map → p-P65hM6YU.system.js.map} +1 -1
- package/dist/pine-core/{p-DwQewDCV.system.js.map → p-PZw10cnm.system.js.map} +1 -1
- package/dist/pine-core/{p-CmquVvkz.system.js.map → p-Ri89mw0-.system.js.map} +1 -1
- package/dist/pine-core/{p-8f2a5a4c.system.entry.js → p-a24c75c2.system.entry.js} +2 -2
- package/dist/pine-core/{p-5040a872.entry.js → p-ad8fe96c.entry.js} +2 -2
- package/dist/pine-core/p-ae359dc7.system.entry.js +2 -0
- package/dist/pine-core/p-ae359dc7.system.entry.js.map +1 -0
- package/dist/pine-core/p-af5bf21d.entry.js +2 -0
- package/dist/pine-core/{p-325b3b0d.system.entry.js → p-b09bde5c.system.entry.js} +2 -2
- package/dist/pine-core/{p-7b5c8248.system.entry.js → p-b3ee3c4c.system.entry.js} +2 -2
- package/dist/pine-core/{p-cac3128b.system.entry.js → p-b46f66e8.system.entry.js} +2 -2
- package/dist/pine-core/p-b46f66e8.system.entry.js.map +1 -0
- package/dist/pine-core/{p-4d85945b.system.entry.js → p-b6ede995.system.entry.js} +2 -2
- package/dist/pine-core/p-ba195382.system.entry.js +2 -0
- package/dist/pine-core/{p-205ec2ac.system.entry.js → p-bc4b1749.system.entry.js} +2 -2
- package/dist/pine-core/{p-70aa35fc.system.entry.js → p-bce9f17d.system.entry.js} +2 -2
- package/dist/pine-core/{p-ac240034.system.entry.js → p-bd18b9bf.system.entry.js} +2 -2
- package/dist/pine-core/p-bd2329cd.entry.js +2 -0
- package/dist/pine-core/p-bf712423.entry.js +2 -0
- package/dist/pine-core/{p-9f0f1389.entry.js.map → p-bf712423.entry.js.map} +1 -1
- package/dist/pine-core/{p-154a32f4.entry.js → p-bfac5114.entry.js} +2 -2
- package/dist/pine-core/{p-4f1cRPxE.system.js.map → p-bw-OZgCg.system.js.map} +1 -1
- package/dist/pine-core/{p-bc85016b.entry.js → p-c73ef42b.entry.js} +2 -2
- package/dist/pine-core/p-c91fd600.entry.js +2 -0
- package/dist/pine-core/{p-f47d6724.entry.js → p-caff29fb.entry.js} +2 -2
- package/dist/pine-core/{p-8fdb10c4.system.entry.js → p-cb8c24ad.system.entry.js} +2 -2
- package/dist/pine-core/{p-8c0fc8ff.entry.js → p-ccdee55a.entry.js} +2 -2
- package/dist/pine-core/{p-ab3b6e0c.entry.js → p-d0366fba.entry.js} +2 -2
- package/dist/pine-core/{p-6be19a23.system.entry.js → p-d0504aa8.system.entry.js} +2 -2
- package/dist/pine-core/{p-8b201c9a.system.entry.js → p-d2b2caa2.system.entry.js} +2 -2
- package/dist/pine-core/p-d6139188.system.entry.js +2 -0
- package/dist/pine-core/p-d62a5444.system.entry.js +2 -0
- package/dist/pine-core/{p-daa36570.system.entry.js → p-d83d6fce.system.entry.js} +2 -2
- package/dist/pine-core/{p-6dcd7876.system.entry.js → p-d8d796ad.system.entry.js} +2 -2
- package/dist/pine-core/{p-9b3794cd.entry.js → p-e1815c34.entry.js} +2 -2
- package/dist/pine-core/{p-811e510d.system.entry.js → p-e9eb3fc3.system.entry.js} +2 -2
- package/dist/pine-core/p-eT6pKhWF.system.js.map +1 -0
- package/dist/pine-core/{p-d9693048.entry.js → p-ea8aba18.entry.js} +2 -2
- package/dist/pine-core/{p-6e862168.system.entry.js → p-ef56bc80.system.entry.js} +2 -2
- package/dist/pine-core/p-ef56bc80.system.entry.js.map +1 -0
- package/dist/pine-core/{p-51114c2b.system.entry.js → p-f00f70bf.system.entry.js} +2 -2
- package/dist/pine-core/{p-2fe330d0.system.entry.js → p-f0df10c7.system.entry.js} +2 -2
- package/dist/pine-core/p-f0df10c7.system.entry.js.map +1 -0
- package/dist/pine-core/{p-932283cf.system.entry.js → p-fce519e3.system.entry.js} +2 -2
- package/dist/pine-core/{p-0sPVsRFU.system.js.map → p-g2zH2UyI.system.js.map} +1 -1
- package/dist/pine-core/p-h_fnwqV_.system.js.map +1 -0
- package/dist/pine-core/{p-ztsUkqit.system.js.map → p-igLtCO20.system.js.map} +1 -1
- package/dist/pine-core/{p-CboCokff.system.js.map → p-kYQszSpu.system.js.map} +1 -1
- package/dist/pine-core/{p-BCKPcTKX.system.js.map → p-ljGHaVPv.system.js.map} +1 -1
- package/dist/pine-core/{p-CijIWK3K.system.js.map → p-sgZDP7ET.system.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-dropdown-menu-item.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-link.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-multiselect.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-cell.entry.esm.js.map +1 -1
- package/dist/pine-core/pine-core.esm.js +1 -1
- package/dist/types/components/pds-chip/pds-chip.d.ts +18 -0
- package/dist/types/components/pds-combobox/combobox-interface.d.ts +23 -0
- package/dist/types/components/pds-combobox/pds-combobox.d.ts +64 -0
- package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.d.ts +13 -0
- package/dist/types/components/pds-link/pds-link.d.ts +8 -0
- package/dist/types/components/pds-multiselect/multiselect-interface.d.ts +10 -0
- package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +16 -1
- package/dist/types/components.d.ts +159 -2
- package/hydrate/index.js +491 -81
- package/hydrate/index.mjs +491 -81
- package/package.json +2 -2
- package/dist/cjs/index-BA--jsiy.js.map +0 -1
- package/dist/esm/index-DY8eSueV.js.map +0 -1
- package/dist/esm-es5/index-DY8eSueV.js.map +0 -1
- package/dist/pine-core/p-10dbe3e2.entry.js +0 -2
- package/dist/pine-core/p-10dbe3e2.entry.js.map +0 -1
- package/dist/pine-core/p-10e0be55.entry.js +0 -2
- package/dist/pine-core/p-12360e47.entry.js.map +0 -1
- package/dist/pine-core/p-1fa303af.entry.js +0 -2
- package/dist/pine-core/p-2fe330d0.system.entry.js.map +0 -1
- package/dist/pine-core/p-30ea3668.system.entry.js +0 -2
- package/dist/pine-core/p-3c04c17e.system.entry.js +0 -2
- package/dist/pine-core/p-3c04c17e.system.entry.js.map +0 -1
- package/dist/pine-core/p-4alPHnzl.system.js.map +0 -1
- package/dist/pine-core/p-5e92aa34.system.entry.js +0 -2
- package/dist/pine-core/p-622f1342.system.entry.js +0 -4
- package/dist/pine-core/p-622f1342.system.entry.js.map +0 -1
- package/dist/pine-core/p-6e862168.system.entry.js.map +0 -1
- package/dist/pine-core/p-78ee2e08.system.entry.js +0 -2
- package/dist/pine-core/p-8c000d7c.entry.js +0 -2
- package/dist/pine-core/p-8eb1c168.entry.js +0 -2
- package/dist/pine-core/p-9c928c44.entry.js +0 -2
- package/dist/pine-core/p-9f0f1389.entry.js +0 -2
- package/dist/pine-core/p-B0Otb6kF.system.js.map +0 -1
- package/dist/pine-core/p-BSRmAvMC.system.js.map +0 -1
- package/dist/pine-core/p-CG5jdxoZ.system.js.map +0 -1
- package/dist/pine-core/p-CP48ADFM.system.js.map +0 -1
- package/dist/pine-core/p-DY8eSueV.js.map +0 -1
- package/dist/pine-core/p-DieNsvcz.system.js.map +0 -1
- package/dist/pine-core/p-a11c3642.system.entry.js +0 -2
- package/dist/pine-core/p-aPfTGFhq.system.js.map +0 -1
- package/dist/pine-core/p-ac186cd4.system.entry.js +0 -2
- package/dist/pine-core/p-b41465b8.entry.js +0 -3
- package/dist/pine-core/p-b41465b8.entry.js.map +0 -1
- package/dist/pine-core/p-bff9fb8e.entry.js +0 -2
- package/dist/pine-core/p-bff9fb8e.entry.js.map +0 -1
- package/dist/pine-core/p-cac3128b.system.entry.js.map +0 -1
- package/dist/pine-core/p-d41112ad.entry.js.map +0 -1
- package/dist/pine-core/p-e0f21c22.entry.js +0 -2
- package/dist/pine-core/p-eb026745.entry.js +0 -2
- package/dist/pine-core/p-fa21e054.system.entry.js +0 -2
- package/dist/vscode.html-data.json +0 -10178
- /package/dist/pine-core/{p-d6302edd.entry.js.map → p-003884fd.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9e7cd072.system.entry.js.map → p-0270ebee.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-063afa19.system.entry.js.map → p-09ff71ad.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c68bceb1.entry.js.map → p-0ac54273.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ac56273a.system.entry.js.map → p-0c2f13c3.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c7c00a27.entry.js.map → p-119ccf73.entry.js.map} +0 -0
- /package/dist/pine-core/{p-87eb8d4b.system.entry.js.map → p-13105538.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c24d11c7.entry.js.map → p-1951d49e.entry.js.map} +0 -0
- /package/dist/pine-core/{p-6d2da3ca.system.entry.js.map → p-1e77124d.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-f69d3fd6.entry.js.map → p-220cbe98.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9d6b6ff3.system.entry.js.map → p-226e45be.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-90615423.system.entry.js.map → p-2883cb69.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-31168da5.entry.js.map → p-2d21bc31.entry.js.map} +0 -0
- /package/dist/pine-core/{p-10e0be55.entry.js.map → p-31bfac45.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a3cdff85.entry.js.map → p-35e91ecb.entry.js.map} +0 -0
- /package/dist/pine-core/{p-2537aacb.entry.js.map → p-3815f565.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a99e8caf.entry.js.map → p-396d4b63.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9bb6cc3d.entry.js.map → p-3b0a4abe.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5b9110fe.entry.js.map → p-3cd53462.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a5b24b1d.system.entry.js.map → p-3e45826f.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5b3ac18e.system.entry.js.map → p-4a42e114.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-1fa303af.entry.js.map → p-4c82bff5.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a07b8e45.system.entry.js.map → p-4e24be57.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8eb1c168.entry.js.map → p-50a439b5.entry.js.map} +0 -0
- /package/dist/pine-core/{p-3440138d.entry.js.map → p-5162baee.entry.js.map} +0 -0
- /package/dist/pine-core/{p-426e90cb.entry.js.map → p-51d2999d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ba623ced.entry.js.map → p-563b640d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-d1313dd6.system.entry.js.map → p-599a5903.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5f2865df.entry.js.map → p-5ef5f6b3.entry.js.map} +0 -0
- /package/dist/pine-core/{p-4c23c75b.system.entry.js.map → p-63a669c9.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-78ee2e08.system.entry.js.map → p-65d0032c.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-2f6f60d9.entry.js.map → p-68f97bdf.entry.js.map} +0 -0
- /package/dist/pine-core/{p-e6dc2297.entry.js.map → p-694cfe69.entry.js.map} +0 -0
- /package/dist/pine-core/{p-bddc9c5a.entry.js.map → p-6c25dfc3.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9ada659b.entry.js.map → p-6cbad264.entry.js.map} +0 -0
- /package/dist/pine-core/{p-4d9eee67.system.entry.js.map → p-72ca815d.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-63269b89.entry.js.map → p-766e52a3.entry.js.map} +0 -0
- /package/dist/pine-core/{p-e8cf15d7.system.entry.js.map → p-7a6f11bd.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c292e5da.system.entry.js.map → p-7d7dce2c.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-137b3289.system.entry.js.map → p-7da176b4.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9eccf7b9.entry.js.map → p-88dd25dd.entry.js.map} +0 -0
- /package/dist/pine-core/{p-757c7b80.entry.js.map → p-8e40c9ef.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a11c3642.system.entry.js.map → p-94a9ff2a.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ccab748a.entry.js.map → p-957647f9.entry.js.map} +0 -0
- /package/dist/pine-core/{p-02f48157.system.entry.js.map → p-9606f567.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-475bb340.entry.js.map → p-9660a2c2.entry.js.map} +0 -0
- /package/dist/pine-core/{p-3f0a6a75.system.entry.js.map → p-9ba4acdf.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-7dd74fe2.system.entry.js.map → p-9d9a5ca8.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8f2a5a4c.system.entry.js.map → p-a24c75c2.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5040a872.entry.js.map → p-ad8fe96c.entry.js.map} +0 -0
- /package/dist/pine-core/{p-e0f21c22.entry.js.map → p-af5bf21d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-325b3b0d.system.entry.js.map → p-b09bde5c.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-7b5c8248.system.entry.js.map → p-b3ee3c4c.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-4d85945b.system.entry.js.map → p-b6ede995.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ac186cd4.system.entry.js.map → p-ba195382.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-205ec2ac.system.entry.js.map → p-bc4b1749.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-70aa35fc.system.entry.js.map → p-bce9f17d.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ac240034.system.entry.js.map → p-bd18b9bf.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8c000d7c.entry.js.map → p-bd2329cd.entry.js.map} +0 -0
- /package/dist/pine-core/{p-154a32f4.entry.js.map → p-bfac5114.entry.js.map} +0 -0
- /package/dist/pine-core/{p-bc85016b.entry.js.map → p-c73ef42b.entry.js.map} +0 -0
- /package/dist/pine-core/{p-eb026745.entry.js.map → p-c91fd600.entry.js.map} +0 -0
- /package/dist/pine-core/{p-f47d6724.entry.js.map → p-caff29fb.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8fdb10c4.system.entry.js.map → p-cb8c24ad.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8c0fc8ff.entry.js.map → p-ccdee55a.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ab3b6e0c.entry.js.map → p-d0366fba.entry.js.map} +0 -0
- /package/dist/pine-core/{p-6be19a23.system.entry.js.map → p-d0504aa8.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8b201c9a.system.entry.js.map → p-d2b2caa2.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-fa21e054.system.entry.js.map → p-d6139188.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-30ea3668.system.entry.js.map → p-d62a5444.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-daa36570.system.entry.js.map → p-d83d6fce.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-6dcd7876.system.entry.js.map → p-d8d796ad.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9b3794cd.entry.js.map → p-e1815c34.entry.js.map} +0 -0
- /package/dist/pine-core/{p-811e510d.system.entry.js.map → p-e9eb3fc3.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-d9693048.entry.js.map → p-ea8aba18.entry.js.map} +0 -0
- /package/dist/pine-core/{p-51114c2b.system.entry.js.map → p-f00f70bf.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-932283cf.system.entry.js.map → p-fce519e3.system.entry.js.map} +0 -0
|
@@ -30,6 +30,10 @@ export class PdsMultiselect {
|
|
|
30
30
|
* Debounce delay in milliseconds for search/fetch.
|
|
31
31
|
*/
|
|
32
32
|
this.debounce = 300;
|
|
33
|
+
/**
|
|
34
|
+
* Timeout in milliseconds for async fetch requests.
|
|
35
|
+
*/
|
|
36
|
+
this.fetchTimeout = 30000;
|
|
33
37
|
/**
|
|
34
38
|
* Maximum height of the dropdown before scrolling.
|
|
35
39
|
*/
|
|
@@ -62,6 +66,7 @@ export class PdsMultiselect {
|
|
|
62
66
|
this.selectedItems = [];
|
|
63
67
|
this.currentPage = 1;
|
|
64
68
|
this.hasMore = false;
|
|
69
|
+
this.creating = false;
|
|
65
70
|
// Flag to prevent focusout from closing during open transition
|
|
66
71
|
this.isOpening = false;
|
|
67
72
|
this.handleTriggerClick = () => {
|
|
@@ -294,6 +299,10 @@ export class PdsMultiselect {
|
|
|
294
299
|
window.clearTimeout(this.fetchDebounceTimer);
|
|
295
300
|
this.fetchDebounceTimer = undefined;
|
|
296
301
|
}
|
|
302
|
+
if (this.fetchTimeoutTimer !== undefined) {
|
|
303
|
+
window.clearTimeout(this.fetchTimeoutTimer);
|
|
304
|
+
this.fetchTimeoutTimer = undefined;
|
|
305
|
+
}
|
|
297
306
|
(_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
|
|
298
307
|
this.abortController = undefined;
|
|
299
308
|
}
|
|
@@ -343,13 +352,22 @@ export class PdsMultiselect {
|
|
|
343
352
|
getFilteredOptions() {
|
|
344
353
|
const allOptions = this.getAllOptions();
|
|
345
354
|
const query = this.searchQuery.toLowerCase();
|
|
346
|
-
|
|
355
|
+
const filtered = allOptions.filter(opt => {
|
|
347
356
|
// Filter by search query only - don't filter out selected items
|
|
348
357
|
if (query) {
|
|
349
358
|
return opt.text.toLowerCase().includes(query);
|
|
350
359
|
}
|
|
351
360
|
return true;
|
|
352
361
|
});
|
|
362
|
+
// Add create option if enabled and no matches found
|
|
363
|
+
if (this.createUrl && this.searchQuery.trim() && filtered.length === 0) {
|
|
364
|
+
return [{
|
|
365
|
+
id: '__create__',
|
|
366
|
+
text: this.searchQuery.trim(),
|
|
367
|
+
isCreateOption: true,
|
|
368
|
+
}];
|
|
369
|
+
}
|
|
370
|
+
return filtered;
|
|
353
371
|
}
|
|
354
372
|
updateFormValue() {
|
|
355
373
|
var _a;
|
|
@@ -377,11 +395,29 @@ export class PdsMultiselect {
|
|
|
377
395
|
var _a;
|
|
378
396
|
if (!this.asyncUrl)
|
|
379
397
|
return;
|
|
398
|
+
// Abort any pending request and clear existing timeout
|
|
380
399
|
(_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
|
|
400
|
+
if (this.fetchTimeoutTimer !== undefined) {
|
|
401
|
+
window.clearTimeout(this.fetchTimeoutTimer);
|
|
402
|
+
this.fetchTimeoutTimer = undefined;
|
|
403
|
+
}
|
|
381
404
|
this.abortController = new AbortController();
|
|
382
405
|
this.loading = true;
|
|
406
|
+
// Set up timeout for fetch request
|
|
407
|
+
this.fetchTimeoutTimer = window.setTimeout(() => {
|
|
408
|
+
var _a;
|
|
409
|
+
(_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
|
|
410
|
+
this.fetchTimeoutTimer = undefined;
|
|
411
|
+
}, this.fetchTimeout);
|
|
383
412
|
try {
|
|
384
|
-
|
|
413
|
+
// Guard against malformed asyncUrl
|
|
414
|
+
let url;
|
|
415
|
+
try {
|
|
416
|
+
url = new URL(this.asyncUrl, window.location.origin);
|
|
417
|
+
}
|
|
418
|
+
catch (urlError) {
|
|
419
|
+
throw new TypeError(`Invalid asyncUrl: ${this.asyncUrl}`);
|
|
420
|
+
}
|
|
385
421
|
if (this.asyncMethod === 'GET') {
|
|
386
422
|
url.searchParams.set('search', query);
|
|
387
423
|
url.searchParams.set('page', String(page));
|
|
@@ -392,14 +428,28 @@ export class PdsMultiselect {
|
|
|
392
428
|
} }, (this.asyncMethod === 'POST' && {
|
|
393
429
|
body: JSON.stringify({ search: query, page }),
|
|
394
430
|
})));
|
|
431
|
+
// Clear timeout on successful response
|
|
432
|
+
if (this.fetchTimeoutTimer !== undefined) {
|
|
433
|
+
window.clearTimeout(this.fetchTimeoutTimer);
|
|
434
|
+
this.fetchTimeoutTimer = undefined;
|
|
435
|
+
}
|
|
395
436
|
if (!response.ok)
|
|
396
437
|
throw new Error('Failed to fetch options');
|
|
397
438
|
const data = await response.json();
|
|
398
439
|
const formattedResults = data.results.map(item => {
|
|
440
|
+
// If formatResult is provided, use it
|
|
399
441
|
if (this.formatResult) {
|
|
400
442
|
return this.formatResult(item);
|
|
401
443
|
}
|
|
402
|
-
|
|
444
|
+
// Defensive check: ensure item is an object before spreading
|
|
445
|
+
if (typeof item === 'object' && item !== null) {
|
|
446
|
+
return Object.assign({ id: item.id, text: item.text }, item);
|
|
447
|
+
}
|
|
448
|
+
// Handle primitives by converting to safe shape
|
|
449
|
+
return {
|
|
450
|
+
id: String(item),
|
|
451
|
+
text: String(item),
|
|
452
|
+
};
|
|
403
453
|
});
|
|
404
454
|
if (page === 1) {
|
|
405
455
|
this.internalOptions = formattedResults;
|
|
@@ -411,6 +461,11 @@ export class PdsMultiselect {
|
|
|
411
461
|
this.currentPage = page;
|
|
412
462
|
}
|
|
413
463
|
catch (error) {
|
|
464
|
+
// Clear timeout on error
|
|
465
|
+
if (this.fetchTimeoutTimer !== undefined) {
|
|
466
|
+
window.clearTimeout(this.fetchTimeoutTimer);
|
|
467
|
+
this.fetchTimeoutTimer = undefined;
|
|
468
|
+
}
|
|
414
469
|
if (error.name !== 'AbortError') {
|
|
415
470
|
console.error('PdsMultiselect: Failed to fetch options', error);
|
|
416
471
|
}
|
|
@@ -419,6 +474,59 @@ export class PdsMultiselect {
|
|
|
419
474
|
this.loading = false;
|
|
420
475
|
}
|
|
421
476
|
}
|
|
477
|
+
async createOption(query) {
|
|
478
|
+
if (!this.createUrl || !query.trim())
|
|
479
|
+
return;
|
|
480
|
+
// Reentrancy guard: prevent duplicate POSTs if creation is already in-flight
|
|
481
|
+
if (this.creating)
|
|
482
|
+
return;
|
|
483
|
+
this.creating = true;
|
|
484
|
+
try {
|
|
485
|
+
const url = new URL(this.createUrl, window.location.origin);
|
|
486
|
+
const response = await fetch(url.toString(), {
|
|
487
|
+
method: 'POST',
|
|
488
|
+
headers: {
|
|
489
|
+
'Content-Type': 'application/json',
|
|
490
|
+
'Accept': 'application/json',
|
|
491
|
+
},
|
|
492
|
+
body: JSON.stringify({ text: query.trim() }),
|
|
493
|
+
});
|
|
494
|
+
if (!response.ok)
|
|
495
|
+
throw new Error('Failed to create option');
|
|
496
|
+
const data = await response.json();
|
|
497
|
+
const newOption = Object.assign({ id: data.id, text: data.text }, data);
|
|
498
|
+
// Add to internal options
|
|
499
|
+
this.internalOptions = [...this.internalOptions, newOption];
|
|
500
|
+
// Select the new option
|
|
501
|
+
this.value = [...this.value, String(newOption.id)];
|
|
502
|
+
// Sync selected items
|
|
503
|
+
this.syncSelectedItems();
|
|
504
|
+
// Emit create event
|
|
505
|
+
this.pdsMultiselectCreate.emit({
|
|
506
|
+
query: query.trim(),
|
|
507
|
+
newOption,
|
|
508
|
+
});
|
|
509
|
+
// Emit change event
|
|
510
|
+
this.pdsMultiselectChange.emit({
|
|
511
|
+
values: this.value,
|
|
512
|
+
items: this.selectedItems,
|
|
513
|
+
});
|
|
514
|
+
// Clear search and keep dropdown open
|
|
515
|
+
this.searchQuery = '';
|
|
516
|
+
this.highlightedIndex = -1;
|
|
517
|
+
// Focus back on search input
|
|
518
|
+
requestAnimationFrame(() => {
|
|
519
|
+
var _a;
|
|
520
|
+
(_a = this.searchInputEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
console.error('PdsMultiselect: Failed to create option', error);
|
|
525
|
+
}
|
|
526
|
+
finally {
|
|
527
|
+
this.creating = false;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
422
530
|
openDropdown() {
|
|
423
531
|
if (this.disabled)
|
|
424
532
|
return;
|
|
@@ -497,6 +605,14 @@ export class PdsMultiselect {
|
|
|
497
605
|
}
|
|
498
606
|
toggleOption(option) {
|
|
499
607
|
var _a;
|
|
608
|
+
// Handle create option
|
|
609
|
+
if (option.isCreateOption) {
|
|
610
|
+
// Prevent multiple create calls while one is in-flight
|
|
611
|
+
if (!this.creating) {
|
|
612
|
+
this.createOption(this.searchQuery);
|
|
613
|
+
}
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
500
616
|
const isSelected = this.value.includes(String(option.id));
|
|
501
617
|
if (isSelected) {
|
|
502
618
|
// Remove from selection
|
|
@@ -542,13 +658,17 @@ export class PdsMultiselect {
|
|
|
542
658
|
const hasSlottedLoading = !!this.el.querySelector('[slot="loading"]');
|
|
543
659
|
return (h("div", { class: "pds-multiselect__panel", ref: el => (this.panelEl = el), style: { minWidth: this.minWidth } }, h("div", { class: "pds-multiselect__search" }, h("pds-icon", { name: "search", size: "small" }), h("input", { ref: el => (this.searchInputEl = el), type: "text", class: "pds-multiselect__search-input", placeholder: "Find...", value: this.searchQuery, "aria-label": "Search options", "aria-controls": `${this.componentId}-listbox`, "aria-activedescendant": this.highlightedIndex >= 0 ? `${this.componentId}-option-${this.highlightedIndex}` : undefined, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": "true", "aria-autocomplete": "list", autocomplete: "off", onInput: this.handleSearchInputChange, onKeyDown: this.handleSearchInputKeyDown })), this.renderSelectedItemsList(), h("ul", { class: "pds-multiselect__listbox", role: "listbox", "aria-multiselectable": "true", "aria-label": this.label || 'Options', id: `${this.componentId}-listbox`, ref: el => (this.listboxEl = el), style: { maxHeight: this.maxHeight }, onScroll: this.handleScroll }, this.loading && (h("li", { class: "pds-multiselect__loading", role: "presentation" }, hasSlottedLoading ? (h("slot", { name: "loading" })) : (h("pds-loader", { size: "small" })))), !this.loading && filteredOptions.length === 0 && (h("li", { class: "pds-multiselect__empty", role: "presentation" }, hasSlottedEmpty ? (h("slot", { name: "empty" })) : (h("span", null, "No options found")))), filteredOptions.map((option, index) => {
|
|
544
660
|
const isSelected = valueArray.includes(String(option.id));
|
|
545
|
-
const
|
|
661
|
+
const isCreateOption = option.isCreateOption;
|
|
662
|
+
const isHighlighted = index === this.highlightedIndex && !isCreateOption;
|
|
546
663
|
const optionId = `${this.componentId}-option-${index}`;
|
|
664
|
+
const isCreateDisabled = isCreateOption && this.creating;
|
|
547
665
|
return (h("li", { key: String(option.id), id: optionId, class: {
|
|
548
666
|
'pds-multiselect__option': true,
|
|
549
667
|
'pds-multiselect__option--highlighted': isHighlighted,
|
|
550
668
|
'pds-multiselect__option--selected': isSelected,
|
|
551
|
-
|
|
669
|
+
'pds-multiselect__option--create': isCreateOption,
|
|
670
|
+
'pds-multiselect__option--disabled': isCreateDisabled,
|
|
671
|
+
}, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": isCreateDisabled ? 'true' : undefined, "aria-label": isCreateOption ? `Create new tag: ${option.text}` : undefined, "data-index": index, onMouseDown: this.handleOptionMouseDown(option), onMouseEnter: this.handleOptionMouseEnter(index) }, isCreateOption ? (h("pds-box", { class: "pds-multiselect__create-option", "align-items": "center", gap: "xs" }, h("pds-icon", { name: "add", size: "small" }), h("pds-text", null, "Add \"", option.text, "\""))) : (h("pds-checkbox", { componentId: `${this.componentId}-checkbox-${index}`, checked: isSelected, label: option.text, style: { pointerEvents: 'none' } }))));
|
|
552
672
|
}), this.hasMore && !this.loading && (h("li", { class: "pds-multiselect__load-more", role: "presentation" }, h("pds-loader", { size: "small" }))))));
|
|
553
673
|
}
|
|
554
674
|
getTriggerText() {
|
|
@@ -560,19 +680,19 @@ export class PdsMultiselect {
|
|
|
560
680
|
}
|
|
561
681
|
render() {
|
|
562
682
|
const hasSelections = this.selectedItems.length > 0;
|
|
563
|
-
return (h(Host, { key: '
|
|
683
|
+
return (h(Host, { key: 'b03d0709427e89ae3971d2f1fdc42a6e6616e428', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: 'd71fc5ec468c6c54bafe93307a6b3e65c0fe5b81', class: "pds-multiselect" }, this.label && (h("label", { key: 'c15deeec84eac043bb7c8813327d0f942b892734', htmlFor: this.componentId, class: {
|
|
564
684
|
'pds-multiselect__label': true,
|
|
565
685
|
'visually-hidden': this.hideLabel,
|
|
566
|
-
} }, this.label)), h("div", { key: '
|
|
686
|
+
} }, this.label)), h("div", { key: 'f256795c69fd40f9c717d8c884d897032d3c4f49', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), onFocusout: this.handleContainerFocusOut, style: { width: this.triggerWidth } }, h("button", { key: '131f3141229ee14418737010615e9e1f2f430c4f', ref: el => (this.triggerEl = el), type: "button", class: {
|
|
567
687
|
'pds-multiselect__trigger': true,
|
|
568
688
|
'pds-multiselect__trigger--open': this.isOpen,
|
|
569
689
|
'pds-multiselect__trigger--disabled': this.disabled,
|
|
570
690
|
'pds-multiselect__trigger--invalid': this.invalid || !!this.errorMessage,
|
|
571
691
|
'pds-multiselect__trigger--has-value': hasSelections,
|
|
572
|
-
}, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.errorMessage || this.helperMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, h("span", { key: '
|
|
692
|
+
}, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.errorMessage || this.helperMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, h("span", { key: '3e61f1728014a97a193b6fa6158f21abd0d169c3', class: {
|
|
573
693
|
'pds-multiselect__trigger-text': true,
|
|
574
694
|
'pds-multiselect__trigger-text--placeholder': !hasSelections,
|
|
575
|
-
} }, this.getTriggerText()), h("pds-icon", { key: '
|
|
695
|
+
} }, this.getTriggerText()), h("pds-icon", { key: '13bc74c492bf7ead5a77e42e92002b45389f1906', class: "pds-multiselect__icon", icon: enlarge })), this.renderDropdown()), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (h("p", { key: '53d6219eb3b910a277b5025be11d2d0a742c0ee1', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (h("p", { key: '475fd9c02f8cc3cdd1f1911b3e71dce32e2f1743', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: 'ab6fdb8a743caa1712fc30532c0c2b6099703564', icon: danger, size: "small" }), this.errorMessage)), h("div", { key: '64d5db05c6b0e04a6cbf899ccc30ee479c23e9d6', style: { display: 'none' } }, h("slot", { key: '378ceb06d78d5542ca40ed4852bb582da514028c' })))));
|
|
576
696
|
}
|
|
577
697
|
static get is() { return "pds-multiselect"; }
|
|
578
698
|
static get encapsulation() { return "shadow"; }
|
|
@@ -763,6 +883,26 @@ export class PdsMultiselect {
|
|
|
763
883
|
"attribute": "debounce",
|
|
764
884
|
"defaultValue": "300"
|
|
765
885
|
},
|
|
886
|
+
"fetchTimeout": {
|
|
887
|
+
"type": "number",
|
|
888
|
+
"mutable": false,
|
|
889
|
+
"complexType": {
|
|
890
|
+
"original": "number",
|
|
891
|
+
"resolved": "number",
|
|
892
|
+
"references": {}
|
|
893
|
+
},
|
|
894
|
+
"required": false,
|
|
895
|
+
"optional": false,
|
|
896
|
+
"docs": {
|
|
897
|
+
"tags": [],
|
|
898
|
+
"text": "Timeout in milliseconds for async fetch requests."
|
|
899
|
+
},
|
|
900
|
+
"getter": false,
|
|
901
|
+
"setter": false,
|
|
902
|
+
"reflect": false,
|
|
903
|
+
"attribute": "fetch-timeout",
|
|
904
|
+
"defaultValue": "30000"
|
|
905
|
+
},
|
|
766
906
|
"maxSelections": {
|
|
767
907
|
"type": "number",
|
|
768
908
|
"mutable": false,
|
|
@@ -1023,6 +1163,25 @@ export class PdsMultiselect {
|
|
|
1023
1163
|
},
|
|
1024
1164
|
"getter": false,
|
|
1025
1165
|
"setter": false
|
|
1166
|
+
},
|
|
1167
|
+
"createUrl": {
|
|
1168
|
+
"type": "string",
|
|
1169
|
+
"mutable": false,
|
|
1170
|
+
"complexType": {
|
|
1171
|
+
"original": "string",
|
|
1172
|
+
"resolved": "string",
|
|
1173
|
+
"references": {}
|
|
1174
|
+
},
|
|
1175
|
+
"required": false,
|
|
1176
|
+
"optional": true,
|
|
1177
|
+
"docs": {
|
|
1178
|
+
"tags": [],
|
|
1179
|
+
"text": "URL endpoint for creating new options. When set, shows \"Add\" option when no matches found."
|
|
1180
|
+
},
|
|
1181
|
+
"getter": false,
|
|
1182
|
+
"setter": false,
|
|
1183
|
+
"reflect": false,
|
|
1184
|
+
"attribute": "create-url"
|
|
1026
1185
|
}
|
|
1027
1186
|
};
|
|
1028
1187
|
}
|
|
@@ -1034,7 +1193,8 @@ export class PdsMultiselect {
|
|
|
1034
1193
|
"internalOptions": {},
|
|
1035
1194
|
"selectedItems": {},
|
|
1036
1195
|
"currentPage": {},
|
|
1037
|
-
"hasMore": {}
|
|
1196
|
+
"hasMore": {},
|
|
1197
|
+
"creating": {}
|
|
1038
1198
|
};
|
|
1039
1199
|
}
|
|
1040
1200
|
static get events() {
|
|
@@ -1101,6 +1261,27 @@ export class PdsMultiselect {
|
|
|
1101
1261
|
}
|
|
1102
1262
|
}
|
|
1103
1263
|
}
|
|
1264
|
+
}, {
|
|
1265
|
+
"method": "pdsMultiselectCreate",
|
|
1266
|
+
"name": "pdsMultiselectCreate",
|
|
1267
|
+
"bubbles": true,
|
|
1268
|
+
"cancelable": true,
|
|
1269
|
+
"composed": true,
|
|
1270
|
+
"docs": {
|
|
1271
|
+
"tags": [],
|
|
1272
|
+
"text": "Emitted when a new option is created."
|
|
1273
|
+
},
|
|
1274
|
+
"complexType": {
|
|
1275
|
+
"original": "MultiselectCreateEventDetail",
|
|
1276
|
+
"resolved": "MultiselectCreateEventDetail",
|
|
1277
|
+
"references": {
|
|
1278
|
+
"MultiselectCreateEventDetail": {
|
|
1279
|
+
"location": "import",
|
|
1280
|
+
"path": "./multiselect-interface",
|
|
1281
|
+
"id": "src/components/pds-multiselect/multiselect-interface.ts::MultiselectCreateEventDetail"
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1104
1285
|
}];
|
|
1105
1286
|
}
|
|
1106
1287
|
static get methods() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds-multiselect.js","sourceRoot":"","sources":["../../../../src/components/pds-multiselect/pds-multiselect.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, h, Host, Listen, Method, Prop, State, Watch } from '@stencil/core';\nimport { computePosition, flip, offset, shift, size, autoUpdate } from '@floating-ui/dom';\nimport { debounceEvent } from '@utils/utils';\nimport { messageId, assignDescription } from '../../utils/form';\nimport { danger, enlarge } from '@pine-ds/icons/icons';\nimport type {\n MultiselectOption,\n MultiselectChangeEventDetail,\n MultiselectSearchEventDetail,\n MultiselectLoadOptionsEventDetail,\n AsyncResponse,\n} from './multiselect-interface';\n\n/**\n * @slot (default) - Static option elements for the multiselect\n * @slot empty - Custom empty state message when no options match\n * @slot loading - Custom loading indicator\n */\n@Component({\n tag: 'pds-multiselect',\n styleUrl: 'pds-multiselect.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class PdsMultiselect {\n private triggerEl?: HTMLButtonElement;\n private searchInputEl?: HTMLInputElement;\n private containerEl?: HTMLElement;\n private listboxEl?: HTMLElement;\n private panelEl?: HTMLElement;\n private internals?: ElementInternals;\n private abortController?: AbortController;\n private fetchDebounceTimer?: number;\n private observer?: MutationObserver;\n private cleanupAutoUpdate?: () => void;\n\n @Element() el!: HTMLPdsMultiselectElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Text to be displayed as the multiselect label.\n */\n @Prop() label?: string;\n\n /**\n * Placeholder text for the input field.\n */\n @Prop() placeholder?: string = 'Select...';\n\n /**\n * Specifies the name. Submitted with the form as part of a name/value pair.\n */\n @Prop() name?: string;\n\n /**\n * Array of selected option values.\n */\n @Prop({ mutable: true }) value: string[] = [];\n\n /**\n * Determines whether or not the multiselect is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * URL endpoint for async data fetching.\n */\n @Prop() asyncUrl?: string;\n\n /**\n * HTTP method for async requests.\n */\n @Prop() asyncMethod: 'GET' | 'POST' = 'GET';\n\n /**\n * Debounce delay in milliseconds for search/fetch.\n */\n @Prop() debounce: number = 300;\n\n /**\n * Maximum number of selections allowed.\n */\n @Prop() maxSelections?: number;\n\n /**\n * Maximum height of the dropdown before scrolling.\n */\n @Prop() maxHeight: string = '300px';\n\n /**\n * Width of the trigger button (and reference for dropdown positioning).\n */\n @Prop() triggerWidth: string = '100%';\n\n /**\n * Minimum width of the dropdown panel.\n */\n @Prop() minWidth: string = '250px';\n\n /**\n * Width of the dropdown panel. Defaults to the trigger width.\n */\n @Prop() panelWidth?: string;\n\n /**\n * Visually hides the label but keeps it accessible.\n */\n @Prop() hideLabel: boolean = false;\n\n /**\n * Error message to display.\n */\n @Prop() errorMessage?: string;\n\n /**\n * Helper message to display below the input.\n */\n @Prop() helperMessage?: string;\n\n /**\n * If true, the multiselect is in an invalid state.\n */\n @Prop() invalid?: boolean;\n\n /**\n * If true, the multiselect is required.\n */\n @Prop() required: boolean = false;\n\n /**\n * Whether the component is currently loading async options.\n */\n @Prop({ mutable: true }) loading: boolean = false;\n\n /**\n * Options provided externally (for consumer-managed async).\n */\n @Prop() options?: MultiselectOption[];\n\n /**\n * Function to format async results. Receives raw API response item.\n */\n @Prop() formatResult?: (item: unknown) => MultiselectOption;\n\n // Internal state\n @State() isOpen: boolean = false;\n @State() searchQuery: string = '';\n @State() highlightedIndex: number = -1;\n @State() internalOptions: MultiselectOption[] = [];\n @State() selectedItems: MultiselectOption[] = [];\n @State() currentPage: number = 1;\n @State() hasMore: boolean = false;\n\n // Flag to prevent focusout from closing during open transition\n private isOpening: boolean = false;\n\n /**\n * Emitted when selection changes.\n */\n @Event() pdsMultiselectChange!: EventEmitter<MultiselectChangeEventDetail>;\n\n /**\n * Emitted on search input (for consumer-managed async).\n */\n @Event() pdsMultiselectSearch!: EventEmitter<MultiselectSearchEventDetail>;\n\n /**\n * Emitted to request more options (pagination).\n */\n @Event() pdsMultiselectLoadOptions!: EventEmitter<MultiselectLoadOptionsEventDetail>;\n\n private originalSearchEmitter?: EventEmitter<MultiselectSearchEventDetail>;\n\n connectedCallback() {\n // Initialize ElementInternals for form association (only once per element instance)\n if (this.el.attachInternals && !this.internals) {\n this.internals = this.el.attachInternals();\n }\n }\n\n componentWillLoad() {\n this.originalSearchEmitter = this.pdsMultiselectSearch;\n this.syncSelectedItems();\n }\n\n componentDidLoad() {\n this.setupDebounce();\n this.setupMutationObserver();\n this.setupSlotChangeListener();\n this.updateFormValue();\n\n // Ensure preselected values sync after DOM is fully ready\n // This handles cases where slot content loads after initial render (e.g., in docs/MDX)\n requestAnimationFrame(() => {\n this.updateOptionsFromSlot();\n this.syncSelectedItems();\n });\n }\n\n private setupSlotChangeListener() {\n const slot = this.el.shadowRoot?.querySelector('slot:not([name])') as HTMLSlotElement;\n if (slot) {\n slot.addEventListener('slotchange', () => {\n this.updateOptionsFromSlot();\n this.syncSelectedItems();\n });\n // Also call it immediately in case content is already slotted\n this.updateOptionsFromSlot();\n }\n }\n\n disconnectedCallback() {\n this.observer?.disconnect();\n this.cleanupAutoUpdate?.();\n this.clearAsyncFetchState();\n }\n\n @Watch('debounce')\n protected setupDebounce() {\n const { pdsMultiselectSearch, debounce, originalSearchEmitter } = this;\n this.pdsMultiselectSearch = debounce === undefined\n ? originalSearchEmitter ?? pdsMultiselectSearch\n : debounceEvent(pdsMultiselectSearch, debounce);\n }\n\n @Watch('value')\n protected valueChanged(newValue: string[] | string) {\n // Handle JSON string values (from HTML attributes)\n if (typeof newValue === 'string') {\n try {\n const parsed = JSON.parse(newValue);\n if (Array.isArray(parsed)) {\n this.value = parsed;\n return; // The assignment will trigger this watcher again with the array\n }\n } catch {\n // Not valid JSON, treat as single value\n this.value = newValue ? [newValue] : [];\n return;\n }\n }\n this.syncSelectedItems();\n this.updateFormValue();\n }\n\n @Watch('options')\n protected optionsChanged() {\n if (this.options) {\n this.internalOptions = [...this.options];\n }\n }\n\n @Watch('internalOptions')\n protected internalOptionsChanged() {\n // Re-sync selected items when options become available\n // This handles the case where value is set before options are loaded (e.g., from slot)\n this.syncSelectedItems();\n }\n\n /**\n * Sets focus on the trigger button.\n */\n @Method()\n async setFocus() {\n this.triggerEl?.focus();\n }\n\n /**\n * Handle global keyboard events for accessibility.\n * Closes dropdown on Escape key press regardless of focus location.\n */\n @Listen('keydown', { target: 'window' })\n handleWindowKeyDown(event: KeyboardEvent) {\n if (!this.isOpen) return;\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeDropdown();\n this.triggerEl?.focus();\n }\n }\n\n private setupMutationObserver() {\n this.observer = new MutationObserver(() => {\n this.updateOptionsFromSlot();\n });\n\n this.observer.observe(this.el, {\n childList: true,\n subtree: true,\n });\n }\n\n private updateOptionsFromSlot() {\n const slot = this.el.shadowRoot?.querySelector('slot:not([name])') as HTMLSlotElement;\n if (!slot) return;\n\n const options = slot.assignedElements({ flatten: true })\n .filter((el): el is HTMLOptionElement => el.tagName === 'OPTION')\n .map(opt => ({\n id: opt.value,\n text: opt.textContent || opt.value,\n }));\n\n // Only update if we actually found options AND we're not using async/external options\n // Don't clear internalOptions if slot returns empty (might be mid-DOM-update)\n if (options.length > 0 && !this.asyncUrl && !this.options) {\n this.internalOptions = options;\n }\n }\n\n private clearAsyncFetchState() {\n if (this.fetchDebounceTimer !== undefined) {\n window.clearTimeout(this.fetchDebounceTimer);\n this.fetchDebounceTimer = undefined;\n }\n this.abortController?.abort();\n this.abortController = undefined;\n }\n\n private debouncedFetchAsyncOptions(query: string, page: number = 1) {\n if (!this.asyncUrl) return;\n\n if (this.fetchDebounceTimer !== undefined) {\n window.clearTimeout(this.fetchDebounceTimer);\n }\n\n const delay = Math.max(0, this.debounce ?? 0);\n this.fetchDebounceTimer = window.setTimeout(() => {\n this.fetchDebounceTimer = undefined;\n this.fetchOptions(query, page);\n }, delay);\n }\n\n private syncSelectedItems() {\n // Ensure value is an array (may be string from HTML attribute)\n const valueArray = this.ensureValueArray();\n const allOptions = this.getAllOptions();\n this.selectedItems = valueArray\n .map(val => allOptions.find(opt => String(opt.id) === String(val)))\n .filter((opt): opt is MultiselectOption => opt !== undefined);\n }\n\n private ensureValueArray(): string[] {\n // Handle JSON string values passed via HTML attribute\n if (typeof this.value === 'string') {\n try {\n const parsed = JSON.parse(this.value as unknown as string);\n if (Array.isArray(parsed)) {\n this.value = parsed;\n return parsed;\n }\n } catch {\n // Not valid JSON, treat as single value\n const singleValue = this.value as unknown as string;\n this.value = singleValue ? [singleValue] : [];\n return this.value;\n }\n }\n return Array.isArray(this.value) ? this.value : [];\n }\n\n private getAllOptions(): MultiselectOption[] {\n return this.options || this.internalOptions;\n }\n\n private getFilteredOptions(): MultiselectOption[] {\n const allOptions = this.getAllOptions();\n const query = this.searchQuery.toLowerCase();\n\n return allOptions.filter(opt => {\n // Filter by search query only - don't filter out selected items\n if (query) {\n return opt.text.toLowerCase().includes(query);\n }\n return true;\n });\n }\n\n private updateFormValue() {\n if (this.internals?.setFormValue) {\n // Ensure value is an array before iterating\n const valueArray = this.ensureValueArray();\n\n // Submit as multiple values with same name (native select multiple behavior)\n const formData = new FormData();\n valueArray.forEach(val => {\n if (this.name) {\n formData.append(this.name, val);\n }\n });\n this.internals.setFormValue(formData);\n\n // Update validity state for required validation\n if (this.required && valueArray.length === 0) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please select at least one option.',\n this.triggerEl\n );\n } else {\n this.internals.setValidity({});\n }\n }\n }\n\n private async fetchOptions(query: string, page: number = 1) {\n if (!this.asyncUrl) return;\n\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.loading = true;\n\n try {\n const url = new URL(this.asyncUrl, window.location.origin);\n if (this.asyncMethod === 'GET') {\n url.searchParams.set('search', query);\n url.searchParams.set('page', String(page));\n }\n\n const response = await fetch(url.toString(), {\n method: this.asyncMethod,\n signal: this.abortController.signal,\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n ...(this.asyncMethod === 'POST' && {\n body: JSON.stringify({ search: query, page }),\n }),\n });\n\n if (!response.ok) throw new Error('Failed to fetch options');\n\n const data: AsyncResponse = await response.json();\n\n const formattedResults = data.results.map(item => {\n if (this.formatResult) {\n return this.formatResult(item);\n }\n return {\n id: item.id,\n text: item.text,\n ...item,\n };\n });\n\n if (page === 1) {\n this.internalOptions = formattedResults;\n } else {\n this.internalOptions = [...this.internalOptions, ...formattedResults];\n }\n\n this.hasMore = data.totalCount ? this.internalOptions.length < data.totalCount : false;\n this.currentPage = page;\n\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n console.error('PdsMultiselect: Failed to fetch options', error);\n }\n } finally {\n this.loading = false;\n }\n }\n\n private handleTriggerClick = () => {\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n };\n\n private handleTriggerKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!this.isOpen) {\n this.openDropdown();\n }\n break;\n }\n };\n\n private handleSearchInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n this.highlightedIndex = -1;\n\n // Emit search event for consumer-managed async\n this.pdsMultiselectSearch.emit({ query: this.searchQuery });\n\n // Fetch from async URL if configured\n if (this.asyncUrl) {\n this.debouncedFetchAsyncOptions(this.searchQuery, 1);\n }\n };\n\n private handleSearchInputKeyDown = (e: KeyboardEvent) => {\n const filteredOptions = this.getFilteredOptions();\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.highlightedIndex = Math.min(this.highlightedIndex + 1, filteredOptions.length - 1);\n this.scrollOptionIntoView();\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\n this.scrollOptionIntoView();\n break;\n\n case 'Enter':\n e.preventDefault();\n if (this.highlightedIndex >= 0) {\n const option = filteredOptions[this.highlightedIndex];\n if (option) {\n this.selectOption(option);\n }\n }\n break;\n\n // Escape is handled by the global @Listen('keydown') handler\n\n case 'Tab':\n this.closeDropdown();\n break;\n }\n };\n\n private handleContainerFocusOut = () => {\n // Use setTimeout to delay the check - this allows click events and focus transitions to complete\n // before we decide to close the dropdown\n setTimeout(() => {\n // Don't close if we're in the middle of opening or already closed\n if (!this.isOpen || this.isOpening) return;\n\n const activeElement = document.activeElement;\n\n // Check if focus is within our component's shadow root\n const isInShadowRoot = this.el.shadowRoot?.contains(activeElement);\n\n // Also check if focus is on the host element itself\n const isOnHost = activeElement === this.el;\n\n if (!isInShadowRoot && !isOnHost) {\n this.closeDropdown();\n }\n }, 0);\n };\n\n private openDropdown() {\n if (this.disabled) return;\n\n this.isOpening = true;\n this.isOpen = true;\n this.highlightedIndex = -1;\n\n // Trigger initial fetch if async\n if (this.asyncUrl && this.internalOptions.length === 0) {\n this.debouncedFetchAsyncOptions(this.searchQuery, 1);\n }\n\n requestAnimationFrame(() => {\n this.positionDropdown();\n // Focus the search input after the panel is positioned\n this.searchInputEl?.focus();\n // Clear the opening flag after focus has moved\n setTimeout(() => {\n this.isOpening = false;\n }, 50);\n });\n }\n\n private closeDropdown() {\n this.isOpen = false;\n this.highlightedIndex = -1;\n this.searchQuery = '';\n\n // Clean up auto-update\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = undefined;\n }\n }\n\n private positionDropdown() {\n if (!this.containerEl || !this.panelEl) return;\n const referenceEl = this.triggerEl || this.containerEl;\n\n const { minWidth, panelWidth } = this;\n\n const updatePosition = () => {\n computePosition(referenceEl!, this.panelEl!, {\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n offset(12),\n flip(),\n shift({ padding: 8 }),\n size({\n apply: ({ rects, elements }) => {\n Object.assign(elements.floating.style, {\n width: panelWidth ?? `${rects.reference.width}px`,\n minWidth,\n });\n },\n }),\n ],\n }).then(({ x, y }) => {\n if (this.panelEl) {\n this.panelEl.style.left = `${x}px`;\n this.panelEl.style.top = `${y}px`;\n }\n });\n };\n\n // Initial position\n updatePosition();\n\n // Set up auto-update for window resize and scroll\n const cleanupAutoUpdate = autoUpdate(\n referenceEl!,\n this.panelEl,\n updatePosition\n );\n this.cleanupAutoUpdate = () => {\n cleanupAutoUpdate();\n this.clearAsyncFetchState();\n };\n }\n\n private scrollOptionIntoView() {\n requestAnimationFrame(() => {\n const highlighted = this.listboxEl?.querySelector(`[data-index=\"${this.highlightedIndex}\"]`) as HTMLElement;\n highlighted?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n private toggleOption(option: MultiselectOption) {\n const isSelected = this.value.includes(String(option.id));\n\n if (isSelected) {\n // Remove from selection\n const newValue = this.value.filter(v => v !== String(option.id));\n this.value = newValue;\n\n const newSelectedItems = this.selectedItems.filter(item => String(item.id) !== String(option.id));\n\n this.pdsMultiselectChange.emit({\n values: newValue,\n items: newSelectedItems,\n });\n } else {\n // Add to selection\n if (this.maxSelections && this.value.length >= this.maxSelections) {\n return;\n }\n\n const newValue = [...this.value, String(option.id)];\n this.value = newValue;\n\n const newSelectedItems = [...this.selectedItems, option];\n\n this.pdsMultiselectChange.emit({\n values: newValue,\n items: newSelectedItems,\n });\n }\n\n // Keep focus on search input, don't close dropdown\n this.searchInputEl?.focus();\n }\n\n private selectOption(option: MultiselectOption) {\n // For keyboard navigation - toggle the option\n this.toggleOption(option);\n }\n\n private handleOptionMouseDown = (option: MultiselectOption) => (e: MouseEvent) => {\n e.preventDefault(); // Prevent focus change\n this.toggleOption(option);\n };\n\n private handleOptionMouseEnter = (index: number) => () => {\n this.highlightedIndex = index;\n };\n\n\n private handleScroll = (e: Event) => {\n if (!this.asyncUrl || !this.hasMore || this.loading) return;\n\n const target = e.target as HTMLElement;\n const scrollBottom = target.scrollHeight - target.scrollTop - target.clientHeight;\n\n // Load more when near bottom (within 50px)\n if (scrollBottom < 50) {\n this.pdsMultiselectLoadOptions.emit({\n query: this.searchQuery,\n page: this.currentPage + 1,\n });\n this.debouncedFetchAsyncOptions(this.searchQuery, this.currentPage + 1);\n }\n };\n\n\n private renderSelectedItemsList() {\n if (this.selectedItems.length === 0) return null;\n\n return (\n <div class=\"pds-multiselect__selected-section\">\n <ul class=\"pds-multiselect__selected-list\" role=\"list\">\n {this.selectedItems.map(item => (\n <li key={String(item.id)} class=\"pds-multiselect__selected-item\">\n {item.text}\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n private renderDropdown() {\n if (!this.isOpen) return null;\n\n const filteredOptions = this.getFilteredOptions();\n const valueArray = this.ensureValueArray();\n const hasSlottedEmpty = !!this.el.querySelector('[slot=\"empty\"]');\n const hasSlottedLoading = !!this.el.querySelector('[slot=\"loading\"]');\n\n return (\n <div\n class=\"pds-multiselect__panel\"\n ref={el => (this.panelEl = el)}\n style={{ minWidth: this.minWidth }}\n >\n {/* Search input */}\n <div class=\"pds-multiselect__search\">\n <pds-icon name=\"search\" size=\"small\" />\n <input\n ref={el => (this.searchInputEl = el)}\n type=\"text\"\n class=\"pds-multiselect__search-input\"\n placeholder=\"Find...\"\n value={this.searchQuery}\n aria-label=\"Search options\"\n aria-controls={`${this.componentId}-listbox`}\n aria-activedescendant={this.highlightedIndex >= 0 ? `${this.componentId}-option-${this.highlightedIndex}` : undefined}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"true\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n onInput={this.handleSearchInputChange}\n onKeyDown={this.handleSearchInputKeyDown}\n />\n </div>\n\n {/* Selected items section */}\n {this.renderSelectedItemsList()}\n\n {/* Options list */}\n <ul\n class=\"pds-multiselect__listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-label={this.label || 'Options'}\n id={`${this.componentId}-listbox`}\n ref={el => (this.listboxEl = el)}\n style={{ maxHeight: this.maxHeight }}\n onScroll={this.handleScroll}\n >\n {this.loading && (\n <li class=\"pds-multiselect__loading\" role=\"presentation\">\n {hasSlottedLoading ? (\n <slot name=\"loading\" />\n ) : (\n <pds-loader size=\"small\" />\n )}\n </li>\n )}\n\n {!this.loading && filteredOptions.length === 0 && (\n <li class=\"pds-multiselect__empty\" role=\"presentation\">\n {hasSlottedEmpty ? (\n <slot name=\"empty\" />\n ) : (\n <span>No options found</span>\n )}\n </li>\n )}\n\n {filteredOptions.map((option, index) => {\n const isSelected = valueArray.includes(String(option.id));\n const isHighlighted = index === this.highlightedIndex;\n const optionId = `${this.componentId}-option-${index}`;\n\n return (\n <li\n key={String(option.id)}\n id={optionId}\n class={{\n 'pds-multiselect__option': true,\n 'pds-multiselect__option--highlighted': isHighlighted,\n 'pds-multiselect__option--selected': isSelected,\n }}\n role=\"option\"\n aria-selected={isSelected ? 'true' : 'false'}\n data-index={index}\n onMouseDown={this.handleOptionMouseDown(option)}\n onMouseEnter={this.handleOptionMouseEnter(index)}\n >\n <pds-checkbox\n componentId={`${this.componentId}-checkbox-${index}`}\n checked={isSelected}\n label={option.text}\n style={{ pointerEvents: 'none' }}\n />\n </li>\n );\n })}\n\n {this.hasMore && !this.loading && (\n <li class=\"pds-multiselect__load-more\" role=\"presentation\">\n <pds-loader size=\"small\" />\n </li>\n )}\n </ul>\n </div>\n );\n }\n\n private getTriggerText(): string {\n const count = this.selectedItems.length;\n if (count === 0) {\n return this.placeholder || 'Select...';\n }\n return `${count} item${count === 1 ? '' : 's'}`;\n }\n\n render() {\n const hasSelections = this.selectedItems.length > 0;\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n >\n <div class=\"pds-multiselect\">\n {this.label && (\n <label\n htmlFor={this.componentId}\n class={{\n 'pds-multiselect__label': true,\n 'visually-hidden': this.hideLabel,\n }}\n >\n {this.label}\n </label>\n )}\n\n <div\n class=\"pds-multiselect__wrapper\"\n ref={el => (this.containerEl = el)}\n onFocusout={this.handleContainerFocusOut}\n style={{ width: this.triggerWidth }}\n >\n <button\n ref={el => (this.triggerEl = el)}\n type=\"button\"\n class={{\n 'pds-multiselect__trigger': true,\n 'pds-multiselect__trigger--open': this.isOpen,\n 'pds-multiselect__trigger--disabled': this.disabled,\n 'pds-multiselect__trigger--invalid': this.invalid || !!this.errorMessage,\n 'pds-multiselect__trigger--has-value': hasSelections,\n }}\n id={this.componentId}\n disabled={this.disabled}\n aria-required={this.required ? 'true' : undefined}\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-describedby={assignDescription(\n this.componentId,\n this.invalid || !!this.errorMessage,\n this.errorMessage || this.helperMessage\n )}\n aria-invalid={this.invalid || !!this.errorMessage ? 'true' : undefined}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeyDown}\n >\n <span class={{\n 'pds-multiselect__trigger-text': true,\n 'pds-multiselect__trigger-text--placeholder': !hasSelections,\n }}>\n {this.getTriggerText()}\n </span>\n <pds-icon class=\"pds-multiselect__icon\" icon={enlarge} />\n </button>\n\n {this.renderDropdown()}\n </div>\n\n {this.helperMessage && !this.errorMessage && (\n <p class=\"pds-multiselect__helper\" id={messageId(this.componentId, 'helper')}>\n {this.helperMessage}\n </p>\n )}\n\n {this.errorMessage && (\n <p class=\"pds-multiselect__error\" id={messageId(this.componentId, 'error')}>\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </p>\n )}\n\n {/* Hidden slot for static options */}\n <div style={{ display: 'none' }}>\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pds-multiselect.js","sourceRoot":"","sources":["../../../../src/components/pds-multiselect/pds-multiselect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAWvD;;;;GAIG;AAOH,MAAM,OAAO,cAAc;IAN3B;QA+BE;;WAEG;QACK,gBAAW,GAAY,WAAW,CAAC;QAO3C;;WAEG;QACsB,UAAK,GAAa,EAAE,CAAC;QAE9C;;WAEG;QACK,aAAQ,GAAY,KAAK,CAAC;QAOlC;;WAEG;QACK,gBAAW,GAAmB,KAAK,CAAC;QAE5C;;WAEG;QACK,aAAQ,GAAW,GAAG,CAAC;QAE/B;;WAEG;QACK,iBAAY,GAAW,KAAK,CAAC;QAOrC;;WAEG;QACK,cAAS,GAAW,OAAO,CAAC;QAEpC;;WAEG;QACK,iBAAY,GAAW,MAAM,CAAC;QAEtC;;WAEG;QACK,aAAQ,GAAW,OAAO,CAAC;QAOnC;;WAEG;QACK,cAAS,GAAY,KAAK,CAAC;QAiBnC;;WAEG;QACK,aAAQ,GAAY,KAAK,CAAC;QAElC;;WAEG;QACsB,YAAO,GAAY,KAAK,CAAC;QAiBlD,iBAAiB;QACR,WAAM,GAAY,KAAK,CAAC;QACxB,gBAAW,GAAW,EAAE,CAAC;QACzB,qBAAgB,GAAW,CAAC,CAAC,CAAC;QAC9B,oBAAe,GAAwB,EAAE,CAAC;QAC1C,kBAAa,GAAwB,EAAE,CAAC;QACxC,gBAAW,GAAW,CAAC,CAAC;QACxB,YAAO,GAAY,KAAK,CAAC;QACzB,aAAQ,GAAY,KAAK,CAAC;QAEnC,+DAA+D;QACvD,cAAS,GAAY,KAAK,CAAC;QAwb3B,uBAAkB,GAAG,GAAG,EAAE;YAChC,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAE1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEM,yBAAoB,GAAG,CAAC,CAAgB,EAAE,EAAE;YAClD,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,WAAW,CAAC;gBACjB,KAAK,SAAS,CAAC;gBACf,KAAK,OAAO,CAAC;gBACb,KAAK,GAAG;oBACN,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,CAAC;oBACD,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEM,4BAAuB,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,MAA0B,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;YAE3B,+CAA+C;YAC/C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAE5D,qCAAqC;YACrC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;QAEM,6BAAwB,GAAG,CAAC,CAAgB,EAAE,EAAE;YACtD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAElD,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,WAAW;oBACd,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACxF,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,MAAM;gBAER,KAAK,SAAS;oBACZ,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,MAAM;gBAER,KAAK,OAAO;oBACV,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;wBAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBACtD,IAAI,MAAM,EAAE,CAAC;4BACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAC5B,CAAC;oBACH,CAAC;oBACD,MAAM;gBAER,6DAA6D;gBAE7D,KAAK,KAAK;oBACR,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEM,4BAAuB,GAAG,GAAG,EAAE;YACrC,iGAAiG;YACjG,yCAAyC;YACzC,UAAU,CAAC,GAAG,EAAE;;gBACd,kEAAkE;gBAClE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAE3C,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;gBAE7C,uDAAuD;gBACvD,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,EAAE,CAAC,UAAU,0CAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAEnE,oDAAoD;gBACpD,MAAM,QAAQ,GAAG,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC;gBAE3C,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACjC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC;QA2IM,0BAAqB,GAAG,CAAC,MAAyB,EAAE,EAAE,CAAC,CAAC,CAAa,EAAE,EAAE;YAC/E,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,uBAAuB;YAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEM,2BAAsB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,EAAE;YACvD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC,CAAC;QAGM,iBAAY,GAAG,CAAC,CAAQ,EAAE,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE5D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;YACvC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;YAElF,2CAA2C;YAC3C,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;oBAClC,KAAK,EAAE,IAAI,CAAC,WAAW;oBACvB,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC;iBAC3B,CAAC,CAAC;gBACH,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC;KAyOH;IAv4BC,iBAAiB;QACf,oFAAoF;QACpF,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACvD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,0DAA0D;QAC1D,uFAAuF;QACvF,qBAAqB,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB;;QAC7B,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,kBAAkB,CAAoB,CAAC;QACtF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;gBACvC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,8DAA8D;YAC9D,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,oBAAoB;;QAClB,MAAA,IAAI,CAAC,QAAQ,0CAAE,UAAU,EAAE,CAAC;QAC5B,MAAA,IAAI,CAAC,iBAAiB,oDAAI,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAGS,aAAa;QACrB,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;QACvE,IAAI,CAAC,oBAAoB,GAAG,QAAQ,KAAK,SAAS;YAChD,CAAC,CAAC,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAAI,oBAAoB;YAC/C,CAAC,CAAC,aAAa,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAGS,YAAY,CAAC,QAA2B;QAChD,mDAAmD;QACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;oBACpB,OAAO,CAAC,gEAAgE;gBAC1E,CAAC;YACH,CAAC;YAAC,WAAM,CAAC;gBACP,wCAAwC;gBACxC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAGS,cAAc;QACtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAGS,sBAAsB;QAC9B,uDAAuD;QACvD,uFAAuF;QACvF,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,QAAQ;;QACZ,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IAEH,mBAAmB,CAAC,KAAoB;;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;YAC7B,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB;;QAC3B,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,kBAAkB,CAAoB,CAAC;QACtF,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aACrD,MAAM,CAAC,CAAC,EAAE,EAA2B,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC;aAChE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACX,EAAE,EAAE,GAAG,CAAC,KAAK;YACb,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK;SACnC,CAAC,CAAC,CAAC;QAEN,sFAAsF;QACtF,8EAA8E;QAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,oBAAoB;;QAC1B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7C,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QACD,MAAA,IAAI,CAAC,eAAe,0CAAE,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAEO,0BAA0B,CAAC,KAAa,EAAE,OAAe,CAAC;;QAChE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAA,IAAI,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAEO,iBAAiB;QACvB,+DAA+D;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,UAAU;aAC5B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aAClE,MAAM,CAAC,CAAC,GAAG,EAA4B,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IAClE,CAAC;IAEO,gBAAgB;QACtB,sDAAsD;QACtD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAA0B,CAAC,CAAC;gBAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;oBACpB,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,WAAM,CAAC;gBACP,wCAAwC;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAA0B,CAAC;gBACpD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;IAC9C,CAAC;IAEO,kBAAkB;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAE7C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACvC,gEAAgE;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC;oBACN,EAAE,EAAE,YAAY;oBAChB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;oBAC7B,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,eAAe;;QACrB,IAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,EAAE,CAAC;YACjC,4CAA4C;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE3C,6EAA6E;YAC7E,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACvB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEtC,gDAAgD;YAChD,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,SAAS,CAAC,WAAW,CACxB,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,oCAAoC,EACpC,IAAI,CAAC,SAAS,CACf,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe,CAAC;;QACxD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,uDAAuD;QACvD,MAAA,IAAI,CAAC,eAAe,0CAAE,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,mCAAmC;QACnC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;;YAC9C,MAAA,IAAI,CAAC,eAAe,0CAAE,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtB,IAAI,CAAC;YACH,mCAAmC;YACnC,IAAI,GAAQ,CAAC;YACb,IAAI,CAAC;gBACH,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,MAAM,IAAI,SAAS,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;gBAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,kBACzC,MAAM,EAAE,IAAI,CAAC,WAAW,EACxB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EACnC,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,kBAAkB;iBAC7B,IACE,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI;gBACjC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC9C,CAAC,EACF,CAAC;YAEH,uCAAuC;YACvC,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACrC,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAE7D,MAAM,IAAI,GAAkB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAElD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC/C,sCAAsC;gBACtC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;gBAED,6DAA6D;gBAC7D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC9C,OAAO,gBACL,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,IAAI,EAAE,IAAI,CAAC,IAAI,IACZ,IAAI,CACa,CAAC;gBACzB,CAAC;gBAED,gDAAgD;gBAChD,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;iBACE,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;YACvF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAE1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yBAAyB;YACzB,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACrC,CAAC;YAED,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAa;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO;QAE7C,6EAA6E;QAC7E,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC3C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,kBAAkB;iBAC7B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;aAC7C,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAE7D,MAAM,IAAI,GAAmB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnD,MAAM,SAAS,mBACb,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,IAAI,EAAE,IAAI,CAAC,IAAI,IACZ,IAAI,CACR,CAAC;YAEF,0BAA0B;YAC1B,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;YAE5D,wBAAwB;YACxB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnD,sBAAsB;YACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,oBAAoB;YACpB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;gBACnB,SAAS;aACV,CAAC,CAAC;YAEH,oBAAoB;YACpB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,KAAK,EAAE,IAAI,CAAC,aAAa;aAC1B,CAAC,CAAC;YAEH,sCAAsC;YACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;YAE3B,6BAA6B;YAC7B,qBAAqB,CAAC,GAAG,EAAE;;gBACzB,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IA+FO,YAAY;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAE3B,iCAAiC;QACjC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,qBAAqB,CAAC,GAAG,EAAE;;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,uDAAuD;YACvD,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,CAAC;YAC5B,+CAA+C;YAC/C,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACzB,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,uBAAuB;QACvB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC;QAEvD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAEtC,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,eAAe,CAAC,WAAY,EAAE,IAAI,CAAC,OAAQ,EAAE;gBAC3C,SAAS,EAAE,cAAc;gBACzB,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE;oBACV,MAAM,CAAC,EAAE,CAAC;oBACV,IAAI,EAAE;oBACN,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACH,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;4BAC7B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE;gCACrC,KAAK,EAAE,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;gCACjD,QAAQ;6BACT,CAAC,CAAC;wBACL,CAAC;qBACF,CAAC;iBACH;aACF,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;gBACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,mBAAmB;QACnB,cAAc,EAAE,CAAC;QAEjB,kDAAkD;QAClD,MAAM,iBAAiB,GAAG,UAAU,CAClC,WAAY,EACZ,IAAI,CAAC,OAAO,EACZ,cAAc,CACf,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE;YAC5B,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,qBAAqB,CAAC,GAAG,EAAE;;YACzB,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,aAAa,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,IAAI,CAAgB,CAAC;YAC5G,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,MAAyB;;QAC5C,uBAAuB;QACvB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,uDAAuD;YACvD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1D,IAAI,UAAU,EAAE,CAAC;YACf,wBAAwB;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YAEtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAElG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC7B,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,gBAAgB;aACxB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAClE,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YAEtB,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAEzD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC7B,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,gBAAgB;aACxB,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAEO,YAAY,CAAC,MAAyB;QAC5C,8CAA8C;QAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IA6BO,uBAAuB;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjD,OAAO,CACL,WAAK,KAAK,EAAC,mCAAmC;YAC5C,UAAI,KAAK,EAAC,gCAAgC,EAAC,IAAI,EAAC,MAAM,IACnD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAC9B,UAAI,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAC,gCAAgC,IAC7D,IAAI,CAAC,IAAI,CACP,CACN,CAAC,CACC,CACD,CACP,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAEtE,OAAO,CACL,WACE,KAAK,EAAC,wBAAwB,EAC9B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,EAC9B,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YAGlC,WAAK,KAAK,EAAC,yBAAyB;gBAClC,gBAAU,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,GAAG;gBACvC,aACE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,EACpC,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,+BAA+B,EACrC,WAAW,EAAC,SAAS,EACrB,KAAK,EAAE,IAAI,CAAC,WAAW,gBACZ,gBAAgB,mBACZ,GAAG,IAAI,CAAC,WAAW,UAAU,2BACrB,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,EACrH,IAAI,EAAC,UAAU,mBACD,SAAS,mBACT,MAAM,uBACF,MAAM,EACxB,YAAY,EAAC,KAAK,EAClB,OAAO,EAAE,IAAI,CAAC,uBAAuB,EACrC,SAAS,EAAE,IAAI,CAAC,wBAAwB,GACxC,CACE;YAGL,IAAI,CAAC,uBAAuB,EAAE;YAG/B,UACE,KAAK,EAAC,0BAA0B,EAChC,IAAI,EAAC,SAAS,0BACO,MAAM,gBACf,IAAI,CAAC,KAAK,IAAI,SAAS,EACnC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,UAAU,EACjC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAChC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EACpC,QAAQ,EAAE,IAAI,CAAC,YAAY;gBAE1B,IAAI,CAAC,OAAO,IAAI,CACf,UAAI,KAAK,EAAC,0BAA0B,EAAC,IAAI,EAAC,cAAc,IACrD,iBAAiB,CAAC,CAAC,CAAC,CACnB,YAAM,IAAI,EAAC,SAAS,GAAG,CACxB,CAAC,CAAC,CAAC,CACF,kBAAY,IAAI,EAAC,OAAO,GAAG,CAC5B,CACE,CACN;gBAEA,CAAC,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,CAChD,UAAI,KAAK,EAAC,wBAAwB,EAAC,IAAI,EAAC,cAAc,IACnD,eAAe,CAAC,CAAC,CAAC,CACjB,YAAM,IAAI,EAAC,OAAO,GAAG,CACtB,CAAC,CAAC,CAAC,CACF,mCAA6B,CAC9B,CACE,CACN;gBAEA,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBACrC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;oBAC7C,MAAM,aAAa,GAAG,KAAK,KAAK,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,CAAC;oBACzE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,WAAW,WAAW,KAAK,EAAE,CAAC;oBACvD,MAAM,gBAAgB,GAAG,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;oBAEzD,OAAO,CACL,UACE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EACtB,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE;4BACL,yBAAyB,EAAE,IAAI;4BAC/B,sCAAsC,EAAE,aAAa;4BACrD,mCAAmC,EAAE,UAAU;4BAC/C,iCAAiC,EAAE,cAAc;4BACjD,mCAAmC,EAAE,gBAAgB;yBACtD,EACD,IAAI,EAAC,QAAQ,mBACE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBAC7B,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,gBACxC,cAAc,CAAC,CAAC,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,gBAC7D,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAC/C,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAE/C,cAAc,CAAC,CAAC,CAAC,CAChB,eAAS,KAAK,EAAC,gCAAgC,iBAAa,QAAQ,EAAC,GAAG,EAAC,IAAI;wBAC3E,gBAAU,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,OAAO,GAAG;wBACpC;;4BAAgB,MAAM,CAAC,IAAI;iCAAa,CAChC,CACX,CAAC,CAAC,CAAC,CACF,oBACE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,aAAa,KAAK,EAAE,EACpD,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,CAAC,IAAI,EAClB,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAChC,CACH,CACE,CACN,CAAC;gBACJ,CAAC,CAAC;gBAED,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAChC,UAAI,KAAK,EAAC,4BAA4B,EAAC,IAAI,EAAC,cAAc;oBACxD,kBAAY,IAAI,EAAC,OAAO,GAAG,CACxB,CACN,CACE,CACD,CACP,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QACxC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,MAAM;QACJ,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpD,OAAO,CACL,EAAC,IAAI,sEACY,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAE5C,4DAAK,KAAK,EAAC,iBAAiB;gBACzB,IAAI,CAAC,KAAK,IAAI,CACb,8DACE,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,KAAK,EAAE;wBACL,wBAAwB,EAAE,IAAI;wBAC9B,iBAAiB,EAAE,IAAI,CAAC,SAAS;qBAClC,IAEA,IAAI,CAAC,KAAK,CACL,CACT;gBAED,4DACE,KAAK,EAAC,0BAA0B,EAChC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,EAClC,UAAU,EAAE,IAAI,CAAC,uBAAuB,EACxC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;oBAEnC,+DACE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAChC,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;4BACL,0BAA0B,EAAE,IAAI;4BAChC,gCAAgC,EAAE,IAAI,CAAC,MAAM;4BAC7C,oCAAoC,EAAE,IAAI,CAAC,QAAQ;4BACnD,mCAAmC,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY;4BACxE,qCAAqC,EAAE,aAAa;yBACrD,EACD,EAAE,EAAE,IAAI,CAAC,WAAW,EACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,mBACR,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,mBAClC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBAC/B,SAAS,sBACL,iBAAiB,CACjC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EACnC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CACxC,kBACa,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACtE,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAChC,SAAS,EAAE,IAAI,CAAC,oBAAoB;wBAEpC,6DAAM,KAAK,EAAE;gCACX,+BAA+B,EAAE,IAAI;gCACrC,4CAA4C,EAAE,CAAC,aAAa;6BAC7D,IACE,IAAI,CAAC,cAAc,EAAE,CACjB;wBACP,iEAAU,KAAK,EAAC,uBAAuB,EAAC,IAAI,EAAE,OAAO,GAAI,CAClD;oBAER,IAAI,CAAC,cAAc,EAAE,CAClB;gBAEL,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAC7E,0DAAG,KAAK,EAAC,yBAAyB,EAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IACzE,IAAI,CAAC,aAAa,CACjB,CACL;gBAEA,IAAI,CAAC,YAAY,IAAI,CACpB,0DAAG,KAAK,EAAC,wBAAwB,EAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;oBACxE,iEAAU,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,OAAO,GAAG;oBACtC,IAAI,CAAC,YAAY,CAChB,CACL;gBAGD,4DAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC7B,8DAAQ,CACJ,CACF,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Event, EventEmitter, h, Host, Listen, Method, Prop, State, Watch } from '@stencil/core';\nimport { computePosition, flip, offset, shift, size, autoUpdate } from '@floating-ui/dom';\nimport { debounceEvent } from '@utils/utils';\nimport { messageId, assignDescription } from '../../utils/form';\nimport { danger, enlarge } from '@pine-ds/icons/icons';\nimport type {\n MultiselectOption,\n MultiselectChangeEventDetail,\n MultiselectSearchEventDetail,\n MultiselectLoadOptionsEventDetail,\n MultiselectCreateEventDetail,\n AsyncResponse,\n CreateResponse,\n} from './multiselect-interface';\n\n/**\n * @slot (default) - Static option elements for the multiselect\n * @slot empty - Custom empty state message when no options match\n * @slot loading - Custom loading indicator\n */\n@Component({\n tag: 'pds-multiselect',\n styleUrl: 'pds-multiselect.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class PdsMultiselect {\n private triggerEl?: HTMLButtonElement;\n private searchInputEl?: HTMLInputElement;\n private containerEl?: HTMLElement;\n private listboxEl?: HTMLElement;\n private panelEl?: HTMLElement;\n private internals?: ElementInternals;\n private abortController?: AbortController;\n private fetchDebounceTimer?: number;\n private fetchTimeoutTimer?: number;\n private observer?: MutationObserver;\n private cleanupAutoUpdate?: () => void;\n\n @Element() el!: HTMLPdsMultiselectElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Text to be displayed as the multiselect label.\n */\n @Prop() label?: string;\n\n /**\n * Placeholder text for the input field.\n */\n @Prop() placeholder?: string = 'Select...';\n\n /**\n * Specifies the name. Submitted with the form as part of a name/value pair.\n */\n @Prop() name?: string;\n\n /**\n * Array of selected option values.\n */\n @Prop({ mutable: true }) value: string[] = [];\n\n /**\n * Determines whether or not the multiselect is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * URL endpoint for async data fetching.\n */\n @Prop() asyncUrl?: string;\n\n /**\n * HTTP method for async requests.\n */\n @Prop() asyncMethod: 'GET' | 'POST' = 'GET';\n\n /**\n * Debounce delay in milliseconds for search/fetch.\n */\n @Prop() debounce: number = 300;\n\n /**\n * Timeout in milliseconds for async fetch requests.\n */\n @Prop() fetchTimeout: number = 30000;\n\n /**\n * Maximum number of selections allowed.\n */\n @Prop() maxSelections?: number;\n\n /**\n * Maximum height of the dropdown before scrolling.\n */\n @Prop() maxHeight: string = '300px';\n\n /**\n * Width of the trigger button (and reference for dropdown positioning).\n */\n @Prop() triggerWidth: string = '100%';\n\n /**\n * Minimum width of the dropdown panel.\n */\n @Prop() minWidth: string = '250px';\n\n /**\n * Width of the dropdown panel. Defaults to the trigger width.\n */\n @Prop() panelWidth?: string;\n\n /**\n * Visually hides the label but keeps it accessible.\n */\n @Prop() hideLabel: boolean = false;\n\n /**\n * Error message to display.\n */\n @Prop() errorMessage?: string;\n\n /**\n * Helper message to display below the input.\n */\n @Prop() helperMessage?: string;\n\n /**\n * If true, the multiselect is in an invalid state.\n */\n @Prop() invalid?: boolean;\n\n /**\n * If true, the multiselect is required.\n */\n @Prop() required: boolean = false;\n\n /**\n * Whether the component is currently loading async options.\n */\n @Prop({ mutable: true }) loading: boolean = false;\n\n /**\n * Options provided externally (for consumer-managed async).\n */\n @Prop() options?: MultiselectOption[];\n\n /**\n * Function to format async results. Receives raw API response item.\n */\n @Prop() formatResult?: (item: unknown) => MultiselectOption;\n\n /**\n * URL endpoint for creating new options. When set, shows \"Add\" option when no matches found.\n */\n @Prop() createUrl?: string;\n\n // Internal state\n @State() isOpen: boolean = false;\n @State() searchQuery: string = '';\n @State() highlightedIndex: number = -1;\n @State() internalOptions: MultiselectOption[] = [];\n @State() selectedItems: MultiselectOption[] = [];\n @State() currentPage: number = 1;\n @State() hasMore: boolean = false;\n @State() creating: boolean = false;\n\n // Flag to prevent focusout from closing during open transition\n private isOpening: boolean = false;\n\n /**\n * Emitted when selection changes.\n */\n @Event() pdsMultiselectChange!: EventEmitter<MultiselectChangeEventDetail>;\n\n /**\n * Emitted on search input (for consumer-managed async).\n */\n @Event() pdsMultiselectSearch!: EventEmitter<MultiselectSearchEventDetail>;\n\n /**\n * Emitted to request more options (pagination).\n */\n @Event() pdsMultiselectLoadOptions!: EventEmitter<MultiselectLoadOptionsEventDetail>;\n\n /**\n * Emitted when a new option is created.\n */\n @Event() pdsMultiselectCreate!: EventEmitter<MultiselectCreateEventDetail>;\n\n private originalSearchEmitter?: EventEmitter<MultiselectSearchEventDetail>;\n\n connectedCallback() {\n // Initialize ElementInternals for form association (only once per element instance)\n if (this.el.attachInternals && !this.internals) {\n this.internals = this.el.attachInternals();\n }\n }\n\n componentWillLoad() {\n this.originalSearchEmitter = this.pdsMultiselectSearch;\n this.syncSelectedItems();\n }\n\n componentDidLoad() {\n this.setupDebounce();\n this.setupMutationObserver();\n this.setupSlotChangeListener();\n this.updateFormValue();\n\n // Ensure preselected values sync after DOM is fully ready\n // This handles cases where slot content loads after initial render (e.g., in docs/MDX)\n requestAnimationFrame(() => {\n this.updateOptionsFromSlot();\n this.syncSelectedItems();\n });\n }\n\n private setupSlotChangeListener() {\n const slot = this.el.shadowRoot?.querySelector('slot:not([name])') as HTMLSlotElement;\n if (slot) {\n slot.addEventListener('slotchange', () => {\n this.updateOptionsFromSlot();\n this.syncSelectedItems();\n });\n // Also call it immediately in case content is already slotted\n this.updateOptionsFromSlot();\n }\n }\n\n disconnectedCallback() {\n this.observer?.disconnect();\n this.cleanupAutoUpdate?.();\n this.clearAsyncFetchState();\n }\n\n @Watch('debounce')\n protected setupDebounce() {\n const { pdsMultiselectSearch, debounce, originalSearchEmitter } = this;\n this.pdsMultiselectSearch = debounce === undefined\n ? originalSearchEmitter ?? pdsMultiselectSearch\n : debounceEvent(pdsMultiselectSearch, debounce);\n }\n\n @Watch('value')\n protected valueChanged(newValue: string[] | string) {\n // Handle JSON string values (from HTML attributes)\n if (typeof newValue === 'string') {\n try {\n const parsed = JSON.parse(newValue);\n if (Array.isArray(parsed)) {\n this.value = parsed;\n return; // The assignment will trigger this watcher again with the array\n }\n } catch {\n // Not valid JSON, treat as single value\n this.value = newValue ? [newValue] : [];\n return;\n }\n }\n this.syncSelectedItems();\n this.updateFormValue();\n }\n\n @Watch('options')\n protected optionsChanged() {\n if (this.options) {\n this.internalOptions = [...this.options];\n }\n }\n\n @Watch('internalOptions')\n protected internalOptionsChanged() {\n // Re-sync selected items when options become available\n // This handles the case where value is set before options are loaded (e.g., from slot)\n this.syncSelectedItems();\n }\n\n /**\n * Sets focus on the trigger button.\n */\n @Method()\n async setFocus() {\n this.triggerEl?.focus();\n }\n\n /**\n * Handle global keyboard events for accessibility.\n * Closes dropdown on Escape key press regardless of focus location.\n */\n @Listen('keydown', { target: 'window' })\n handleWindowKeyDown(event: KeyboardEvent) {\n if (!this.isOpen) return;\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.closeDropdown();\n this.triggerEl?.focus();\n }\n }\n\n private setupMutationObserver() {\n this.observer = new MutationObserver(() => {\n this.updateOptionsFromSlot();\n });\n\n this.observer.observe(this.el, {\n childList: true,\n subtree: true,\n });\n }\n\n private updateOptionsFromSlot() {\n const slot = this.el.shadowRoot?.querySelector('slot:not([name])') as HTMLSlotElement;\n if (!slot) return;\n\n const options = slot.assignedElements({ flatten: true })\n .filter((el): el is HTMLOptionElement => el.tagName === 'OPTION')\n .map(opt => ({\n id: opt.value,\n text: opt.textContent || opt.value,\n }));\n\n // Only update if we actually found options AND we're not using async/external options\n // Don't clear internalOptions if slot returns empty (might be mid-DOM-update)\n if (options.length > 0 && !this.asyncUrl && !this.options) {\n this.internalOptions = options;\n }\n }\n\n private clearAsyncFetchState() {\n if (this.fetchDebounceTimer !== undefined) {\n window.clearTimeout(this.fetchDebounceTimer);\n this.fetchDebounceTimer = undefined;\n }\n if (this.fetchTimeoutTimer !== undefined) {\n window.clearTimeout(this.fetchTimeoutTimer);\n this.fetchTimeoutTimer = undefined;\n }\n this.abortController?.abort();\n this.abortController = undefined;\n }\n\n private debouncedFetchAsyncOptions(query: string, page: number = 1) {\n if (!this.asyncUrl) return;\n\n if (this.fetchDebounceTimer !== undefined) {\n window.clearTimeout(this.fetchDebounceTimer);\n }\n\n const delay = Math.max(0, this.debounce ?? 0);\n this.fetchDebounceTimer = window.setTimeout(() => {\n this.fetchDebounceTimer = undefined;\n this.fetchOptions(query, page);\n }, delay);\n }\n\n private syncSelectedItems() {\n // Ensure value is an array (may be string from HTML attribute)\n const valueArray = this.ensureValueArray();\n const allOptions = this.getAllOptions();\n this.selectedItems = valueArray\n .map(val => allOptions.find(opt => String(opt.id) === String(val)))\n .filter((opt): opt is MultiselectOption => opt !== undefined);\n }\n\n private ensureValueArray(): string[] {\n // Handle JSON string values passed via HTML attribute\n if (typeof this.value === 'string') {\n try {\n const parsed = JSON.parse(this.value as unknown as string);\n if (Array.isArray(parsed)) {\n this.value = parsed;\n return parsed;\n }\n } catch {\n // Not valid JSON, treat as single value\n const singleValue = this.value as unknown as string;\n this.value = singleValue ? [singleValue] : [];\n return this.value;\n }\n }\n return Array.isArray(this.value) ? this.value : [];\n }\n\n private getAllOptions(): MultiselectOption[] {\n return this.options || this.internalOptions;\n }\n\n private getFilteredOptions(): MultiselectOption[] {\n const allOptions = this.getAllOptions();\n const query = this.searchQuery.toLowerCase();\n\n const filtered = allOptions.filter(opt => {\n // Filter by search query only - don't filter out selected items\n if (query) {\n return opt.text.toLowerCase().includes(query);\n }\n return true;\n });\n\n // Add create option if enabled and no matches found\n if (this.createUrl && this.searchQuery.trim() && filtered.length === 0) {\n return [{\n id: '__create__',\n text: this.searchQuery.trim(),\n isCreateOption: true,\n }];\n }\n\n return filtered;\n }\n\n private updateFormValue() {\n if (this.internals?.setFormValue) {\n // Ensure value is an array before iterating\n const valueArray = this.ensureValueArray();\n\n // Submit as multiple values with same name (native select multiple behavior)\n const formData = new FormData();\n valueArray.forEach(val => {\n if (this.name) {\n formData.append(this.name, val);\n }\n });\n this.internals.setFormValue(formData);\n\n // Update validity state for required validation\n if (this.required && valueArray.length === 0) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please select at least one option.',\n this.triggerEl\n );\n } else {\n this.internals.setValidity({});\n }\n }\n }\n\n private async fetchOptions(query: string, page: number = 1) {\n if (!this.asyncUrl) return;\n\n // Abort any pending request and clear existing timeout\n this.abortController?.abort();\n if (this.fetchTimeoutTimer !== undefined) {\n window.clearTimeout(this.fetchTimeoutTimer);\n this.fetchTimeoutTimer = undefined;\n }\n\n this.abortController = new AbortController();\n this.loading = true;\n\n // Set up timeout for fetch request\n this.fetchTimeoutTimer = window.setTimeout(() => {\n this.abortController?.abort();\n this.fetchTimeoutTimer = undefined;\n }, this.fetchTimeout);\n\n try {\n // Guard against malformed asyncUrl\n let url: URL;\n try {\n url = new URL(this.asyncUrl, window.location.origin);\n } catch (urlError) {\n throw new TypeError(`Invalid asyncUrl: ${this.asyncUrl}`);\n }\n\n if (this.asyncMethod === 'GET') {\n url.searchParams.set('search', query);\n url.searchParams.set('page', String(page));\n }\n\n const response = await fetch(url.toString(), {\n method: this.asyncMethod,\n signal: this.abortController.signal,\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n ...(this.asyncMethod === 'POST' && {\n body: JSON.stringify({ search: query, page }),\n }),\n });\n\n // Clear timeout on successful response\n if (this.fetchTimeoutTimer !== undefined) {\n window.clearTimeout(this.fetchTimeoutTimer);\n this.fetchTimeoutTimer = undefined;\n }\n\n if (!response.ok) throw new Error('Failed to fetch options');\n\n const data: AsyncResponse = await response.json();\n\n const formattedResults = data.results.map(item => {\n // If formatResult is provided, use it\n if (this.formatResult) {\n return this.formatResult(item);\n }\n\n // Defensive check: ensure item is an object before spreading\n if (typeof item === 'object' && item !== null) {\n return {\n id: item.id,\n text: item.text,\n ...item,\n } as MultiselectOption;\n }\n\n // Handle primitives by converting to safe shape\n return {\n id: String(item),\n text: String(item),\n } as MultiselectOption;\n });\n\n if (page === 1) {\n this.internalOptions = formattedResults;\n } else {\n this.internalOptions = [...this.internalOptions, ...formattedResults];\n }\n\n this.hasMore = data.totalCount ? this.internalOptions.length < data.totalCount : false;\n this.currentPage = page;\n\n } catch (error) {\n // Clear timeout on error\n if (this.fetchTimeoutTimer !== undefined) {\n window.clearTimeout(this.fetchTimeoutTimer);\n this.fetchTimeoutTimer = undefined;\n }\n\n if ((error as Error).name !== 'AbortError') {\n console.error('PdsMultiselect: Failed to fetch options', error);\n }\n } finally {\n this.loading = false;\n }\n }\n\n private async createOption(query: string) {\n if (!this.createUrl || !query.trim()) return;\n\n // Reentrancy guard: prevent duplicate POSTs if creation is already in-flight\n if (this.creating) return;\n\n this.creating = true;\n\n try {\n const url = new URL(this.createUrl, window.location.origin);\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n body: JSON.stringify({ text: query.trim() }),\n });\n\n if (!response.ok) throw new Error('Failed to create option');\n\n const data: CreateResponse = await response.json();\n\n const newOption: MultiselectOption = {\n id: data.id,\n text: data.text,\n ...data,\n };\n\n // Add to internal options\n this.internalOptions = [...this.internalOptions, newOption];\n\n // Select the new option\n this.value = [...this.value, String(newOption.id)];\n\n // Sync selected items\n this.syncSelectedItems();\n\n // Emit create event\n this.pdsMultiselectCreate.emit({\n query: query.trim(),\n newOption,\n });\n\n // Emit change event\n this.pdsMultiselectChange.emit({\n values: this.value,\n items: this.selectedItems,\n });\n\n // Clear search and keep dropdown open\n this.searchQuery = '';\n this.highlightedIndex = -1;\n\n // Focus back on search input\n requestAnimationFrame(() => {\n this.searchInputEl?.focus();\n });\n\n } catch (error) {\n console.error('PdsMultiselect: Failed to create option', error);\n } finally {\n this.creating = false;\n }\n }\n\n private handleTriggerClick = () => {\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n };\n\n private handleTriggerKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!this.isOpen) {\n this.openDropdown();\n }\n break;\n }\n };\n\n private handleSearchInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n this.highlightedIndex = -1;\n\n // Emit search event for consumer-managed async\n this.pdsMultiselectSearch.emit({ query: this.searchQuery });\n\n // Fetch from async URL if configured\n if (this.asyncUrl) {\n this.debouncedFetchAsyncOptions(this.searchQuery, 1);\n }\n };\n\n private handleSearchInputKeyDown = (e: KeyboardEvent) => {\n const filteredOptions = this.getFilteredOptions();\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.highlightedIndex = Math.min(this.highlightedIndex + 1, filteredOptions.length - 1);\n this.scrollOptionIntoView();\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\n this.scrollOptionIntoView();\n break;\n\n case 'Enter':\n e.preventDefault();\n if (this.highlightedIndex >= 0) {\n const option = filteredOptions[this.highlightedIndex];\n if (option) {\n this.selectOption(option);\n }\n }\n break;\n\n // Escape is handled by the global @Listen('keydown') handler\n\n case 'Tab':\n this.closeDropdown();\n break;\n }\n };\n\n private handleContainerFocusOut = () => {\n // Use setTimeout to delay the check - this allows click events and focus transitions to complete\n // before we decide to close the dropdown\n setTimeout(() => {\n // Don't close if we're in the middle of opening or already closed\n if (!this.isOpen || this.isOpening) return;\n\n const activeElement = document.activeElement;\n\n // Check if focus is within our component's shadow root\n const isInShadowRoot = this.el.shadowRoot?.contains(activeElement);\n\n // Also check if focus is on the host element itself\n const isOnHost = activeElement === this.el;\n\n if (!isInShadowRoot && !isOnHost) {\n this.closeDropdown();\n }\n }, 0);\n };\n\n private openDropdown() {\n if (this.disabled) return;\n\n this.isOpening = true;\n this.isOpen = true;\n this.highlightedIndex = -1;\n\n // Trigger initial fetch if async\n if (this.asyncUrl && this.internalOptions.length === 0) {\n this.debouncedFetchAsyncOptions(this.searchQuery, 1);\n }\n\n requestAnimationFrame(() => {\n this.positionDropdown();\n // Focus the search input after the panel is positioned\n this.searchInputEl?.focus();\n // Clear the opening flag after focus has moved\n setTimeout(() => {\n this.isOpening = false;\n }, 50);\n });\n }\n\n private closeDropdown() {\n this.isOpen = false;\n this.highlightedIndex = -1;\n this.searchQuery = '';\n\n // Clean up auto-update\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = undefined;\n }\n }\n\n private positionDropdown() {\n if (!this.containerEl || !this.panelEl) return;\n const referenceEl = this.triggerEl || this.containerEl;\n\n const { minWidth, panelWidth } = this;\n\n const updatePosition = () => {\n computePosition(referenceEl!, this.panelEl!, {\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n offset(12),\n flip(),\n shift({ padding: 8 }),\n size({\n apply: ({ rects, elements }) => {\n Object.assign(elements.floating.style, {\n width: panelWidth ?? `${rects.reference.width}px`,\n minWidth,\n });\n },\n }),\n ],\n }).then(({ x, y }) => {\n if (this.panelEl) {\n this.panelEl.style.left = `${x}px`;\n this.panelEl.style.top = `${y}px`;\n }\n });\n };\n\n // Initial position\n updatePosition();\n\n // Set up auto-update for window resize and scroll\n const cleanupAutoUpdate = autoUpdate(\n referenceEl!,\n this.panelEl,\n updatePosition\n );\n this.cleanupAutoUpdate = () => {\n cleanupAutoUpdate();\n this.clearAsyncFetchState();\n };\n }\n\n private scrollOptionIntoView() {\n requestAnimationFrame(() => {\n const highlighted = this.listboxEl?.querySelector(`[data-index=\"${this.highlightedIndex}\"]`) as HTMLElement;\n highlighted?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n private toggleOption(option: MultiselectOption) {\n // Handle create option\n if (option.isCreateOption) {\n // Prevent multiple create calls while one is in-flight\n if (!this.creating) {\n this.createOption(this.searchQuery);\n }\n return;\n }\n\n const isSelected = this.value.includes(String(option.id));\n\n if (isSelected) {\n // Remove from selection\n const newValue = this.value.filter(v => v !== String(option.id));\n this.value = newValue;\n\n const newSelectedItems = this.selectedItems.filter(item => String(item.id) !== String(option.id));\n\n this.pdsMultiselectChange.emit({\n values: newValue,\n items: newSelectedItems,\n });\n } else {\n // Add to selection\n if (this.maxSelections && this.value.length >= this.maxSelections) {\n return;\n }\n\n const newValue = [...this.value, String(option.id)];\n this.value = newValue;\n\n const newSelectedItems = [...this.selectedItems, option];\n\n this.pdsMultiselectChange.emit({\n values: newValue,\n items: newSelectedItems,\n });\n }\n\n // Keep focus on search input, don't close dropdown\n this.searchInputEl?.focus();\n }\n\n private selectOption(option: MultiselectOption) {\n // For keyboard navigation - toggle the option\n this.toggleOption(option);\n }\n\n private handleOptionMouseDown = (option: MultiselectOption) => (e: MouseEvent) => {\n e.preventDefault(); // Prevent focus change\n this.toggleOption(option);\n };\n\n private handleOptionMouseEnter = (index: number) => () => {\n this.highlightedIndex = index;\n };\n\n\n private handleScroll = (e: Event) => {\n if (!this.asyncUrl || !this.hasMore || this.loading) return;\n\n const target = e.target as HTMLElement;\n const scrollBottom = target.scrollHeight - target.scrollTop - target.clientHeight;\n\n // Load more when near bottom (within 50px)\n if (scrollBottom < 50) {\n this.pdsMultiselectLoadOptions.emit({\n query: this.searchQuery,\n page: this.currentPage + 1,\n });\n this.debouncedFetchAsyncOptions(this.searchQuery, this.currentPage + 1);\n }\n };\n\n\n private renderSelectedItemsList() {\n if (this.selectedItems.length === 0) return null;\n\n return (\n <div class=\"pds-multiselect__selected-section\">\n <ul class=\"pds-multiselect__selected-list\" role=\"list\">\n {this.selectedItems.map(item => (\n <li key={String(item.id)} class=\"pds-multiselect__selected-item\">\n {item.text}\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n private renderDropdown() {\n if (!this.isOpen) return null;\n\n const filteredOptions = this.getFilteredOptions();\n const valueArray = this.ensureValueArray();\n const hasSlottedEmpty = !!this.el.querySelector('[slot=\"empty\"]');\n const hasSlottedLoading = !!this.el.querySelector('[slot=\"loading\"]');\n\n return (\n <div\n class=\"pds-multiselect__panel\"\n ref={el => (this.panelEl = el)}\n style={{ minWidth: this.minWidth }}\n >\n {/* Search input */}\n <div class=\"pds-multiselect__search\">\n <pds-icon name=\"search\" size=\"small\" />\n <input\n ref={el => (this.searchInputEl = el)}\n type=\"text\"\n class=\"pds-multiselect__search-input\"\n placeholder=\"Find...\"\n value={this.searchQuery}\n aria-label=\"Search options\"\n aria-controls={`${this.componentId}-listbox`}\n aria-activedescendant={this.highlightedIndex >= 0 ? `${this.componentId}-option-${this.highlightedIndex}` : undefined}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"true\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n onInput={this.handleSearchInputChange}\n onKeyDown={this.handleSearchInputKeyDown}\n />\n </div>\n\n {/* Selected items section */}\n {this.renderSelectedItemsList()}\n\n {/* Options list */}\n <ul\n class=\"pds-multiselect__listbox\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-label={this.label || 'Options'}\n id={`${this.componentId}-listbox`}\n ref={el => (this.listboxEl = el)}\n style={{ maxHeight: this.maxHeight }}\n onScroll={this.handleScroll}\n >\n {this.loading && (\n <li class=\"pds-multiselect__loading\" role=\"presentation\">\n {hasSlottedLoading ? (\n <slot name=\"loading\" />\n ) : (\n <pds-loader size=\"small\" />\n )}\n </li>\n )}\n\n {!this.loading && filteredOptions.length === 0 && (\n <li class=\"pds-multiselect__empty\" role=\"presentation\">\n {hasSlottedEmpty ? (\n <slot name=\"empty\" />\n ) : (\n <span>No options found</span>\n )}\n </li>\n )}\n\n {filteredOptions.map((option, index) => {\n const isSelected = valueArray.includes(String(option.id));\n const isCreateOption = option.isCreateOption;\n const isHighlighted = index === this.highlightedIndex && !isCreateOption;\n const optionId = `${this.componentId}-option-${index}`;\n const isCreateDisabled = isCreateOption && this.creating;\n\n return (\n <li\n key={String(option.id)}\n id={optionId}\n class={{\n 'pds-multiselect__option': true,\n 'pds-multiselect__option--highlighted': isHighlighted,\n 'pds-multiselect__option--selected': isSelected,\n 'pds-multiselect__option--create': isCreateOption,\n 'pds-multiselect__option--disabled': isCreateDisabled,\n }}\n role=\"option\"\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={isCreateDisabled ? 'true' : undefined}\n aria-label={isCreateOption ? `Create new tag: ${option.text}` : undefined}\n data-index={index}\n onMouseDown={this.handleOptionMouseDown(option)}\n onMouseEnter={this.handleOptionMouseEnter(index)}\n >\n {isCreateOption ? (\n <pds-box class=\"pds-multiselect__create-option\" align-items=\"center\" gap=\"xs\">\n <pds-icon name=\"add\" size=\"small\" />\n <pds-text>Add \"{option.text}\"</pds-text>\n </pds-box>\n ) : (\n <pds-checkbox\n componentId={`${this.componentId}-checkbox-${index}`}\n checked={isSelected}\n label={option.text}\n style={{ pointerEvents: 'none' }}\n />\n )}\n </li>\n );\n })}\n\n {this.hasMore && !this.loading && (\n <li class=\"pds-multiselect__load-more\" role=\"presentation\">\n <pds-loader size=\"small\" />\n </li>\n )}\n </ul>\n </div>\n );\n }\n\n private getTriggerText(): string {\n const count = this.selectedItems.length;\n if (count === 0) {\n return this.placeholder || 'Select...';\n }\n return `${count} item${count === 1 ? '' : 's'}`;\n }\n\n render() {\n const hasSelections = this.selectedItems.length > 0;\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n >\n <div class=\"pds-multiselect\">\n {this.label && (\n <label\n htmlFor={this.componentId}\n class={{\n 'pds-multiselect__label': true,\n 'visually-hidden': this.hideLabel,\n }}\n >\n {this.label}\n </label>\n )}\n\n <div\n class=\"pds-multiselect__wrapper\"\n ref={el => (this.containerEl = el)}\n onFocusout={this.handleContainerFocusOut}\n style={{ width: this.triggerWidth }}\n >\n <button\n ref={el => (this.triggerEl = el)}\n type=\"button\"\n class={{\n 'pds-multiselect__trigger': true,\n 'pds-multiselect__trigger--open': this.isOpen,\n 'pds-multiselect__trigger--disabled': this.disabled,\n 'pds-multiselect__trigger--invalid': this.invalid || !!this.errorMessage,\n 'pds-multiselect__trigger--has-value': hasSelections,\n }}\n id={this.componentId}\n disabled={this.disabled}\n aria-required={this.required ? 'true' : undefined}\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-describedby={assignDescription(\n this.componentId,\n this.invalid || !!this.errorMessage,\n this.errorMessage || this.helperMessage\n )}\n aria-invalid={this.invalid || !!this.errorMessage ? 'true' : undefined}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeyDown}\n >\n <span class={{\n 'pds-multiselect__trigger-text': true,\n 'pds-multiselect__trigger-text--placeholder': !hasSelections,\n }}>\n {this.getTriggerText()}\n </span>\n <pds-icon class=\"pds-multiselect__icon\" icon={enlarge} />\n </button>\n\n {this.renderDropdown()}\n </div>\n\n {this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (\n <p class=\"pds-multiselect__helper\" id={messageId(this.componentId, 'helper')}>\n {this.helperMessage}\n </p>\n )}\n\n {this.errorMessage && (\n <p class=\"pds-multiselect__error\" id={messageId(this.componentId, 'error')}>\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </p>\n )}\n\n {/* Hidden slot for static options */}\n <div style={{ display: 'none' }}>\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
|