@verbb/plugin-kit-web 2.0.14 → 2.0.16
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/CHANGELOG.md +73 -0
- package/custom-elements.json +39571 -0
- package/dist/base/pk-form-associated-element.d.ts +17 -1
- package/dist/base/pk-form-associated-element.d.ts.map +1 -1
- package/dist/chunks/{animate-with-class-ZJeCOKB3.js → animate-with-class-CsDwYnXL.js} +1 -1
- package/dist/chunks/{animate-with-class-ZJeCOKB3.js.map → animate-with-class-CsDwYnXL.js.map} +1 -1
- package/dist/chunks/{autoloader-DPX9YYZs.js → autoloader-dJO3tYOX.js} +2 -2
- package/dist/chunks/{autoloader-DPX9YYZs.js.map → autoloader-dJO3tYOX.js.map} +1 -1
- package/dist/chunks/{component-registry-CNB8PbP_.js → component-registry-D34fm8xW.js} +5 -1
- package/dist/chunks/component-registry-D34fm8xW.js.map +1 -0
- package/dist/chunks/{decorate-W02hmVTt.js → decorate-R0X811qp.js} +13 -2
- package/dist/chunks/decorate-R0X811qp.js.map +1 -0
- package/dist/chunks/{field-labels-CoU9dnNq.js → field-labels-CmuAW8Cl.js} +1 -1
- package/dist/chunks/{field-labels-CoU9dnNq.js.map → field-labels-CmuAW8Cl.js.map} +1 -1
- package/dist/chunks/option-filter-BQqr8Z21.js +121 -0
- package/dist/chunks/option-filter-BQqr8Z21.js.map +1 -0
- package/dist/chunks/pk-autocomplete-kOT0Zlld.js +992 -0
- package/dist/chunks/pk-autocomplete-kOT0Zlld.js.map +1 -0
- package/dist/chunks/{pk-button-QpDDlRbG.js → pk-button-BrH4u4Qr.js} +10 -7
- package/dist/chunks/{pk-button-QpDDlRbG.js.map → pk-button-BrH4u4Qr.js.map} +1 -1
- package/dist/chunks/{pk-button-group-D9hqSfb_.js → pk-button-group-BSz5T5iS.js} +2 -3
- package/dist/chunks/pk-button-group-BSz5T5iS.js.map +1 -0
- package/dist/chunks/{pk-button-group-separator-DG0CYaqc.js → pk-button-group-separator-DH3Rl24b.js} +2 -3
- package/dist/chunks/pk-button-group-separator-DH3Rl24b.js.map +1 -0
- package/dist/chunks/{pk-button-group-text-C5z4P7ur.js → pk-button-group-text-Qro_KmZb.js} +2 -3
- package/dist/chunks/{pk-button-group-text-C5z4P7ur.js.map → pk-button-group-text-Qro_KmZb.js.map} +1 -1
- package/dist/chunks/{pk-calendar-CoUil0F7.js → pk-calendar-Z7Y0PjeY.js} +2 -3
- package/dist/chunks/pk-calendar-Z7Y0PjeY.js.map +1 -0
- package/dist/chunks/{pk-checkbox-Bavq3-9C.js → pk-checkbox-CfV1uDdC.js} +3 -4
- package/dist/chunks/pk-checkbox-CfV1uDdC.js.map +1 -0
- package/dist/chunks/{pk-checkbox-select-9lqd9Rwz.js → pk-checkbox-select-DeCaI3a0.js} +3 -4
- package/dist/chunks/pk-checkbox-select-DeCaI3a0.js.map +1 -0
- package/dist/chunks/{pk-code-editor-DSG6AwLV.js → pk-code-editor-BG9sG_Fy.js} +3 -4
- package/dist/chunks/pk-code-editor-BG9sG_Fy.js.map +1 -0
- package/dist/chunks/{pk-color-input-BCCXCZMA.js → pk-color-input-CncNce1C.js} +3 -4
- package/dist/chunks/pk-color-input-CncNce1C.js.map +1 -0
- package/dist/chunks/{pk-combobox-BqaSsLJb.js → pk-combobox-Dn7UJ_CV.js} +50 -94
- package/dist/chunks/pk-combobox-Dn7UJ_CV.js.map +1 -0
- package/dist/chunks/{pk-connect.styles-DshgIW2n.js → pk-connect.styles-BhW406jt.js} +1 -1
- package/dist/chunks/{pk-connect.styles-DshgIW2n.js.map → pk-connect.styles-BhW406jt.js.map} +1 -1
- package/dist/chunks/{pk-copy-button-CfeVuQ0r.js → pk-copy-button-BVaOLtYG.js} +47 -7
- package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +1 -0
- package/dist/chunks/{pk-date-picker-BM4HMb4-.js → pk-date-picker-DfIvmoZ1.js} +7 -8
- package/dist/chunks/pk-date-picker-DfIvmoZ1.js.map +1 -0
- package/dist/chunks/{pk-dialog-Ck1InIBC.js → pk-dialog-VMQqLW1f.js} +3 -4
- package/dist/chunks/pk-dialog-VMQqLW1f.js.map +1 -0
- package/dist/chunks/{pk-dropdown-item-HcIUlFH1.js → pk-dropdown-item-BZQS87U0.js} +3 -4
- package/dist/chunks/pk-dropdown-item-BZQS87U0.js.map +1 -0
- package/dist/chunks/{pk-dropdown-label-DLgrmYND.js → pk-dropdown-label-CRNWMWQd.js} +2 -3
- package/dist/chunks/{pk-dropdown-label-DLgrmYND.js.map → pk-dropdown-label-CRNWMWQd.js.map} +1 -1
- package/dist/chunks/{pk-dropdown-menu-r5wgkvmZ.js → pk-dropdown-menu-D60p2-9X.js} +5 -6
- package/dist/chunks/pk-dropdown-menu-D60p2-9X.js.map +1 -0
- package/dist/chunks/{pk-editable-table-DMHGqZlQ.js → pk-editable-table-BQ47MXpu.js} +18 -21
- package/dist/chunks/pk-editable-table-BQ47MXpu.js.map +1 -0
- package/dist/chunks/{pk-field-JFP24j4o.js → pk-field-UAlMq6mQ.js} +3 -4
- package/dist/chunks/pk-field-UAlMq6mQ.js.map +1 -0
- package/dist/chunks/{pk-form-associated-element-DmZKgNPL.js → pk-form-associated-element-CCQALRGB.js} +15 -3
- package/dist/chunks/pk-form-associated-element-CCQALRGB.js.map +1 -0
- package/dist/chunks/pk-image-browser-BXFDfch3.js +1364 -0
- package/dist/chunks/pk-image-browser-BXFDfch3.js.map +1 -0
- package/dist/chunks/{pk-input-naIRPWGC.js → pk-input-CF_icEtR.js} +77 -32
- package/dist/chunks/pk-input-CF_icEtR.js.map +1 -0
- package/dist/chunks/{pk-input-group-CGHQKrt8.js → pk-input-group-CWdoVhkH.js} +2 -3
- package/dist/chunks/pk-input-group-CWdoVhkH.js.map +1 -0
- package/dist/chunks/{pk-input-group-addon-DXbNbsfY.js → pk-input-group-addon-ClBkGmAw.js} +2 -3
- package/dist/chunks/pk-input-group-addon-ClBkGmAw.js.map +1 -0
- package/dist/chunks/{pk-input-group-button-XOfVLqGO.js → pk-input-group-button-CHQHsWd4.js} +2 -3
- package/dist/chunks/pk-input-group-button-CHQHsWd4.js.map +1 -0
- package/dist/chunks/{pk-input-group-input-CSmR5vdY.js → pk-input-group-input-oNnqMBGU.js} +2 -3
- package/dist/chunks/pk-input-group-input-oNnqMBGU.js.map +1 -0
- package/dist/chunks/{pk-input-group-text-C6ekhtff.js → pk-input-group-text-HUxlXROB.js} +2 -3
- package/dist/chunks/pk-input-group-text-HUxlXROB.js.map +1 -0
- package/dist/chunks/{pk-input-group-textarea-DALr3pdU.js → pk-input-group-textarea-Cl2FNuw-.js} +2 -3
- package/dist/chunks/pk-input-group-textarea-Cl2FNuw-.js.map +1 -0
- package/dist/chunks/{pk-lightswitch-B-rLflNq.js → pk-lightswitch-D1qEFRxK.js} +4 -5
- package/dist/chunks/pk-lightswitch-D1qEFRxK.js.map +1 -0
- package/dist/chunks/{pk-option-Cy7oOcwF.js → pk-option-DQZHV9jL.js} +4 -4
- package/dist/chunks/pk-option-DQZHV9jL.js.map +1 -0
- package/dist/chunks/{pk-option-group-BAFSIZTa.js → pk-option-group-CCzJkBFp.js} +2 -3
- package/dist/chunks/pk-option-group-CCzJkBFp.js.map +1 -0
- package/dist/chunks/{pk-popover-G3ojheBD.js → pk-popover-KSIOYlbs.js} +5 -6
- package/dist/chunks/pk-popover-KSIOYlbs.js.map +1 -0
- package/dist/chunks/{pk-popup-CgiXok-U.js → pk-popup-B9AgBC2V.js} +2 -3
- package/dist/chunks/pk-popup-B9AgBC2V.js.map +1 -0
- package/dist/chunks/{pk-radio-CDfhOW8L.js → pk-radio-B5XkMHy3.js} +2 -3
- package/dist/chunks/pk-radio-B5XkMHy3.js.map +1 -0
- package/dist/chunks/{pk-radio-group-BazmLDvl.js → pk-radio-group-ByrxGLdX.js} +4 -5
- package/dist/chunks/pk-radio-group-ByrxGLdX.js.map +1 -0
- package/dist/chunks/{pk-scroll-area-BjU7-vZX.js → pk-scroll-area-CdfNxYz8.js} +2 -3
- package/dist/chunks/pk-scroll-area-CdfNxYz8.js.map +1 -0
- package/dist/chunks/{pk-select-BeMDXEC6.js → pk-select-DQtORz-v.js} +8 -7
- package/dist/chunks/pk-select-DQtORz-v.js.map +1 -0
- package/dist/chunks/{pk-separator-CLb9n0FK.js → pk-separator-N-VyjYE6.js} +2 -3
- package/dist/chunks/pk-separator-N-VyjYE6.js.map +1 -0
- package/dist/chunks/{pk-spinner-Blxd3SIH.js → pk-spinner-DweuYJ_Z.js} +2 -3
- package/dist/chunks/{pk-spinner-Blxd3SIH.js.map → pk-spinner-DweuYJ_Z.js.map} +1 -1
- package/dist/chunks/{pk-status-7_5dEuw-.js → pk-status-BehQARDv.js} +2 -3
- package/dist/chunks/{pk-status-7_5dEuw-.js.map → pk-status-BehQARDv.js.map} +1 -1
- package/dist/chunks/{pk-tab-f1OLMVXs.js → pk-tab-CTloD18e.js} +3 -3
- package/dist/chunks/{pk-tab-f1OLMVXs.js.map → pk-tab-CTloD18e.js.map} +1 -1
- package/dist/chunks/{pk-tab-heading-79ZuLhXi.js → pk-tab-heading-Cjcgebxn.js} +2 -3
- package/dist/chunks/pk-tab-heading-Cjcgebxn.js.map +1 -0
- package/dist/chunks/{pk-tab-panel-DdAbrOBF.js → pk-tab-panel-CkKU5-Ah.js} +3 -3
- package/dist/chunks/{pk-tab-panel-DdAbrOBF.js.map → pk-tab-panel-CkKU5-Ah.js.map} +1 -1
- package/dist/chunks/{pk-tabs-BhC5PAnO.js → pk-tabs-BgEBki1q.js} +2 -3
- package/dist/chunks/{pk-tabs-BhC5PAnO.js.map → pk-tabs-BgEBki1q.js.map} +1 -1
- package/dist/chunks/{pk-textarea-BEapC8Rk.js → pk-textarea-CYM2tK88.js} +4 -5
- package/dist/chunks/pk-textarea-CYM2tK88.js.map +1 -0
- package/dist/chunks/{pk-time-picker-RlAqlho4.js → pk-time-picker-DLUBYLFo.js} +4 -5
- package/dist/chunks/{pk-time-picker-RlAqlho4.js.map → pk-time-picker-DLUBYLFo.js.map} +1 -1
- package/dist/chunks/{pk-tiptap-content-zzx3-xrD.js → pk-tiptap-content-BwkqYVJb.js} +3 -4
- package/dist/chunks/pk-tiptap-content-BwkqYVJb.js.map +1 -0
- package/dist/chunks/{pk-tiptap-editor-DpT4TYdi.js → pk-tiptap-editor-De8UUTis.js} +13 -14
- package/dist/chunks/pk-tiptap-editor-De8UUTis.js.map +1 -0
- package/dist/chunks/{pk-tiptap-input-D7xj13FY.js → pk-tiptap-input-Y9eog9Zn.js} +4 -5
- package/dist/chunks/pk-tiptap-input-Y9eog9Zn.js.map +1 -0
- package/dist/chunks/{pk-toggle-5-GKVLye.js → pk-toggle-BthhH7vl.js} +2 -3
- package/dist/chunks/{pk-toggle-5-GKVLye.js.map → pk-toggle-BthhH7vl.js.map} +1 -1
- package/dist/chunks/{pk-toggle-group-CWDwYlgR.js → pk-toggle-group-D2Quux8D.js} +2 -3
- package/dist/chunks/pk-toggle-group-D2Quux8D.js.map +1 -0
- package/dist/chunks/{pk-tooltip-DAq-JZpg.js → pk-tooltip-Cmmc0916.js} +3 -4
- package/dist/chunks/pk-tooltip-Cmmc0916.js.map +1 -0
- package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js → popup-content-animation.styles-BnNiguJo.js} +1 -1
- package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js.map → popup-content-animation.styles-BnNiguJo.js.map} +1 -1
- package/dist/chunks/{popup-pointer-DMnuZDQl.js → popup-pointer-CuLjk1th.js} +1 -1
- package/dist/chunks/{popup-pointer-DMnuZDQl.js.map → popup-pointer-CuLjk1th.js.map} +1 -1
- package/dist/chunks/{register-components-B-qCPFFh.js → register-components-BT9THgdh.js} +1 -1
- package/dist/chunks/{register-components-B-qCPFFh.js.map → register-components-BT9THgdh.js.map} +1 -1
- package/dist/chunks/{register-DeqrQzRS.js → register-posLyX3U.js} +50 -50
- package/dist/chunks/{register-DeqrQzRS.js.map → register-posLyX3U.js.map} +1 -1
- package/dist/chunks/{tiptap.styles-ChAfyVi9.js → tiptap.styles-CPRows--.js} +4 -3
- package/dist/chunks/tiptap.styles-CPRows--.js.map +1 -0
- package/dist/component-registry.d.ts.map +1 -1
- package/dist/components/autocomplete/index.d.ts +2 -0
- package/dist/components/autocomplete/index.d.ts.map +1 -0
- package/dist/components/autocomplete/pk-autocomplete.d.ts +150 -0
- package/dist/components/autocomplete/pk-autocomplete.d.ts.map +1 -0
- package/dist/components/autocomplete/pk-autocomplete.js +2 -0
- package/dist/components/autocomplete/pk-autocomplete.styles.d.ts +7 -0
- package/dist/components/autocomplete/pk-autocomplete.styles.d.ts.map +1 -0
- package/dist/components/autocomplete.d.ts +2 -0
- package/dist/components/autocomplete.js +2 -0
- package/dist/components/button/pk-button.d.ts +37 -1
- package/dist/components/button/pk-button.d.ts.map +1 -1
- package/dist/components/button/pk-button.js +1 -1
- package/dist/components/button-group/pk-button-group-separator.js +1 -1
- package/dist/components/button-group/pk-button-group-text.js +1 -1
- package/dist/components/button-group/pk-button-group.js +1 -1
- package/dist/components/button-group.js +3 -3
- package/dist/components/button.js +1 -1
- package/dist/components/calendar/pk-calendar.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/checkbox/pk-checkbox.js +1 -1
- package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
- package/dist/components/checkbox-select.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-editor/pk-code-editor.js +1 -1
- package/dist/components/code-editor.js +1 -1
- package/dist/components/color-input/pk-color-input.js +1 -1
- package/dist/components/color-input.js +1 -1
- package/dist/components/combobox/pk-combobox.d.ts +8 -14
- package/dist/components/combobox/pk-combobox.d.ts.map +1 -1
- package/dist/components/combobox/pk-combobox.js +1 -1
- package/dist/components/combobox/pk-combobox.styles.d.ts.map +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/connect/pk-connect-oauth.js +4 -5
- package/dist/components/connect/pk-connect-oauth.js.map +1 -1
- package/dist/components/connect/pk-connect.js +5 -6
- package/dist/components/connect/pk-connect.js.map +1 -1
- package/dist/components/copy-button/pk-copy-button.d.ts +3 -0
- package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
- package/dist/components/copy-button/pk-copy-button.js +1 -1
- package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/date-picker/pk-date-picker.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/dialog/pk-dialog.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-separator.js +1 -2
- package/dist/components/dropdown-menu/pk-dropdown-separator.js.map +1 -1
- package/dist/components/dropdown-menu.js +3 -3
- package/dist/components/editable-table/editable-table-model.d.ts +4 -1
- package/dist/components/editable-table/editable-table-model.d.ts.map +1 -1
- package/dist/components/editable-table/pk-editable-table.d.ts +1 -1
- package/dist/components/editable-table/pk-editable-table.d.ts.map +1 -1
- package/dist/components/editable-table/pk-editable-table.js +1 -1
- package/dist/components/editable-table.js +1 -1
- package/dist/components/field/pk-field.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/icon/pk-icon.d.ts +3 -2
- package/dist/components/icon/pk-icon.d.ts.map +1 -1
- package/dist/components/icon/pk-icon.js +1 -2
- package/dist/components/icon/pk-icon.js.map +1 -1
- package/dist/components/image-browser/index.d.ts +2 -0
- package/dist/components/image-browser/index.d.ts.map +1 -0
- package/dist/components/image-browser/pk-image-browser.d.ts +190 -0
- package/dist/components/image-browser/pk-image-browser.d.ts.map +1 -0
- package/dist/components/image-browser/pk-image-browser.js +2 -0
- package/dist/components/image-browser/pk-image-browser.styles.d.ts +6 -0
- package/dist/components/image-browser/pk-image-browser.styles.d.ts.map +1 -0
- package/dist/components/image-browser.d.ts +2 -0
- package/dist/components/image-browser.js +2 -0
- package/dist/components/input/pk-input.d.ts +2 -1
- package/dist/components/input/pk-input.d.ts.map +1 -1
- package/dist/components/input/pk-input.js +1 -1
- package/dist/components/input/pk-input.styles.d.ts.map +1 -1
- package/dist/components/input-group/pk-input-group-addon.js +1 -1
- package/dist/components/input-group/pk-input-group-button.js +1 -1
- package/dist/components/input-group/pk-input-group-input.js +1 -1
- package/dist/components/input-group/pk-input-group-text.js +1 -1
- package/dist/components/input-group/pk-input-group-textarea.js +1 -1
- package/dist/components/input-group/pk-input-group.js +1 -1
- package/dist/components/input-group.js +6 -6
- package/dist/components/input.js +1 -1
- package/dist/components/lightswitch/pk-lightswitch.js +1 -1
- package/dist/components/lightswitch.js +1 -1
- package/dist/components/popover/pk-popover.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/popup/pk-popup.js +1 -1
- package/dist/components/popup.js +1 -1
- package/dist/components/radio-group/pk-radio-group.js +1 -1
- package/dist/components/radio-group/pk-radio.js +1 -1
- package/dist/components/radio-group.js +2 -2
- package/dist/components/scroll-area/pk-scroll-area.js +1 -1
- package/dist/components/scroll-area.js +1 -1
- package/dist/components/select/pk-option-group.d.ts +3 -1
- package/dist/components/select/pk-option-group.d.ts.map +1 -1
- package/dist/components/select/pk-option-group.js +1 -1
- package/dist/components/select/pk-option.d.ts +10 -1
- package/dist/components/select/pk-option.d.ts.map +1 -1
- package/dist/components/select/pk-option.js +1 -1
- package/dist/components/select/pk-select.d.ts +42 -3
- package/dist/components/select/pk-select.d.ts.map +1 -1
- package/dist/components/select/pk-select.js +1 -1
- package/dist/components/select.js +3 -3
- package/dist/components/separator/pk-separator.js +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/spinner/pk-spinner.js +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/status/pk-status.js +1 -1
- package/dist/components/status.js +1 -1
- package/dist/components/tabs/pk-tab-heading.js +1 -1
- package/dist/components/tabs/pk-tab-panel.js +1 -1
- package/dist/components/tabs/pk-tab.js +1 -1
- package/dist/components/tabs/pk-tabs.js +1 -1
- package/dist/components/tabs.js +4 -4
- package/dist/components/textarea/pk-textarea.js +1 -1
- package/dist/components/textarea.js +1 -1
- package/dist/components/time-picker/pk-time-picker.js +1 -1
- package/dist/components/time-picker.js +1 -1
- package/dist/components/tiptap/pk-tiptap-content.js +1 -1
- package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
- package/dist/components/tiptap/pk-tiptap-input.js +1 -1
- package/dist/components/tiptap/variable-tag-node-view.d.ts.map +1 -1
- package/dist/components/tiptap-content.js +1 -1
- package/dist/components/tiptap-editor.js +1 -1
- package/dist/components/tiptap-input.js +1 -1
- package/dist/components/toggle/pk-toggle.js +1 -1
- package/dist/components/toggle-group/pk-toggle-group.js +1 -1
- package/dist/components/toggle-group.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/tooltip/pk-tooltip.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/connect/register-cp-connect.js +3 -3
- package/dist/decorators.d.ts +12 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/index.js +55 -55
- package/dist/internal/sync-filtered-options.d.ts +23 -0
- package/dist/internal/sync-filtered-options.d.ts.map +1 -0
- package/dist/plugin-kit.css +2 -0
- package/dist/plugin-kit.js +2 -2
- package/dist/register-components.js +1 -1
- package/dist/register-pk.generated.d.ts +4 -0
- package/dist/register-pk.generated.d.ts.map +1 -1
- package/dist/register.js +52 -52
- package/dist/utilities/fouce.css +2 -0
- package/dist/utils/async-option-fetch.d.ts +38 -0
- package/dist/utils/async-option-fetch.d.ts.map +1 -0
- package/dist/utils/option-filter.d.ts +11 -0
- package/dist/utils/option-filter.d.ts.map +1 -0
- package/dist/utils/popup-content-exit.d.ts +6 -0
- package/dist/utils/popup-content-exit.d.ts.map +1 -0
- package/dist-loader/chunks/option-filter-Z7bomRrK.js +119 -0
- package/dist-loader/chunks/{pk-base-B21zXxSo.js → pk-base-CyzwylQ7.js} +13 -1
- package/dist-loader/chunks/{pk-button-Dh4gjLHw.js → pk-button-dngp-vOd.js} +10 -6
- package/dist-loader/chunks/{pk-calendar-n1bwSO7X.js → pk-calendar-BE4HRfCq.js} +3 -3
- package/dist-loader/chunks/{pk-checkbox-BrZQB816.js → pk-checkbox-B3d4nkBx.js} +1 -1
- package/dist-loader/chunks/{pk-color-input-sS05YOwT.js → pk-color-input-CD-r_sfG.js} +1 -1
- package/dist-loader/chunks/{pk-combobox-B7q6alzE.js → pk-combobox-DMBKXPLB.js} +48 -91
- package/dist-loader/chunks/{pk-date-picker-Dni5ty79.js → pk-date-picker-wntQmeIM.js} +5 -5
- package/dist-loader/chunks/{pk-dialog-BpPRqFMm.js → pk-dialog-B6lzsRur.js} +3 -3
- package/dist-loader/chunks/{pk-dropdown-item-CHkFNlA9.js → pk-dropdown-item-DJ5TeF1r.js} +3 -3
- package/dist-loader/chunks/{pk-dropdown-menu-BHVOMNV1.js → pk-dropdown-menu-B87bsdlI.js} +3 -3
- package/dist-loader/chunks/{pk-field-CJ09ll1S.js → pk-field-D_SNOJpl.js} +4 -4
- package/dist-loader/chunks/{pk-icon-WHUu7wxk.js → pk-icon-B5ob3JdK.js} +2 -2
- package/dist-loader/chunks/{pk-input-CEw3AdYt.js → pk-input-BhU0PiCk.js} +74 -28
- package/dist-loader/chunks/{pk-lightswitch-DJEUScgo.js → pk-lightswitch-DRxY8511.js} +1 -1
- package/dist-loader/chunks/{pk-option-CunPIei0.js → pk-option-Cc6QWw-0.js} +5 -4
- package/dist-loader/chunks/{pk-popup-FDdBxb4k.js → pk-popup-BooGjXgH.js} +1 -1
- package/dist-loader/chunks/{pk-select-CbAaQ7uE.js → pk-select-BG8qPsBd.js} +6 -4
- package/dist-loader/chunks/{pk-spinner-CIbXjDnp.js → pk-spinner-BKU9Rf2R.js} +1 -1
- package/dist-loader/chunks/{pk-status-BRIVW7EH.js → pk-status-D3ArH2ui.js} +1 -1
- package/dist-loader/chunks/{pk-textarea-C_rOUtFS.js → pk-textarea-CC7rA5A7.js} +1 -1
- package/dist-loader/chunks/{pk-time-picker-Dr3uvbvc.js → pk-time-picker-CDVFNhN7.js} +5 -5
- package/dist-loader/chunks/{pk-tooltip-HwZ0zRd2.js → pk-tooltip-BS2dNLOS.js} +2 -2
- package/dist-loader/chunks/{render-Niz5wYRa.js → render-BKfL_WRl.js} +1 -1
- package/dist-loader/chunks/{svg-_Mtb7CHx.js → svg-BiAlXtCn.js} +5 -3
- package/dist-loader/chunks/{tiptap.styles-BIRIMP7I.js → tiptap.styles-BFGP4eTV.js} +3 -2
- package/dist-loader/components/autocomplete/autocomplete.js +984 -0
- package/dist-loader/components/button/button.js +1 -1
- package/dist-loader/components/button-group/button-group-separator.js +1 -1
- package/dist-loader/components/button-group/button-group-text.js +1 -1
- package/dist-loader/components/button-group/button-group.js +1 -1
- package/dist-loader/components/calendar/calendar.js +1 -1
- package/dist-loader/components/checkbox/checkbox.js +1 -1
- package/dist-loader/components/checkbox-select/checkbox-select.js +2 -2
- package/dist-loader/components/code-editor/code-editor.js +1 -1
- package/dist-loader/components/color-input/color-input.js +1 -1
- package/dist-loader/components/combobox/combobox.js +1 -1
- package/dist-loader/components/connect/connect-oauth.js +3 -3
- package/dist-loader/components/connect/connect.js +5 -5
- package/dist-loader/components/copy-button/copy-button.js +48 -7
- package/dist-loader/components/date-picker/date-picker.js +1 -1
- package/dist-loader/components/dialog/dialog.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-separator.js +1 -1
- package/dist-loader/components/editable-table/editable-table.js +18 -20
- package/dist-loader/components/field/field.js +1 -1
- package/dist-loader/components/icon/icon.js +2 -2
- package/dist-loader/components/image-browser/image-browser.js +1356 -0
- package/dist-loader/components/input/input.js +1 -1
- package/dist-loader/components/input-group/input-group-addon.js +1 -1
- package/dist-loader/components/input-group/input-group-button.js +1 -1
- package/dist-loader/components/input-group/input-group-input.js +1 -1
- package/dist-loader/components/input-group/input-group-text.js +1 -1
- package/dist-loader/components/input-group/input-group-textarea.js +1 -1
- package/dist-loader/components/input-group/input-group.js +1 -1
- package/dist-loader/components/lightswitch/lightswitch.js +1 -1
- package/dist-loader/components/popover/popover.js +2 -2
- package/dist-loader/components/popup/popup.js +1 -1
- package/dist-loader/components/radio-group/radio-group.js +1 -1
- package/dist-loader/components/radio-group/radio.js +1 -1
- package/dist-loader/components/scroll-area/scroll-area.js +1 -1
- package/dist-loader/components/select/option-group.js +1 -1
- package/dist-loader/components/select/option.js +1 -1
- package/dist-loader/components/select/select.js +1 -1
- package/dist-loader/components/separator/separator.js +1 -1
- package/dist-loader/components/spinner/spinner.js +1 -1
- package/dist-loader/components/status/status.js +1 -1
- package/dist-loader/components/tabs/tab-heading.js +1 -1
- package/dist-loader/components/tabs/tab-panel.js +1 -1
- package/dist-loader/components/tabs/tab.js +1 -1
- package/dist-loader/components/tabs/tabs.js +1 -1
- package/dist-loader/components/textarea/textarea.js +1 -1
- package/dist-loader/components/time-picker/time-picker.js +1 -1
- package/dist-loader/components/tiptap/tiptap-content.js +2 -2
- package/dist-loader/components/tiptap/tiptap-editor.js +13 -13
- package/dist-loader/components/tiptap/tiptap-input.js +2 -2
- package/dist-loader/components/toggle/toggle.js +1 -1
- package/dist-loader/components/toggle-group/toggle-group.js +1 -1
- package/dist-loader/components/tooltip/tooltip.js +1 -1
- package/dist-loader/plugin-kit.css +2 -0
- package/dist-loader/plugin-kit.loader.js +4 -0
- package/dist-loader/utilities/fouce.css +2 -0
- package/package.json +53 -9
- package/dist/chunks/component-registry-CNB8PbP_.js.map +0 -1
- package/dist/chunks/decorate-W02hmVTt.js.map +0 -1
- package/dist/chunks/pk-button-group-D9hqSfb_.js.map +0 -1
- package/dist/chunks/pk-button-group-separator-DG0CYaqc.js.map +0 -1
- package/dist/chunks/pk-calendar-CoUil0F7.js.map +0 -1
- package/dist/chunks/pk-checkbox-Bavq3-9C.js.map +0 -1
- package/dist/chunks/pk-checkbox-select-9lqd9Rwz.js.map +0 -1
- package/dist/chunks/pk-code-editor-DSG6AwLV.js.map +0 -1
- package/dist/chunks/pk-color-input-BCCXCZMA.js.map +0 -1
- package/dist/chunks/pk-combobox-BqaSsLJb.js.map +0 -1
- package/dist/chunks/pk-copy-button-CfeVuQ0r.js.map +0 -1
- package/dist/chunks/pk-date-picker-BM4HMb4-.js.map +0 -1
- package/dist/chunks/pk-dialog-Ck1InIBC.js.map +0 -1
- package/dist/chunks/pk-dropdown-item-HcIUlFH1.js.map +0 -1
- package/dist/chunks/pk-dropdown-menu-r5wgkvmZ.js.map +0 -1
- package/dist/chunks/pk-editable-table-DMHGqZlQ.js.map +0 -1
- package/dist/chunks/pk-field-JFP24j4o.js.map +0 -1
- package/dist/chunks/pk-form-associated-element-DmZKgNPL.js.map +0 -1
- package/dist/chunks/pk-input-group-CGHQKrt8.js.map +0 -1
- package/dist/chunks/pk-input-group-addon-DXbNbsfY.js.map +0 -1
- package/dist/chunks/pk-input-group-button-XOfVLqGO.js.map +0 -1
- package/dist/chunks/pk-input-group-input-CSmR5vdY.js.map +0 -1
- package/dist/chunks/pk-input-group-text-C6ekhtff.js.map +0 -1
- package/dist/chunks/pk-input-group-textarea-DALr3pdU.js.map +0 -1
- package/dist/chunks/pk-input-naIRPWGC.js.map +0 -1
- package/dist/chunks/pk-lightswitch-B-rLflNq.js.map +0 -1
- package/dist/chunks/pk-option-Cy7oOcwF.js.map +0 -1
- package/dist/chunks/pk-option-group-BAFSIZTa.js.map +0 -1
- package/dist/chunks/pk-popover-G3ojheBD.js.map +0 -1
- package/dist/chunks/pk-popup-CgiXok-U.js.map +0 -1
- package/dist/chunks/pk-radio-CDfhOW8L.js.map +0 -1
- package/dist/chunks/pk-radio-group-BazmLDvl.js.map +0 -1
- package/dist/chunks/pk-scroll-area-BjU7-vZX.js.map +0 -1
- package/dist/chunks/pk-select-BeMDXEC6.js.map +0 -1
- package/dist/chunks/pk-separator-CLb9n0FK.js.map +0 -1
- package/dist/chunks/pk-tab-heading-79ZuLhXi.js.map +0 -1
- package/dist/chunks/pk-textarea-BEapC8Rk.js.map +0 -1
- package/dist/chunks/pk-tiptap-content-zzx3-xrD.js.map +0 -1
- package/dist/chunks/pk-tiptap-editor-DpT4TYdi.js.map +0 -1
- package/dist/chunks/pk-tiptap-input-D7xj13FY.js.map +0 -1
- package/dist/chunks/pk-toggle-group-CWDwYlgR.js.map +0 -1
- package/dist/chunks/pk-tooltip-DAq-JZpg.js.map +0 -1
- package/dist/chunks/tiptap.styles-ChAfyVi9.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as icons_exports } from "./icons-BR8JcQj2.js";
|
|
2
|
-
import { t as __decorate } from "./decorate-
|
|
2
|
+
import { a as query, i as property, o as state, s as customElement, t as __decorate } from "./decorate-R0X811qp.js";
|
|
3
3
|
import { t as iconStyles } from "./icon.styles-BLTWLqYp.js";
|
|
4
|
-
import { t as PkFormAssociatedElement } from "./pk-form-associated-element-
|
|
4
|
+
import { t as PkFormAssociatedElement } from "./pk-form-associated-element-CCQALRGB.js";
|
|
5
5
|
import { t as MirrorValidator } from "./mirror-validator-DCjNYrrx.js";
|
|
6
6
|
import { t as HasSlotController } from "./has-slot-8BvCt_qo.js";
|
|
7
7
|
import { n as renderIconHtml } from "./render-Dvc3MHQR.js";
|
|
@@ -10,14 +10,14 @@ import { i as unregisterDismissible, n as isTopDismissible, r as registerDismiss
|
|
|
10
10
|
import { i as scrollIntoView } from "./scroll-lock-Bbh3Sc5g.js";
|
|
11
11
|
import { t as PkClearEvent } from "./pk-clear--mPWZP7H.js";
|
|
12
12
|
import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "./overlay-lifecycle-D0pkTQyI.js";
|
|
13
|
-
import "./pk-popup-
|
|
13
|
+
import "./pk-popup-B9AgBC2V.js";
|
|
14
14
|
import { i as waitForPopupReposition, r as syncPopupPlacementAnimation } from "./popup-placement-animation-WlEXnS85.js";
|
|
15
|
-
import { a as isListboxTypeToSelectKey, i as handleListboxKeyDown, n as LISTBOX_NAVIGATION_KEYS
|
|
16
|
-
import { n as
|
|
17
|
-
import { t as
|
|
15
|
+
import { a as isListboxTypeToSelectKey, i as handleListboxKeyDown, n as LISTBOX_NAVIGATION_KEYS } from "./sync-listbox-separators-B1-V0oJi.js";
|
|
16
|
+
import { i as waitForPopupContentExitAnimation, n as AsyncOptionFetcher, r as syncFilteredOptions, t as matchesOptionFilter } from "./option-filter-BQqr8Z21.js";
|
|
17
|
+
import { n as isPointerInsideOverlay, t as isEventInsideOverlay } from "./popup-pointer-CuLjk1th.js";
|
|
18
|
+
import { t as popupContentAnimationStyles } from "./popup-content-animation.styles-BnNiguJo.js";
|
|
18
19
|
import { css, html, nothing } from "lit";
|
|
19
20
|
import { classMap } from "lit/directives/class-map.js";
|
|
20
|
-
import { customElement, property, query, state } from "lit/decorators.js";
|
|
21
21
|
import { unsafeSVG } from "lit/directives/unsafe-svg.js";
|
|
22
22
|
//#region src/events/pk-create.ts
|
|
23
23
|
/** Fired before a combobox creates a new option — mirrors `pk-create`. */
|
|
@@ -198,7 +198,8 @@ var pkComboboxStyles = [popupContentAnimationStyles, css`
|
|
|
198
198
|
outline: none;
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
/* Trailing control absorbs the control's inline-end padding into its hit box
|
|
201
|
+
/* Trailing control absorbs the control's inline-end padding into its hit box,
|
|
202
|
+
with the same 4px glyph inset as pk-copy-button[slot=end]. */
|
|
202
203
|
.control > .expand-button,
|
|
203
204
|
.control > .clear-button:last-child {
|
|
204
205
|
width: calc(
|
|
@@ -206,7 +207,7 @@ var pkComboboxStyles = [popupContentAnimationStyles, css`
|
|
|
206
207
|
var(--pk-combobox-padding-inline)
|
|
207
208
|
);
|
|
208
209
|
margin-inline-start: calc(-0.5 * var(--pk-combobox-control-gap));
|
|
209
|
-
margin-inline-end: calc(-1 * var(--pk-combobox-padding-inline));
|
|
210
|
+
margin-inline-end: calc(-1 * var(--pk-combobox-padding-inline) + 4px);
|
|
210
211
|
}
|
|
211
212
|
|
|
212
213
|
.icon-button:disabled,
|
|
@@ -806,8 +807,8 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
806
807
|
this.panelAnimated = false;
|
|
807
808
|
this.dismissRegistered = false;
|
|
808
809
|
this.panelEventTarget = null;
|
|
809
|
-
this.asyncFetchRequestId = 0;
|
|
810
810
|
this.selectedOptionMeta = null;
|
|
811
|
+
this.asyncFetcher = null;
|
|
811
812
|
this.asyncLoading = false;
|
|
812
813
|
this.asyncError = null;
|
|
813
814
|
this.handleOptionsMutation = (options = {}) => {
|
|
@@ -993,8 +994,7 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
993
994
|
this.optionsObserver?.disconnect();
|
|
994
995
|
this.liveRegion?.destroy();
|
|
995
996
|
this.liveRegion = void 0;
|
|
996
|
-
|
|
997
|
-
this.fetchAbortController?.abort();
|
|
997
|
+
this.asyncFetcher?.cancel();
|
|
998
998
|
this.closePanel("api");
|
|
999
999
|
super.disconnectedCallback();
|
|
1000
1000
|
}
|
|
@@ -1070,15 +1070,8 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1070
1070
|
const group = option.closest("pk-option-group");
|
|
1071
1071
|
return Boolean(group?.hidden);
|
|
1072
1072
|
}
|
|
1073
|
-
defaultFilter(option, query) {
|
|
1074
|
-
const label = option.getLabel().toLowerCase();
|
|
1075
|
-
const value = option.value.toLowerCase();
|
|
1076
|
-
const searchText = (option.getSearchText?.() ?? label).toLowerCase();
|
|
1077
|
-
return label.includes(query) || value.includes(query) || searchText.includes(query);
|
|
1078
|
-
}
|
|
1079
1073
|
matchesFilter(option, query) {
|
|
1080
|
-
|
|
1081
|
-
return this.defaultFilter(option, query);
|
|
1074
|
+
return matchesOptionFilter(option, query, this.filter);
|
|
1082
1075
|
}
|
|
1083
1076
|
getFilterQuery() {
|
|
1084
1077
|
if (!this.open) return "";
|
|
@@ -1149,37 +1142,31 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1149
1142
|
};
|
|
1150
1143
|
}
|
|
1151
1144
|
scheduleAsyncFetch(query) {
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
console.error("Failed to load combobox options:", error);
|
|
1178
|
-
this.asyncError = "Failed to load options. Please try again.";
|
|
1179
|
-
this.renderAsyncOptionNodes([]);
|
|
1180
|
-
} finally {
|
|
1181
|
-
if (requestId === this.asyncFetchRequestId) this.asyncLoading = false;
|
|
1182
|
-
}
|
|
1145
|
+
this.ensureAsyncFetcher().schedule(query);
|
|
1146
|
+
}
|
|
1147
|
+
ensureAsyncFetcher() {
|
|
1148
|
+
if (!this.asyncFetcher) this.asyncFetcher = new AsyncOptionFetcher(() => this.fetchOptions, {
|
|
1149
|
+
errorLabel: "combobox options",
|
|
1150
|
+
onLoading: () => {
|
|
1151
|
+
this.asyncLoading = true;
|
|
1152
|
+
this.asyncError = null;
|
|
1153
|
+
},
|
|
1154
|
+
onResults: (results) => {
|
|
1155
|
+
this.renderAsyncOptionNodes(results);
|
|
1156
|
+
},
|
|
1157
|
+
onError: (message) => {
|
|
1158
|
+
this.asyncError = message;
|
|
1159
|
+
},
|
|
1160
|
+
onSettled: () => {
|
|
1161
|
+
this.asyncLoading = false;
|
|
1162
|
+
},
|
|
1163
|
+
onEmptyQuery: () => {
|
|
1164
|
+
this.asyncLoading = false;
|
|
1165
|
+
this.asyncError = null;
|
|
1166
|
+
this.renderAsyncOptionNodes(this.value && this.selectedOptionMeta ? [this.selectedOptionMeta] : []);
|
|
1167
|
+
}
|
|
1168
|
+
});
|
|
1169
|
+
return this.asyncFetcher;
|
|
1183
1170
|
}
|
|
1184
1171
|
getAsyncStatusMessage() {
|
|
1185
1172
|
if (!this.usesAsyncSearch || !this.open) return null;
|
|
@@ -1190,11 +1177,6 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1190
1177
|
if (this.getEnabledVisibleOptions().length === 0 && !this.shouldShowCreateOption()) return `No matches for "${query}".`;
|
|
1191
1178
|
return null;
|
|
1192
1179
|
}
|
|
1193
|
-
shouldShowAsyncEmpty() {
|
|
1194
|
-
if (!this.usesAsyncSearch || !this.open) return false;
|
|
1195
|
-
if (!this.inputValue.trim() || this.asyncLoading || this.asyncError) return false;
|
|
1196
|
-
return this.getEnabledVisibleOptions().length === 0 && !this.shouldShowCreateOption();
|
|
1197
|
-
}
|
|
1198
1180
|
isSelected(value) {
|
|
1199
1181
|
if (this.multiple) return this.values.includes(value);
|
|
1200
1182
|
return this.value === value;
|
|
@@ -1231,18 +1213,14 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1231
1213
|
applySelection() {
|
|
1232
1214
|
const visible = this.getVisibleOptions();
|
|
1233
1215
|
const filterQuery = this.open ? this.getFilterQuery() : "";
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
const filterEmpty = groupOptions.length > 0 && groupOptions.every((option) => option.hidden);
|
|
1243
|
-
group.toggleAttribute("data-pk-filter-empty", filterEmpty);
|
|
1244
|
-
}
|
|
1245
|
-
syncListboxSeparators(this);
|
|
1216
|
+
syncFilteredOptions({
|
|
1217
|
+
host: this,
|
|
1218
|
+
options: this.options,
|
|
1219
|
+
visible,
|
|
1220
|
+
listboxId: this.listboxId,
|
|
1221
|
+
filterQuery,
|
|
1222
|
+
isSelected: (value) => this.isSelected(value)
|
|
1223
|
+
});
|
|
1246
1224
|
this.syncValueInput();
|
|
1247
1225
|
if (this.open) {
|
|
1248
1226
|
this.syncHighlight();
|
|
@@ -1412,7 +1390,7 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1412
1390
|
this.unbindPanelEvents();
|
|
1413
1391
|
this.closing = true;
|
|
1414
1392
|
this.panelAnimated = false;
|
|
1415
|
-
await this.
|
|
1393
|
+
await waitForPopupContentExitAnimation(this.panelElement);
|
|
1416
1394
|
this.open = false;
|
|
1417
1395
|
this.closing = false;
|
|
1418
1396
|
this.panelAnimated = false;
|
|
@@ -1426,8 +1404,7 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1426
1404
|
this.unregisterDismissHandlers();
|
|
1427
1405
|
this.applySelection();
|
|
1428
1406
|
if (this.usesAsyncSearch) {
|
|
1429
|
-
|
|
1430
|
-
this.fetchAbortController?.abort();
|
|
1407
|
+
this.asyncFetcher?.cancel();
|
|
1431
1408
|
this.asyncLoading = false;
|
|
1432
1409
|
this.asyncError = null;
|
|
1433
1410
|
this.renderAsyncOptionNodes(this.selectedOptionMeta ? [this.selectedOptionMeta] : []);
|
|
@@ -1449,27 +1426,6 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1449
1426
|
composed: true
|
|
1450
1427
|
}));
|
|
1451
1428
|
}
|
|
1452
|
-
waitForExitAnimation() {
|
|
1453
|
-
const panel = this.panelElement;
|
|
1454
|
-
if (!panel) return Promise.resolve();
|
|
1455
|
-
return new Promise((resolve) => {
|
|
1456
|
-
let settled = false;
|
|
1457
|
-
const finish = () => {
|
|
1458
|
-
if (settled) return;
|
|
1459
|
-
settled = true;
|
|
1460
|
-
panel.removeEventListener("animationend", onAnimationEnd);
|
|
1461
|
-
window.clearTimeout(fallback);
|
|
1462
|
-
panel.classList.remove("closing");
|
|
1463
|
-
resolve();
|
|
1464
|
-
};
|
|
1465
|
-
const onAnimationEnd = (event) => {
|
|
1466
|
-
if (event.target === panel && event.animationName.startsWith("pk-popup-content-out")) finish();
|
|
1467
|
-
};
|
|
1468
|
-
panel.classList.add("closing");
|
|
1469
|
-
panel.addEventListener("animationend", onAnimationEnd);
|
|
1470
|
-
const fallback = window.setTimeout(finish, 150);
|
|
1471
|
-
});
|
|
1472
|
-
}
|
|
1473
1429
|
shouldReturnFocusToInput(source) {
|
|
1474
1430
|
return source !== "light-dismiss" && source !== "pointer-dismiss";
|
|
1475
1431
|
}
|
|
@@ -1838,7 +1794,7 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1838
1794
|
render() {
|
|
1839
1795
|
const visibleOptions = this.getEnabledVisibleOptions();
|
|
1840
1796
|
const showCreate = this.shouldShowCreateOption();
|
|
1841
|
-
const showEmpty = this.open &&
|
|
1797
|
+
const showEmpty = this.open && !this.usesAsyncSearch && visibleOptions.length === 0 && !showCreate;
|
|
1842
1798
|
const asyncStatus = this.getAsyncStatusMessage();
|
|
1843
1799
|
const createQuery = this.inputValue.trim();
|
|
1844
1800
|
return html`
|
|
@@ -2013,4 +1969,4 @@ PkCombobox = __decorate([customElement("pk-combobox")], PkCombobox);
|
|
|
2013
1969
|
//#endregion
|
|
2014
1970
|
export { PkCreateEvent as n, PkCombobox as t };
|
|
2015
1971
|
|
|
2016
|
-
//# sourceMappingURL=pk-combobox-
|
|
1972
|
+
//# sourceMappingURL=pk-combobox-Dn7UJ_CV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-combobox-Dn7UJ_CV.js","names":[],"sources":["../../src/events/pk-create.ts","../../src/components/combobox/pk-combobox.styles.ts","../../src/components/combobox/pk-combobox.ts"],"sourcesContent":["/** Fired before a combobox creates a new option — mirrors `pk-create`. */\nexport class PkCreateEvent extends Event {\n readonly inputValue: string;\n\n constructor(inputValue: string) {\n super('pk-create', { bubbles: true, cancelable: true, composed: true });\n this.inputValue = inputValue;\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-create': PkCreateEvent;\n }\n}\n","import { css } from 'lit';\n\nimport { iconStyles } from '../../base/icon.styles.js';\nimport { popupContentAnimationStyles } from '../../styles/popup-content-animation.styles.js';\n\nexport const pkComboboxStyles = [\n popupContentAnimationStyles,\n css`\n ${iconStyles}\n @layer pk-component {\n :host {\n display: inline-block;\n position: relative;\n width: fit-content;\n max-width: 100%;\n align-self: flex-start;\n flex: none;\n color: var(--pk-color-gray-700);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n --pk-combobox-min-height: 0;\n --pk-combobox-trigger-min-height: var(--pk-btn-height-default);\n --pk-combobox-padding-block: 6px;\n --pk-combobox-padding-inline: 10px;\n --pk-combobox-font-size: var(--pk-font-size-base);\n --pk-combobox-line-height: var(--pk-input-control-line-height, 1.25rem);\n --pk-combobox-decoration-size: 0.875rem;\n --pk-select-item-min-height: 0;\n --pk-select-item-padding-block: 6px;\n --pk-select-item-padding-inline: 10px;\n --pk-select-item-padding-inline-end: 2rem;\n --pk-select-item-font-size: 14px;\n --pk-select-item-line-height: 1.4;\n --pk-select-item-indicator-size: 0.75rem;\n --pk-select-item-indicator-inset: 0.5rem;\n /* v1 ComboboxLabel default: text-xs → 12px (was 11px). */\n --pk-select-group-label-font-size: 12px;\n }\n\n :host([width='full']) {\n display: block;\n width: 100%;\n }\n\n :host([width='full']) .control {\n width: 100%;\n }\n\n .control {\n display: inline-flex;\n align-items: center;\n --pk-combobox-control-gap: 0.5rem;\n gap: var(--pk-combobox-control-gap);\n /* Fill the host — consumers set min-width/width on :host; fit-content here\n left a dead hit strip beside the painted field (same class of bug as dropdown). */\n width: 100%;\n max-width: 100%;\n min-width: 0;\n min-height: var(--pk-combobox-min-height);\n margin: 0;\n padding: var(--pk-combobox-padding-block) var(--pk-combobox-padding-inline);\n border: 1px solid transparent;\n border-radius: var(--pk-radius-lg);\n --pk-combobox-fill: var(--pk-color-slate-250);\n --pk-combobox-fill-hover: var(--pk-color-slate-300);\n background: var(--pk-combobox-fill);\n color: var(--pk-color-gray-700);\n font: inherit;\n font-size: var(--pk-combobox-font-size);\n line-height: var(--pk-input-control-line-height, 1.25rem);\n white-space: nowrap;\n cursor: text;\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;\n }\n\n .control[data-popup-open] {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n background: var(--pk-color-white);\n }\n\n :host(:not([disabled])) .control:hover:not(.is-disabled) {\n background: var(--pk-combobox-fill-hover);\n }\n\n :host(:not([disabled])) .control[data-popup-open]:hover:not(.is-disabled),\n :host(:not([disabled])) .control[data-popup-open]:focus-within:not(.is-disabled) {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n background: var(--pk-color-white);\n }\n\n :host(:not([invalid]):not(:state(user-invalid))) .control:focus-within,\n :host(:not([invalid]):not(:state(user-invalid))[data-state='focus-visible']) .control {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n background: var(--pk-color-white);\n }\n\n .control.is-disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .control-start,\n .control-end {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n line-height: 0;\n color: var(--pk-color-gray-600);\n }\n\n slot[name='start']::slotted(svg),\n slot[name='end']::slotted(svg) {\n width: var(--pk-combobox-decoration-size);\n height: var(--pk-combobox-decoration-size);\n }\n\n .combobox-input {\n flex: 1 1 auto;\n width: 100%;\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n line-height: var(--pk-input-control-line-height, 1.25rem);\n outline: none;\n }\n\n .combobox-input::placeholder {\n color: currentColor;\n }\n\n :host([data-has-value]) .combobox-input::placeholder,\n .control[data-popup-open] .combobox-input::placeholder,\n .control:focus-within .combobox-input::placeholder {\n color: var(--pk-color-gray-400);\n }\n\n /* Expand/clear: the button box IS the hit target. Negative margins cancel the\n control padding / half-gap in layout, while matching extra width/height keeps\n the painted (and clickable) box flush to the field edge — so flex centering\n places the glyph in the middle of the real hit area. */\n .icon-button,\n .clear-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n align-self: stretch;\n box-sizing: border-box;\n width: calc(var(--pk-combobox-decoration-size) + var(--pk-combobox-control-gap));\n height: auto;\n min-height: var(--pk-combobox-decoration-size);\n margin-block: calc(-1 * var(--pk-combobox-padding-block));\n margin-inline: calc(-0.5 * var(--pk-combobox-control-gap));\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: var(--pk-color-gray-600);\n cursor: pointer;\n outline: none;\n }\n\n /* Trailing control absorbs the control's inline-end padding into its hit box,\n with the same 4px glyph inset as pk-copy-button[slot=end]. */\n .control > .expand-button,\n .control > .clear-button:last-child {\n width: calc(\n var(--pk-combobox-decoration-size) + (0.5 * var(--pk-combobox-control-gap)) +\n var(--pk-combobox-padding-inline)\n );\n margin-inline-start: calc(-0.5 * var(--pk-combobox-control-gap));\n margin-inline-end: calc(-1 * var(--pk-combobox-padding-inline) + 4px);\n }\n\n .icon-button:disabled,\n .clear-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n pointer-events: none;\n color: var(--pk-color-gray-600);\n }\n\n .icon svg {\n display: block;\n width: 0.75rem;\n height: 0.75rem;\n }\n\n .clear-button-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n pointer-events: none;\n }\n\n .clear-button-icon svg {\n display: block;\n width: 0.75rem;\n height: 0.75rem;\n }\n\n .control--multiple {\n --pk-combobox-control-gap: 0.25rem;\n flex-wrap: wrap;\n align-items: center;\n align-content: center;\n width: 100%;\n max-width: 100%;\n height: auto;\n min-height: 0;\n padding: var(--pk-combobox-padding-block) var(--pk-combobox-padding-inline);\n gap: var(--pk-combobox-control-gap);\n border: var(--pk-input-border);\n border-radius: var(--pk-input-border-radius);\n background: var(--pk-input-bg);\n cursor: text;\n }\n\n :host([multiple][width='full']) .control--multiple {\n width: 100%;\n }\n\n :host([multiple]) .control:hover:not(.is-disabled) {\n background: var(--pk-input-bg);\n }\n\n :host([multiple]:not([invalid]):not(:state(user-invalid))) .control[data-popup-open],\n :host([multiple]:not([invalid]):not(:state(user-invalid))) .control:focus-within,\n :host([multiple]:not([invalid]):not(:state(user-invalid))[data-state='focus-visible']) .control {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n background: var(--pk-input-bg);\n }\n\n .chips {\n display: flex;\n flex: 0 1 auto;\n flex-wrap: wrap;\n gap: 0.25rem;\n align-items: center;\n min-width: 0;\n }\n\n .tag {\n /* v1 ComboboxChip: text-xs + py-[2px] → 20px; face color gray-700. */\n --pk-combobox-tag-height: 20px;\n --pk-combobox-tag-padding-inline-start: 6px;\n --pk-combobox-tag-remove-width: 1.25rem;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n gap: 0.125rem;\n max-width: 100%;\n height: var(--pk-combobox-tag-height);\n padding-block: 0;\n padding-inline: var(--pk-combobox-tag-padding-inline-start) 0;\n border-radius: var(--pk-radius-sm);\n background: var(--pk-color-slate-200);\n color: var(--pk-color-gray-700);\n font-size: 12px;\n font-weight: 500;\n line-height: 1rem;\n white-space: nowrap;\n }\n\n .tag-label {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /* Chip remove: fill the chip end so the glyph centers in the real target. */\n .tag-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n align-self: stretch;\n box-sizing: border-box;\n width: var(--pk-combobox-tag-remove-width);\n height: auto;\n min-height: 0;\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n opacity: 0.5;\n outline: none;\n }\n\n .tag-remove:hover {\n opacity: 1;\n }\n\n .tag-remove-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n pointer-events: none;\n }\n\n .tag-remove-icon svg {\n display: block;\n width: 0.625rem;\n height: 0.625rem;\n }\n\n .combobox-input--inline {\n flex: 1 1 4rem;\n width: auto;\n min-width: 4rem;\n padding: 0;\n }\n\n :host([multiple]) .control:not([data-popup-open]):not(:focus-within) {\n background: var(--pk-input-bg);\n }\n\n :host([multiple]) .combobox-input::placeholder {\n color: var(--pk-color-gray-400);\n }\n\n .create-option {\n display: flex;\n align-items: center;\n width: 100%;\n margin: 0;\n min-height: var(--pk-select-item-min-height);\n padding-block: var(--pk-select-item-padding-block);\n padding-inline: var(--pk-select-item-padding-inline);\n border: 0;\n background: transparent;\n color: var(--pk-color-gray-700);\n font: inherit;\n font-size: var(--pk-select-item-font-size);\n line-height: var(--pk-select-item-line-height);\n text-align: left;\n cursor: pointer;\n outline: none;\n box-sizing: border-box;\n }\n\n .create-option:hover,\n .create-option.is-highlighted {\n background: var(--pk-color-slate-100);\n }\n\n .value-input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n .panel ::slotted(pk-separator) {\n margin: 4px 0;\n }\n\n .panel {\n width: max-content;\n min-width: var(--pk-combobox-anchor-width, 8rem);\n padding: 0;\n border: 0;\n border-radius: var(--pk-radius-md);\n background: var(--pk-color-white);\n box-shadow: var(--pk-shadow-popup);\n color: var(--pk-color-gray-700);\n outline: none;\n }\n\n .panel-body {\n max-height: 16rem;\n overflow: auto;\n }\n\n .panel--popup {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .panel--popup .panel-body {\n flex: 1 1 auto;\n min-height: 0;\n }\n\n :host([popup-mode]) .control--popup {\n display: inline-flex;\n width: 100%;\n max-width: 100%;\n min-height: 0;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n gap: 0;\n cursor: default;\n }\n\n :host([popup-mode]) .control--popup:hover:not(.is-disabled) {\n background: transparent;\n }\n\n /* Popup mode paints chrome on the trigger / panel input — do not keep the\n shared .control[data-popup-open] focus ring around the closed-state button. */\n :host([popup-mode]) .control--popup[data-popup-open],\n :host([popup-mode]) .control--popup[data-popup-open]:hover:not(.is-disabled),\n :host([popup-mode]) .control--popup[data-popup-open]:focus-within:not(.is-disabled),\n :host([popup-mode]:not([invalid]):not(:state(user-invalid))) .control--popup:focus-within,\n :host([popup-mode]:not([invalid]):not(:state(user-invalid))[data-state='focus-visible']) .control--popup {\n border: 0;\n box-shadow: none;\n background: transparent;\n }\n\n .popup-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n width: 100%;\n min-width: 12rem;\n max-width: 100%;\n min-height: var(--pk-combobox-trigger-min-height);\n margin: 0;\n padding: var(--pk-combobox-padding-block) var(--pk-combobox-padding-inline);\n border: 1px solid transparent;\n border-radius: var(--pk-input-border-radius);\n /* Match input-mode fill / v1 default Button — not a white outlined field. */\n background: var(--pk-combobox-fill, var(--pk-color-slate-250));\n color: var(--pk-color-gray-700);\n font: inherit;\n font-size: var(--pk-combobox-font-size);\n font-weight: 400;\n line-height: var(--pk-combobox-line-height);\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;\n }\n\n .popup-trigger:hover:not(:disabled) {\n background: var(--pk-combobox-fill-hover, var(--pk-color-slate-300));\n }\n\n .popup-trigger:active:not(:disabled),\n .control--popup[data-popup-open] .popup-trigger:not(:disabled) {\n background: var(--pk-combobox-fill-hover, var(--pk-color-slate-300));\n }\n\n .control--popup[data-popup-open] .popup-trigger:not(:disabled) {\n border-color: transparent;\n box-shadow: none;\n }\n\n .control--popup:not([data-popup-open]) .popup-trigger:focus-visible,\n :host([data-state='focus-visible']) .control--popup:not([data-popup-open]) .popup-trigger {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n background: var(--pk-color-white);\n }\n\n .popup-trigger:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .popup-trigger-value {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .popup-trigger-value.is-placeholder {\n /* Trigger label is button text, not an input placeholder — keep it readable. */\n color: var(--pk-color-gray-700);\n }\n\n .popup-trigger-icon {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n line-height: 0;\n }\n\n .popup-trigger-icon svg {\n display: block;\n width: 0.75rem;\n height: 0.75rem;\n }\n\n .panel-search {\n flex: none;\n padding: 0.25rem;\n }\n\n .panel-input {\n display: block;\n width: 100%;\n min-width: 0;\n margin: 0;\n padding: 6px 8px;\n border: var(--pk-input-border);\n border-radius: var(--pk-input-border-radius);\n background: color-mix(in srgb, var(--pk-input-bg) 30%, transparent);\n color: var(--pk-color-gray-700);\n font: inherit;\n font-size: var(--pk-combobox-font-size);\n line-height: 1.4;\n outline: none;\n box-sizing: border-box;\n }\n\n .panel-input::placeholder {\n color: var(--pk-color-gray-400);\n }\n\n .panel-input:focus {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n background: var(--pk-color-white);\n }\n\n :host([popup-mode][size='xs']) .popup-trigger-icon svg {\n width: 0.625rem;\n height: 0.625rem;\n }\n\n :host([popup-mode][size='xs']) .panel-input {\n padding: 4px 8px;\n font-size: 11px;\n }\n\n :host([popup-mode][size='sm']) .panel-input {\n font-size: 12px;\n }\n\n :host([popup-mode][size='lg']) .panel-input {\n padding-block: 8px;\n padding-inline: 12px;\n }\n\n :host([popup-mode][width='full']) .popup-trigger {\n width: 100%;\n }\n\n .panel:not([data-open]):not(.closing) {\n opacity: 0;\n pointer-events: none;\n }\n\n .panel[data-open]:not(.closing) {\n opacity: 1;\n pointer-events: auto;\n }\n\n .panel[hidden] {\n display: none !important;\n }\n\n .empty {\n display: flex;\n align-items: center;\n margin: 0;\n min-height: var(--pk-select-item-min-height, var(--pk-input-height));\n padding-block: var(--pk-select-item-padding-block);\n padding-inline: var(--pk-select-item-padding-inline);\n border: var(--pk-select-trigger-border-width, 1px) solid transparent;\n box-sizing: border-box;\n color: var(--pk-color-gray-500);\n font-size: var(--pk-select-item-font-size);\n line-height: var(--pk-select-item-line-height);\n }\n\n .async-status {\n display: flex;\n align-items: center;\n margin: 0;\n min-height: var(--pk-select-item-min-height, var(--pk-input-height));\n padding-block: var(--pk-select-item-padding-block);\n padding-inline: var(--pk-select-item-padding-inline);\n border: var(--pk-select-trigger-border-width, 1px) solid transparent;\n box-sizing: border-box;\n color: var(--pk-color-gray-500);\n font-size: var(--pk-select-item-font-size);\n line-height: var(--pk-select-item-line-height);\n }\n\n :host([invalid]) .control,\n :host(:state(user-invalid)) .control {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([multiple][invalid]) .control,\n :host([multiple]:state(user-invalid)) .control {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([invalid]) .control:focus-within,\n :host([invalid][data-state='focus-visible']) .control,\n :host(:state(user-invalid)) .control:focus-within,\n :host(:state(user-invalid)[data-state='focus-visible']) .control {\n border-color: var(--pk-color-rose-600);\n box-shadow: var(--pk-input-invalid-focus-shadow);\n }\n\n :host([size='xs']) {\n --pk-combobox-min-height: 0;\n --pk-combobox-trigger-min-height: var(--pk-btn-height-xs);\n --pk-combobox-padding-block: 4px;\n --pk-combobox-padding-inline: 8px;\n --pk-combobox-font-size: 11px;\n --pk-combobox-decoration-size: 0.625rem;\n --pk-select-item-min-height: 0;\n --pk-select-item-padding-block: 4px;\n --pk-select-item-padding-inline: 8px;\n --pk-select-item-padding-inline-end: 1.75rem;\n --pk-select-item-font-size: 11px;\n --pk-select-item-indicator-size: 0.75rem;\n --pk-select-item-indicator-inset: 0.5rem;\n /* v1 ComboboxLabel xs: text-[11px] */\n --pk-select-group-label-font-size: 11px;\n }\n\n :host([size='xs']) .control {\n border-radius: var(--pk-radius-sm);\n }\n\n :host([size='xs']) .icon svg,\n :host([size='xs']) .clear-button-icon svg {\n width: 0.625rem;\n height: 0.625rem;\n }\n\n :host([size='sm']) {\n --pk-combobox-min-height: 0;\n --pk-combobox-trigger-min-height: var(--pk-btn-height-sm);\n --pk-combobox-padding-block: 6px;\n --pk-combobox-padding-inline: 10px;\n --pk-combobox-font-size: 12px;\n --pk-combobox-decoration-size: 0.6875rem;\n --pk-select-item-min-height: 0;\n --pk-select-item-padding-block: 6px;\n --pk-select-item-padding-inline: 10px;\n --pk-select-item-padding-inline-end: 1.75rem;\n --pk-select-item-font-size: 12px;\n --pk-select-item-indicator-inset: 0.625rem;\n /* v1 ComboboxLabel sm: text-[12px] — empty dropzone field picker uses sm. */\n --pk-select-group-label-font-size: 12px;\n }\n\n :host([size='sm']) .control {\n border-radius: var(--pk-radius-md);\n }\n\n :host([size='sm']) .popup-trigger {\n border-radius: var(--pk-radius-md);\n }\n\n :host([size='sm']) .icon svg,\n :host([size='sm']) .clear-button-icon svg {\n width: 0.6875rem;\n height: 0.6875rem;\n }\n\n :host([size='lg']) {\n --pk-combobox-trigger-min-height: var(--pk-btn-height-lg);\n --pk-combobox-padding-block: 8px;\n --pk-combobox-padding-inline: 12px;\n --pk-combobox-font-size: var(--pk-font-size-base);\n --pk-combobox-decoration-size: 1rem;\n --pk-select-item-padding-block: 8px;\n --pk-select-item-padding-inline: 12px;\n --pk-select-item-font-size: 14px;\n --pk-select-item-indicator-inset: 0.75rem;\n /* v1 ComboboxLabel lg: text-sm → 14px */\n --pk-select-group-label-font-size: 14px;\n }\n\n :host([size='xl']) {\n --pk-combobox-trigger-min-height: var(--pk-btn-height-xl);\n --pk-combobox-padding-block: 10px;\n --pk-combobox-padding-inline: 14px;\n --pk-combobox-font-size: var(--pk-font-size-base);\n --pk-combobox-decoration-size: 1.125rem;\n --pk-select-item-padding-block: 10px;\n --pk-select-item-padding-inline: 14px;\n --pk-select-item-padding-inline-end: 2.25rem;\n --pk-select-item-font-size: 14px;\n --pk-select-item-indicator-inset: 0.875rem;\n /* v1 ComboboxLabel xl: text-base → 16px */\n --pk-select-group-label-font-size: 16px;\n }\n\n :host([size='xl']) .icon svg,\n :host([size='xl']) .clear-button-icon svg {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n`,\n];\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from '../../decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport type { PropertyValues } from 'lit';\n\nimport { chevronDown, xmark, renderIconHtml } from '../../icons/index.js';\nimport { LiveRegion, uniqueId } from '../../a11y/focus.js';\nimport { isTopDismissible, registerDismissible, unregisterDismissible } from '../../a11y/dismissible-stack.js';\nimport { scrollIntoView } from '../../a11y/scroll-lock.js';\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { HasSlotController } from '../../internal/has-slot.js';\nimport { PkClearEvent } from '../../events/pk-clear.js';\nimport { PkCreateEvent } from '../../events/pk-create.js';\nimport {\n PkAfterHideEvent,\n PkAfterShowEvent,\n PkHideEvent,\n PkShowEvent,\n type PkOverlaySource,\n} from '../../events/overlay-lifecycle.js';\nimport type { PkValidator } from '../../validators/types.js';\nimport { MirrorValidator } from '../../validators/mirror-validator.js';\n// Keep the internal element registered when production builds erase type-only imports.\nimport '../popup/pk-popup.js';\nimport type { PkPopup, PkPopupPlacement } from '../popup/pk-popup.js';\nimport {\n handleListboxKeyDown,\n isListboxTypeToSelectKey,\n LISTBOX_NAVIGATION_KEYS,\n} from '../../utils/listbox-keyboard.js';\nimport {\n syncPopupPlacementAnimation,\n waitForPopupReposition,\n} from '../../utils/popup-placement-animation.js';\nimport { waitForPopupContentExitAnimation } from '../../utils/popup-content-exit.js';\nimport { isEventInsideOverlay, isPointerInsideOverlay } from '../../utils/popup-pointer.js';\nimport { syncFilteredOptions } from '../../internal/sync-filtered-options.js';\nimport {\n AsyncOptionFetcher,\n type PkAsyncOptionFetchHandler,\n type PkAsyncOptionItem,\n} from '../../utils/async-option-fetch.js';\nimport { matchesOptionFilter, type PkOptionFilter } from '../../utils/option-filter.js';\nimport type { PkOption } from '../select/pk-option.js';\nimport type { PkOptionGroup } from '../select/pk-option-group.js';\nimport { pkComboboxStyles } from './pk-combobox.styles.js';\n\nexport type PkComboboxSize = 'xs' | 'sm' | 'default' | 'lg' | 'xl';\n\n/** Alias of `PkOptionFilter` — public Combobox filter API. */\nexport type PkComboboxFilter = PkOptionFilter;\n\nexport type PkComboboxAsyncOption = PkAsyncOptionItem;\n\nexport type PkComboboxFetchHandler = PkAsyncOptionFetchHandler;\nconst CHEVRON_ICON = renderIconHtml(chevronDown);\nconst XMARK_ICON = renderIconHtml(xmark);\n\n/**\n * Combobox — searchable select with separate input and selection state.\n *\n * @slot start - Presentational decoration before the input (e.g. icons)\n * @slot end - Presentational decoration before the expand/clear controls\n * @slot - `pk-option` and `pk-option-group` items\n *\n * @csspart control - Input control wrapper\n * @csspart start - Host start decoration container\n * @csspart end - Host end decoration container\n * @csspart input - Combobox text input\n * @csspart tags - Multiselect chip container\n * @csspart tag - Individual multiselect chip\n * @csspart tag-remove - Chip remove button\n * @csspart clear-button - Clear selection button\n * @csspart expand-button - Toggle listbox button\n * @csspart trigger - Popup-mode trigger button (shows the selected value)\n * @csspart panel-search - Popup-mode search field container\n * @csspart panel-input - Popup-mode search input\n * @csspart panel-body - Scrollable listbox region inside the popup panel\n * @csspart empty - Empty-state message\n * @csspart async-status - Async search status message\n *\n * @event pk-create - Cancelable. Fired before a new option is created when `allow-create` is enabled.\n */\n@customElement('pk-combobox')\nexport class PkCombobox extends PkFormAssociatedElement {\n static override styles = pkComboboxStyles;\n\n static override get validators(): PkValidator[] {\n return [\n ...super.validators,\n MirrorValidator(),\n {\n observedAttributes: ['required'],\n checkValidity: (element) => {\n const combobox = element as PkCombobox;\n const result = {\n message: 'Please select an item in the list.',\n isValid: true,\n invalidKeys: [] as ReturnType<PkValidator['checkValidity']>['invalidKeys'],\n };\n\n if (!combobox.required) {\n return result;\n }\n\n const missing = combobox.multiple\n ? combobox.values.length === 0\n : !combobox.value;\n\n if (!missing) {\n return result;\n }\n\n result.isValid = false;\n result.invalidKeys.push('valueMissing');\n return result;\n },\n },\n ];\n }\n\n override assumeInteractionOn = ['blur', 'input'];\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property({ type: Boolean, reflect: true })\n multiple = false;\n\n @property({ reflect: true })\n placement: PkPopupPlacement = 'bottom-start';\n\n /** Gap between the control and listbox panel in px (default: 6). */\n @property({ attribute: 'side-offset', type: Number })\n sideOffset = 6;\n\n @property({ type: Boolean, reflect: true })\n clearable = false;\n\n @property({ attribute: 'with-clear', type: Boolean })\n withClear = false;\n\n @property({ attribute: 'allow-create', type: Boolean })\n allowCreate = false;\n\n @property({ attribute: 'allow-custom-value', type: Boolean })\n allowCustomValue = false;\n\n /** When true, the first matching option is highlighted on open or when filtering. */\n @property({ attribute: 'auto-highlight', type: Boolean })\n autoHighlight = false;\n\n /** When true, the control shows a trigger button and the search field renders inside the popup. */\n @property({ attribute: 'popup-mode', type: Boolean, reflect: true })\n popupMode = false;\n\n @property({ attribute: 'search-placeholder' })\n searchPlaceholder = 'Search';\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n @property({ reflect: true })\n size: PkComboboxSize = 'default';\n\n /** When `full`, the control stretches to the host width. */\n @property({ reflect: true })\n width?: 'full';\n\n /** Empty by default — consumers opt in when a prompt is useful. */\n @property()\n placeholder = '';\n\n @property({ attribute: 'empty-message' })\n emptyMessage = 'No options found.';\n\n @property()\n value = '';\n\n @property({ attribute: 'default-value' })\n defaultValue = '';\n\n @property({ type: Array, attribute: false })\n values: string[] = [];\n\n @property({ attribute: false })\n defaultValues: string[] = [];\n\n @property()\n label = '';\n\n @property()\n instructions = '';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n /**\n * Whether arrow-key focus loops from the last option back to the first (and vice versa).\n * Mirrors Base UI `Combobox` — default: `true`.\n */\n @property({ attribute: 'loop-focus', type: Boolean })\n loopFocus = true;\n\n /** Custom filter — `(option, query) => boolean`. Defaults to label/value substring match. */\n @property({ attribute: false })\n filter: PkComboboxFilter | null = null;\n\n /**\n * When true, options are loaded via `fetchOptions` as the user types instead of\n * filtering static `pk-option` children.\n */\n @property({ type: Boolean, reflect: true })\n async = false;\n\n /** Message shown while async results are loading. */\n @property({ attribute: 'loading-message' })\n loadingMessage = 'Searching…';\n\n /** Message shown before the user types in async mode. */\n @property({ attribute: 'start-typing-message' })\n startTypingMessage = 'Start typing to search…';\n\n /** Remote search handler — `(query, signal) => Promise<options>`. */\n @property({ attribute: false })\n fetchOptions: PkComboboxFetchHandler | null = null;\n\n private readonly hasSlotController = new HasSlotController(this, 'start', 'end');\n\n private readonly listboxId = uniqueId('pk-combobox-listbox');\n private readonly inputId = uniqueId('pk-combobox-input');\n private readonly createOptionId = uniqueId('pk-combobox-create');\n\n @query('pk-popup')\n private popupElement!: PkPopup;\n\n @query('.control')\n private controlElement!: HTMLElement;\n\n @query('.control-input')\n private controlInput?: HTMLInputElement;\n\n @query('.popup-trigger')\n private popupTrigger?: HTMLButtonElement;\n\n @query('.create-option')\n private createOptionElement?: HTMLButtonElement;\n\n @query('.value-input')\n override input!: HTMLInputElement;\n\n private get panelElement(): HTMLDivElement | null {\n return this.popupElement?.getContentElement() as HTMLDivElement | null ?? null;\n }\n\n private get panelInput(): HTMLInputElement | undefined {\n return this.panelElement?.querySelector('.panel-input') as HTMLInputElement | undefined;\n }\n\n private get panelBodyElement(): HTMLDivElement | undefined {\n return this.panelElement?.querySelector('.panel-body') as HTMLDivElement | undefined;\n }\n\n private get usesPopupMode(): boolean {\n return this.popupMode && !this.multiple;\n }\n\n private get activeInput(): HTMLInputElement | undefined {\n return this.usesPopupMode ? this.panelInput : this.controlInput;\n }\n\n /** Combobox keeps focus on the text field and uses `aria-activedescendant` for highlight. */\n private keepsFocusOnInput(): boolean {\n return Boolean(this.activeInput);\n }\n\n private maintainInputFocus(): void {\n this.activeInput?.focus({ preventScroll: true });\n }\n\n private get listScrollContainer(): HTMLElement {\n return this.panelBodyElement ?? this.panelElement ?? this;\n }\n\n private options: PkOption[] = [];\n\n /** Filter text while the listbox is open — separate from `value`. */\n @state()\n private inputValue = '';\n\n /** True once the user edits the input after the current open cycle (open-cycle edit tracking). */\n private hasInputSinceOpening = false;\n\n @state()\n private highlightedIndex = -1;\n\n @state()\n private createOptionHighlighted = false;\n\n @state()\n private closing = false;\n\n @state()\n private panelAnimated = false;\n\n private dismissRegistered = false;\n private panelEventTarget: HTMLElement | null = null;\n private optionsObserver?: MutationObserver;\n private liveRegion?: LiveRegion;\n private selectedOptionMeta: PkComboboxAsyncOption | null = null;\n private asyncFetcher: AsyncOptionFetcher | null = null;\n\n @state()\n private asyncLoading = false;\n\n @state()\n private asyncError: string | null = null;\n\n override connectedCallback(): void {\n this.instructions = this.getAttribute('hint') ?? this.instructions;\n this.refreshOptions();\n super.connectedCallback();\n this.syncHasValueAttribute();\n this.addEventListener('pk-listbox-keydown', this.handleListboxKeyDownEvent as EventListener);\n this.optionsObserver = new MutationObserver(() => {\n this.handleOptionsMutation({ render: true });\n });\n this.optionsObserver.observe(this, { childList: true, subtree: true });\n }\n\n override disconnectedCallback(): void {\n this.unbindPanelEvents();\n this.removeEventListener('pk-listbox-keydown', this.handleListboxKeyDownEvent as EventListener);\n this.optionsObserver?.disconnect();\n this.liveRegion?.destroy();\n this.liveRegion = undefined;\n this.asyncFetcher?.cancel();\n void this.closePanel('api');\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('value') || changed.has('values') || changed.has('multiple')) {\n this.syncHasValueAttribute();\n this.syncSelectedOptionMeta();\n this.applySelection();\n }\n\n super.updated(changed);\n }\n\n protected override get validationTarget(): HTMLElement | undefined {\n return this.activeInput ?? this.popupTrigger ?? this.controlElement;\n }\n\n protected override getAriaMirrorTarget(): HTMLElement | null {\n return this.activeInput ?? this.popupTrigger ?? this.controlElement ?? null;\n }\n\n protected override syncFormValue(): void {\n if (!this.name) {\n this.setFormValue(null);\n return;\n }\n\n if (this.multiple) {\n const formData = new FormData();\n\n for (const item of this.values) {\n formData.append(this.name, item);\n }\n\n this.setFormValue(formData);\n return;\n }\n\n this.setFormValue(this.value || '');\n }\n\n protected override resetToDefaultValue(): void {\n if (this.multiple) {\n this.values = [...this.defaultValues];\n } else {\n this.value = this.defaultValue;\n }\n\n this.inputValue = '';\n this.applySelection();\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (state instanceof FormData && this.name) {\n this.values = state.getAll(this.name).map(String);\n return;\n }\n\n if (typeof state === 'string') {\n this.value = state;\n }\n }\n\n private syncHasValueAttribute(): void {\n this.toggleAttribute('data-has-value', this.hasSelection());\n }\n\n private getOptionElements(): PkOption[] {\n const portaled = this.popupElement?.getContentElement()?.querySelectorAll('pk-option');\n\n if (portaled && portaled.length > 0) {\n return [...portaled];\n }\n\n return [...this.querySelectorAll('pk-option')];\n }\n\n private handleOptionsMutation = (options: { render?: boolean } = {}): void => {\n const next = this.getOptionElements();\n const changed = next.length !== this.options.length\n || next.some((option, index) => option !== this.options[index]);\n\n this.options = next;\n this.applySelection();\n\n if (options.render !== false && changed) {\n this.requestUpdate();\n }\n };\n\n private refreshOptions(): void {\n this.handleOptionsMutation({ render: false });\n }\n\n private syncOptions = (): void => {\n this.handleOptionsMutation({ render: true });\n };\n\n /** Portaled listbox options are outside the host tree — listen on the panel instead. */\n private bindPanelEvents(): void {\n const panel = this.panelElement;\n\n if (!panel || panel === this.panelEventTarget) {\n return;\n }\n\n this.unbindPanelEvents();\n this.panelEventTarget = panel;\n panel.addEventListener('pk-option-select', this.handleOptionSelect as EventListener);\n panel.addEventListener('pk-option-highlight', this.handleOptionHighlight as EventListener);\n panel.addEventListener('pk-listbox-keydown', this.handleListboxKeyDownEvent as EventListener);\n }\n\n private unbindPanelEvents(): void {\n if (!this.panelEventTarget) {\n return;\n }\n\n this.panelEventTarget.removeEventListener('pk-option-select', this.handleOptionSelect as EventListener);\n this.panelEventTarget.removeEventListener('pk-option-highlight', this.handleOptionHighlight as EventListener);\n this.panelEventTarget.removeEventListener('pk-listbox-keydown', this.handleListboxKeyDownEvent as EventListener);\n this.panelEventTarget = null;\n }\n\n private isOptionInHiddenGroup(option: PkOption): boolean {\n const group = option.closest('pk-option-group') as PkOptionGroup | null;\n\n return Boolean(group?.hidden);\n }\n\n private matchesFilter(option: PkOption, query: string): boolean {\n return matchesOptionFilter(option, query, this.filter);\n }\n\n private getFilterQuery(): string {\n if (!this.open) {\n return '';\n }\n\n if (!this.multiple && !this.hasInputSinceOpening && !this.usesPopupMode) {\n return '';\n }\n\n return this.inputValue.trim().toLowerCase();\n }\n\n private getVisibleOptions(): PkOption[] {\n if (this.usesAsyncSearch) {\n return this.options.filter((option) => !this.isOptionInHiddenGroup(option));\n }\n\n const filter = this.getFilterQuery();\n\n return this.options.filter((option) => {\n if (this.isOptionInHiddenGroup(option)) {\n return false;\n }\n\n if (!filter) {\n return true;\n }\n\n return this.matchesFilter(option, filter);\n });\n }\n\n private getEnabledVisibleOptions(): PkOption[] {\n return this.getVisibleOptions().filter((option) => !option.disabled);\n }\n\n private getSelectedOptions(): PkOption[] {\n if (this.multiple) {\n const optionsByValue = new Map(this.options.map((option) => [option.value, option]));\n\n return this.values\n .map((value) => optionsByValue.get(value))\n .filter((option): option is PkOption => option !== undefined);\n }\n\n const selected = this.options.find((option) => option.value === this.value);\n\n return selected ? [selected] : [];\n }\n\n private getSelectedOption(): PkOption | undefined {\n return this.options.find((option) => option.value === this.value);\n }\n\n private get usesAsyncSearch(): boolean {\n return this.async && Boolean(this.fetchOptions) && !this.multiple && !this.usesPopupMode;\n }\n\n private getSelectedLabel(): string {\n return this.getSelectedOption()?.getLabel()\n ?? this.selectedOptionMeta?.label\n ?? this.value;\n }\n\n private clearAsyncOptionNodes(): void {\n this.querySelectorAll(':scope > pk-option, :scope > pk-option-group, :scope > pk-separator')\n .forEach((node) => node.remove());\n }\n\n private renderAsyncOptionNodes(items: PkComboboxAsyncOption[]): void {\n const merged = this.mergeAsyncItems(items);\n this.clearAsyncOptionNodes();\n\n for (const item of merged) {\n const option = document.createElement('pk-option');\n option.value = item.value;\n option.textContent = item.label;\n this.append(option);\n }\n\n this.handleOptionsMutation({ render: true });\n }\n\n private mergeAsyncItems(items: PkComboboxAsyncOption[]): PkComboboxAsyncOption[] {\n if (!this.value) {\n return items;\n }\n\n const selected = this.selectedOptionMeta\n ?? { value: this.value, label: this.getSelectedOption()?.getLabel() ?? this.value };\n\n if (items.some((item) => item.value === selected.value)) {\n return items;\n }\n\n return [...items, selected];\n }\n\n private syncSelectedOptionMeta(): void {\n if (!this.value) {\n this.selectedOptionMeta = null;\n return;\n }\n\n const selected = this.getSelectedOption();\n\n if (selected) {\n this.selectedOptionMeta = {\n value: selected.value,\n label: selected.getLabel(),\n };\n }\n }\n\n private scheduleAsyncFetch(query: string): void {\n this.ensureAsyncFetcher().schedule(query);\n }\n\n private ensureAsyncFetcher(): AsyncOptionFetcher {\n if (!this.asyncFetcher) {\n this.asyncFetcher = new AsyncOptionFetcher(\n () => this.fetchOptions,\n {\n errorLabel: 'combobox options',\n onLoading: () => {\n this.asyncLoading = true;\n this.asyncError = null;\n },\n onResults: (results) => {\n this.renderAsyncOptionNodes(results);\n },\n onError: (message) => {\n this.asyncError = message;\n },\n onSettled: () => {\n this.asyncLoading = false;\n },\n onEmptyQuery: () => {\n this.asyncLoading = false;\n this.asyncError = null;\n this.renderAsyncOptionNodes(\n this.value && this.selectedOptionMeta ? [this.selectedOptionMeta] : [],\n );\n },\n },\n );\n }\n\n return this.asyncFetcher;\n }\n\n private getAsyncStatusMessage(): string | null {\n if (!this.usesAsyncSearch || !this.open) {\n return null;\n }\n\n if (this.asyncLoading) {\n return this.loadingMessage;\n }\n\n if (this.asyncError) {\n return this.asyncError;\n }\n\n const query = this.inputValue.trim();\n\n if (!query) {\n return this.value ? null : this.startTypingMessage;\n }\n\n if (this.getEnabledVisibleOptions().length === 0 && !this.shouldShowCreateOption()) {\n return `No matches for \"${query}\".`;\n }\n\n return null;\n }\n\n private isSelected(value: string): boolean {\n if (this.multiple) {\n return this.values.includes(value);\n }\n\n return this.value === value;\n }\n\n private getDisplayInputValue(): string {\n if (this.usesPopupMode || this.multiple || this.open) {\n return this.inputValue;\n }\n\n // Empty-string values are valid when an option declares them (e.g. \"Default (browser)\").\n return this.hasSelection() ? this.getSelectedLabel() : '';\n }\n\n private getTriggerDisplayValue(): string {\n return this.hasSelection() ? this.getSelectedLabel() : this.placeholder;\n }\n\n private isTriggerPlaceholder(): boolean {\n return !this.hasSelection();\n }\n\n private hasSelection(): boolean {\n if (this.multiple) {\n return this.values.length > 0;\n }\n\n // Match pk-select: a matching option counts even when its value is \"\".\n return Boolean(this.getSelectedOption() || this.selectedOptionMeta || this.value);\n }\n\n private shouldShowCreateOption(): boolean {\n if (!this.allowCreate || !this.open) {\n return false;\n }\n\n if (!this.multiple && !this.hasInputSinceOpening) {\n return false;\n }\n\n const query = this.inputValue.trim();\n\n if (!query) {\n return false;\n }\n\n const normalized = query.toLowerCase();\n\n return !this.options.some((option) => {\n return option.getLabel().toLowerCase() === normalized\n || option.value.toLowerCase() === normalized;\n });\n }\n\n private getListboxNavItems(): HTMLElement[] {\n const enabled = this.getEnabledVisibleOptions() as unknown as HTMLElement[];\n\n if (this.shouldShowCreateOption() && this.createOptionElement) {\n return [...enabled, this.createOptionElement];\n }\n\n return enabled;\n }\n\n private applySelection(): void {\n const visible = this.getVisibleOptions();\n const filterQuery = this.open ? this.getFilterQuery() : '';\n\n // Shared filter visibility / group empty markers — Combobox still owns selection + chips.\n syncFilteredOptions({\n host: this,\n options: this.options,\n visible,\n listboxId: this.listboxId,\n filterQuery,\n isSelected: (value) => this.isSelected(value),\n });\n\n this.syncValueInput();\n\n if (this.open) {\n this.syncHighlight();\n this.announceFilterResults();\n }\n }\n\n private syncValueInput(): void {\n if (!this.input) {\n return;\n }\n\n this.input.value = this.multiple ? this.values.join(',') : this.value;\n this.input.required = this.required;\n }\n\n private syncHighlightedIndexToSelection(): void {\n if (this.multiple) {\n return;\n }\n\n const enabled = this.getEnabledVisibleOptions();\n\n if (!this.value || enabled.length === 0) {\n return;\n }\n\n const selectedIndex = enabled.findIndex((option) => option.value === this.value);\n\n if (selectedIndex >= 0) {\n this.highlightedIndex = selectedIndex;\n }\n }\n\n private resetHighlightedIndexOnOpen(): void {\n if (this.autoHighlight) {\n if (this.value) {\n this.syncHighlightedIndexToSelection();\n return;\n }\n\n this.highlightedIndex = 0;\n return;\n }\n\n this.highlightedIndex = -1;\n }\n\n private syncHighlight(): void {\n const enabled = this.getEnabledVisibleOptions();\n const showCreate = this.shouldShowCreateOption();\n const totalItems = enabled.length + (showCreate ? 1 : 0);\n\n for (const option of this.options) {\n option.highlighted = false;\n option.focusIndex = -1;\n }\n\n this.createOptionHighlighted = false;\n\n if (totalItems === 0 || this.highlightedIndex < 0) {\n return;\n }\n\n if (this.highlightedIndex >= totalItems) {\n this.highlightedIndex = totalItems - 1;\n }\n\n if (showCreate && this.highlightedIndex === enabled.length) {\n this.createOptionHighlighted = true;\n\n if (!this.keepsFocusOnInput()) {\n this.createOptionElement?.focus({ preventScroll: true });\n }\n\n scrollIntoView(this.createOptionElement!, this.listScrollContainer, 'vertical', 'auto');\n\n if (this.keepsFocusOnInput()) {\n this.maintainInputFocus();\n }\n\n return;\n }\n\n const highlighted = enabled[this.highlightedIndex];\n\n if (highlighted) {\n highlighted.highlighted = true;\n highlighted.focusIndex = this.keepsFocusOnInput() ? -1 : 0;\n scrollIntoView(highlighted, this.listScrollContainer, 'vertical', 'auto');\n\n if (this.keepsFocusOnInput()) {\n this.maintainInputFocus();\n }\n }\n }\n\n private getActiveDescendantId(): string | null {\n const enabled = this.getEnabledVisibleOptions();\n\n if (this.shouldShowCreateOption() && this.highlightedIndex === enabled.length) {\n return this.createOptionId;\n }\n\n const highlighted = enabled[this.highlightedIndex];\n return highlighted?.optionId || null;\n }\n\n private announceFilterResults(): void {\n if (!this.liveRegion) {\n this.liveRegion = new LiveRegion('polite');\n }\n\n const count = this.getEnabledVisibleOptions().length;\n const filter = this.getFilterQuery();\n\n if (!filter) {\n return;\n }\n\n if (this.shouldShowCreateOption()) {\n this.liveRegion.announce(`Create ${filter}`);\n return;\n }\n\n this.liveRegion.announce(\n count === 0\n ? `${this.emptyMessage}`\n : `${count} ${count === 1 ? 'result' : 'results'} available`,\n );\n }\n\n private togglePanel = (event?: Event): void => {\n event?.preventDefault();\n event?.stopPropagation();\n\n if (this.disabled) {\n return;\n }\n\n if (this.open || this.closing) {\n void this.closePanel('api');\n } else {\n void this.openPanel();\n }\n };\n\n async show(): Promise<void> {\n if (this.open || this.closing || this.disabled) {\n return;\n }\n\n await this.openPanel();\n }\n\n async hide(source: PkOverlaySource = 'api'): Promise<void> {\n if (!this.open || this.closing) {\n return;\n }\n\n await this.closePanel(source);\n }\n\n private openPanel(): Promise<void> {\n const anchor = this.controlElement;\n\n if (!anchor) {\n return Promise.resolve();\n }\n\n if (this.open) {\n this.activeInput?.focus({ preventScroll: true });\n return Promise.resolve();\n }\n\n if (this.closing) {\n return Promise.resolve();\n }\n\n this.dispatchEvent(new PkShowEvent());\n this.closing = false;\n this.panelAnimated = false;\n this.open = true;\n this.hasInputSinceOpening = false;\n this.inputValue = this.usesPopupMode\n ? ''\n : (!this.multiple && this.hasSelection() ? this.getSelectedLabel() : '');\n this.applySelection();\n this.resetHighlightedIndexOnOpen();\n\n if (this.usesAsyncSearch) {\n this.syncSelectedOptionMeta();\n this.asyncError = null;\n this.asyncLoading = false;\n this.renderAsyncOptionNodes(this.selectedOptionMeta ? [this.selectedOptionMeta] : []);\n }\n\n const anchorWidth = anchor.getBoundingClientRect().width;\n this.style.setProperty('--pk-combobox-anchor-width', `${anchorWidth}px`);\n\n // Activate the popup synchronously (same as pk-select). Relying only on the\n // `.active=${this.open}` binding races waitForPopupReposition's 100ms fallback\n // and leaves popup-mode search focus failing against a still-closed popover.\n this.popupElement.active = true;\n\n if (this.panelElement) {\n this.panelElement.hidden = false;\n syncPopupPlacementAnimation(this.panelElement, this.placement);\n }\n\n this.registerDismissHandlers();\n this.syncHighlight();\n\n if (this.usesPopupMode) {\n this.popupTrigger?.blur();\n } else {\n // Input mode keeps the control field focused immediately; popup mode waits\n // until the panel is positioned so focus isn't dropped on a hidden popover.\n this.activeInput?.focus({ preventScroll: true });\n }\n\n return this.updateComplete.then(async () => {\n // requireEvent: true — same as pk-dropdown-menu. A leftover\n // data-current-placement from the previous open would resolve immediately\n // while .popup is still :not(.positioned) (visibility:hidden), so focus fails.\n const placement = await waitForPopupReposition(this.popupElement, this.placement, 300, {\n requireEvent: true,\n });\n\n if (this.panelElement) {\n syncPopupPlacementAnimation(this.panelElement, placement);\n }\n\n this.panelAnimated = true;\n this.bindPanelEvents();\n this.refreshOptions();\n\n this.activeInput?.focus({ preventScroll: true });\n\n if (this.highlightedIndex >= 0 && !this.keepsFocusOnInput()) {\n const enabled = this.getEnabledVisibleOptions();\n const index = this.highlightedIndex;\n\n if (this.shouldShowCreateOption() && index === enabled.length) {\n this.createOptionElement?.focus({ preventScroll: true });\n } else {\n enabled[index]?.focusControl();\n }\n }\n\n this.dispatchEvent(new PkAfterShowEvent());\n this.dispatchEvent(new CustomEvent('pk-open-change', {\n detail: { open: true },\n bubbles: true,\n composed: true,\n }));\n });\n }\n\n private commitCustomValueIfAllowed(): boolean {\n if (this.multiple || !this.allowCustomValue) {\n return false;\n }\n\n const query = this.inputValue.trim();\n\n if (!query) {\n return false;\n }\n\n const exactMatch = this.options.find((option) => {\n return option.getLabel().toLowerCase() === query.toLowerCase()\n || option.value.toLowerCase() === query.toLowerCase();\n });\n\n const nextValue = exactMatch?.value ?? query;\n\n if (this.value === nextValue) {\n return false;\n }\n\n this.value = nextValue;\n return true;\n }\n\n private commitInputOnClose(source: PkOverlaySource): boolean {\n if (this.multiple || this.usesPopupMode) {\n return false;\n }\n\n if (!this.hasInputSinceOpening) {\n if (this.shouldCommitCustomValueOnClose(source)) {\n return this.commitCustomValueIfAllowed();\n }\n\n return false;\n }\n\n const query = this.inputValue.trim();\n\n if (!query) {\n if (!this.value) {\n return false;\n }\n\n this.value = '';\n return true;\n }\n\n if (this.shouldCommitCustomValueOnClose(source)) {\n return this.commitCustomValueIfAllowed();\n }\n\n return false;\n }\n\n private shouldCommitCustomValueOnClose(source: PkOverlaySource): boolean {\n return source === 'light-dismiss' || source === 'pointer-dismiss';\n }\n\n private async closePanel(source: PkOverlaySource = 'unknown'): Promise<void> {\n if (!this.open || this.closing) {\n return;\n }\n\n const hideEvent = new PkHideEvent(source);\n\n if (!this.dispatchEvent(hideEvent)) {\n return;\n }\n\n const valueChanged = this.commitInputOnClose(source);\n\n this.unbindPanelEvents();\n this.closing = true;\n this.panelAnimated = false;\n await waitForPopupContentExitAnimation(this.panelElement);\n\n this.open = false;\n this.closing = false;\n this.panelAnimated = false;\n this.hasInputSinceOpening = false;\n this.inputValue = '';\n\n if (this.panelElement) {\n this.panelElement.hidden = true;\n this.panelElement.removeAttribute('data-side');\n }\n\n this.popupElement.active = false;\n\n this.unregisterDismissHandlers();\n this.applySelection();\n\n if (this.usesAsyncSearch) {\n this.asyncFetcher?.cancel();\n this.asyncLoading = false;\n this.asyncError = null;\n this.renderAsyncOptionNodes(this.selectedOptionMeta ? [this.selectedOptionMeta] : []);\n }\n\n if (valueChanged) {\n this.syncHasValueAttribute();\n this.emitValueChange();\n }\n\n if (this.shouldReturnFocusToInput(source)) {\n if (this.usesPopupMode) {\n this.popupTrigger?.focus({ preventScroll: true });\n } else {\n this.activeInput?.focus({ preventScroll: true });\n }\n } else {\n this.activeInput?.blur();\n this.popupTrigger?.blur();\n }\n\n this.dispatchEvent(new PkAfterHideEvent());\n this.dispatchEvent(new CustomEvent('pk-open-change', {\n detail: { open: false },\n bubbles: true,\n composed: true,\n }));\n }\n\n private shouldReturnFocusToInput(source: PkOverlaySource): boolean {\n return source !== 'light-dismiss' && source !== 'pointer-dismiss';\n }\n\n private registerDismissHandlers(): void {\n registerDismissible(this);\n this.dismissRegistered = true;\n document.addEventListener('pointerdown', this.onDocumentPointerDown, true);\n document.addEventListener('keydown', this.onDocumentKeyDown, true);\n }\n\n private unregisterDismissHandlers(): void {\n if (this.dismissRegistered) {\n unregisterDismissible(this);\n this.dismissRegistered = false;\n }\n\n document.removeEventListener('pointerdown', this.onDocumentPointerDown, true);\n document.removeEventListener('keydown', this.onDocumentKeyDown, true);\n }\n\n private isPointerInside(event: PointerEvent): boolean {\n // Anchor + panel only — do not treat empty host padding (min-width > control) as inside.\n return isPointerInsideOverlay(event, {\n anchor: this.controlElement,\n panel: this.panelElement,\n });\n }\n\n private onDocumentPointerDown = (event: PointerEvent): void => {\n if (this.isPointerInside(event)) {\n return;\n }\n\n void this.closePanel('light-dismiss');\n };\n\n private onDocumentKeyDown = (event: KeyboardEvent): void => {\n if (!this.open) {\n return;\n }\n\n if (event.key === 'Escape') {\n if (!isTopDismissible(this)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n void this.closePanel('escape');\n return;\n }\n\n // Popup-mode search lives inside the panel. Capture-phase document handlers\n // must not steal typing / Space from it — `handleInputKeyDown` already\n // forwards Arrow/Enter to the listbox while keeping the filter editable.\n const panelInput = this.panelInput;\n\n if (panelInput && event.composedPath().includes(panelInput)) {\n return;\n }\n\n const isListboxKey = LISTBOX_NAVIGATION_KEYS.has(event.key) || isListboxTypeToSelectKey(event);\n\n if (!isListboxKey) {\n return;\n }\n\n const panel = this.panelElement;\n const path = event.composedPath();\n const focusInPortaledPanel = Boolean(panel && path.includes(panel));\n\n if (!focusInPortaledPanel) {\n return;\n }\n\n if (!isEventInsideOverlay(event, {\n anchor: this.controlElement,\n panel,\n })) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.onListboxKeyDown(event);\n };\n\n private handleOptionSelect = (event: CustomEvent<{ value: string }>): void => {\n const { value } = event.detail;\n\n if (this.multiple) {\n this.values = this.values.includes(value)\n ? this.values.filter((item) => item !== value)\n : [...this.values, value];\n this.inputValue = '';\n this.applySelection();\n this.emitValueChange();\n this.activeInput?.focus({ preventScroll: true });\n return;\n }\n\n this.value = value;\n this.syncSelectedOptionMeta();\n this.applySelection();\n void this.closePanel('api');\n this.emitValueChange();\n };\n\n private handleCreateOption(): void {\n const query = this.inputValue.trim();\n\n if (!query) {\n return;\n }\n\n const createEvent = new PkCreateEvent(query);\n\n if (!this.dispatchEvent(createEvent)) {\n return;\n }\n\n const option = document.createElement('pk-option');\n option.value = query;\n option.textContent = query;\n this.append(option);\n\n if (this.multiple) {\n if (!this.values.includes(query)) {\n this.values = [...this.values, query];\n }\n\n this.inputValue = '';\n this.applySelection();\n this.emitValueChange();\n this.activeInput?.focus({ preventScroll: true });\n return;\n }\n\n this.value = query;\n this.applySelection();\n void this.closePanel('api');\n this.emitValueChange();\n };\n\n private handleOptionHighlight = (event: CustomEvent<{ value: string }>): void => {\n if (!this.open) {\n return;\n }\n\n const enabled = this.getEnabledVisibleOptions();\n const index = enabled.findIndex((option) => option.value === event.detail.value);\n\n if (index === -1 || index === this.highlightedIndex) {\n return;\n }\n\n this.highlightedIndex = index;\n this.syncHighlight();\n };\n\n private removeTag(value: string, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.values = this.values.filter((item) => item !== value);\n this.applySelection();\n this.emitValueChange();\n this.activeInput?.focus({ preventScroll: true });\n }\n\n private handleClear(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.multiple) {\n this.values = [];\n } else {\n this.value = '';\n }\n\n this.inputValue = '';\n this.selectedOptionMeta = null;\n\n if (this.usesAsyncSearch) {\n this.renderAsyncOptionNodes([]);\n }\n\n this.applySelection();\n this.dispatchEvent(new PkClearEvent());\n this.emitValueChange();\n this.activeInput?.focus();\n }\n\n private emitValueChange(): void {\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: {\n value: this.multiple ? [...this.values] : this.value,\n },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleInput(event: Event): void {\n this.hasInputSinceOpening = true;\n this.inputValue = (event.target as HTMLInputElement).value;\n this.highlightedIndex = this.autoHighlight ? 0 : -1;\n this.applySelection();\n\n if (this.usesAsyncSearch) {\n this.asyncError = null;\n this.scheduleAsyncFetch(this.inputValue.trim());\n }\n\n if (!this.open) {\n void this.openPanel();\n }\n }\n\n private handleControlMouseDown = (event: MouseEvent): void => {\n if (this.disabled || this.usesPopupMode) {\n return;\n }\n\n const path = event.composedPath();\n const isInteractiveChild = path.some((node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n return node.classList.contains('icon-button')\n || node.classList.contains('clear-button')\n || node.classList.contains('tag-remove');\n });\n\n if (isInteractiveChild) {\n return;\n }\n\n const isInput = event.target === this.activeInput;\n\n if (!this.open && !this.closing) {\n if (!isInput) {\n event.preventDefault();\n }\n\n this.activeInput?.focus({ preventScroll: true });\n void this.openPanel();\n return;\n }\n\n if (!isInput) {\n event.preventDefault();\n this.activeInput?.focus({ preventScroll: true });\n }\n };\n\n private handleTriggerKeyDown = (event: KeyboardEvent): void => {\n if (this.disabled) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.togglePanel(event);\n return;\n }\n\n if (event.key === 'ArrowDown' && !this.open) {\n event.preventDefault();\n void this.openPanel();\n }\n };\n\n private handleInputKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Backspace' && this.multiple && !this.inputValue && this.values.length > 0) {\n event.preventDefault();\n this.values = this.values.slice(0, -1);\n this.applySelection();\n this.emitValueChange();\n return;\n }\n\n if (event.key === 'Escape' && this.open) {\n event.preventDefault();\n\n if (this.hasInputSinceOpening && this.inputValue) {\n this.hasInputSinceOpening = false;\n this.inputValue = this.usesPopupMode\n ? ''\n : (!this.multiple && this.hasSelection() ? this.getSelectedLabel() : '');\n this.highlightedIndex = this.autoHighlight ? 0 : -1;\n this.applySelection();\n return;\n }\n\n void this.closePanel('escape');\n return;\n }\n\n if (event.key === 'ArrowDown' && !this.open) {\n event.preventDefault();\n void this.openPanel();\n return;\n }\n\n if (event.key === 'Tab' && this.open) {\n let committed = false;\n\n if (!this.multiple) {\n committed = this.commitCustomValueIfAllowed();\n }\n\n void this.closePanel('api');\n\n if (committed) {\n this.syncHasValueAttribute();\n this.emitValueChange();\n }\n\n return;\n }\n\n if (this.open && event.key === 'Enter' && !this.multiple) {\n const enabled = this.getEnabledVisibleOptions();\n\n if (enabled.length === 0 && this.allowCustomValue && this.inputValue.trim() && !this.shouldShowCreateOption()) {\n event.preventDefault();\n const committed = this.commitCustomValueIfAllowed();\n void this.closePanel('api');\n\n if (committed) {\n this.syncHasValueAttribute();\n this.emitValueChange();\n }\n\n return;\n }\n }\n\n if (!this.open) {\n return;\n }\n\n this.onListboxKeyDown(event);\n }\n\n private handleListboxKeyDownEvent = (event: CustomEvent<{ keyboardEvent: KeyboardEvent }>): void => {\n if (!this.open) {\n return;\n }\n\n this.onListboxKeyDown(event.detail.keyboardEvent);\n };\n\n private onListboxKeyDown(event: KeyboardEvent): void {\n const navItems = this.getListboxNavItems();\n const enabled = this.getEnabledVisibleOptions();\n\n if (this.highlightedIndex < 0) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n if (enabled.length > 0 || this.shouldShowCreateOption()) {\n event.preventDefault();\n this.highlightedIndex = 0;\n this.syncHighlight();\n }\n\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n if (enabled.length > 0 || this.shouldShowCreateOption()) {\n event.preventDefault();\n this.highlightedIndex = this.shouldShowCreateOption()\n ? enabled.length\n : Math.max(enabled.length - 1, 0);\n this.syncHighlight();\n }\n\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n return;\n }\n }\n\n if (event.key === 'Enter' && this.shouldShowCreateOption() && this.highlightedIndex === enabled.length) {\n event.preventDefault();\n this.handleCreateOption();\n return;\n }\n\n if (this.multiple && (event.key === 'Enter' || event.key === ' ')) {\n const option = enabled[this.highlightedIndex];\n\n if (option) {\n event.preventDefault();\n option.dispatchEvent(new CustomEvent('pk-option-select', {\n detail: { value: option.value },\n bubbles: true,\n composed: true,\n }));\n }\n\n return;\n }\n\n this.highlightedIndex = handleListboxKeyDown(event, {\n items: navItems,\n currentIndex: this.highlightedIndex,\n multiselect: this.multiple,\n loop: this.loopFocus,\n onSelect: (index) => {\n this.highlightedIndex = index;\n this.syncHighlight();\n },\n focusItem: (index) => {\n if (this.keepsFocusOnInput()) {\n return;\n }\n\n if (this.shouldShowCreateOption() && index === enabled.length) {\n this.createOptionElement?.focus({ preventScroll: true });\n return;\n }\n\n enabled[index]?.focusControl();\n },\n onClose: () => { void this.closePanel('escape'); },\n });\n }\n\n private handleCreateMouseEnter = (): void => {\n if (!this.open) {\n return;\n }\n\n const enabled = this.getEnabledVisibleOptions();\n this.highlightedIndex = enabled.length;\n this.syncHighlight();\n };\n\n private handleCreateKeyDown = (event: KeyboardEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n this.onListboxKeyDown(event);\n };\n\n private renderHostDecorationSlot(name: 'start' | 'end') {\n if (!this.hasSlotController.test(name)) {\n return html`<slot name=${name} hidden></slot>`;\n }\n\n const className = name === 'start' ? 'control-start' : 'control-end';\n\n return html`\n <span part=${name} class=${className}>\n <slot name=${name}></slot>\n </span>\n `;\n }\n\n private renderChevronButton() {\n return html`\n <button\n type=\"button\"\n class=\"icon-button expand-button\"\n part=\"expand-button\"\n aria-label=\"Toggle options\"\n ?disabled=${this.disabled}\n @click=${this.togglePanel}\n >\n <span class=\"icon\" aria-hidden=\"true\">${unsafeSVG(CHEVRON_ICON)}</span>\n </button>\n `;\n }\n\n private renderTags() {\n return this.getSelectedOptions().map((option) => html`\n <span class=\"tag\" part=\"tag\">\n <span class=\"tag-label\">${option.getLabel()}</span>\n <button\n type=\"button\"\n class=\"tag-remove\"\n part=\"tag-remove\"\n aria-label=${`Remove ${option.getLabel()}`}\n ?disabled=${this.disabled}\n @click=${(event: Event) => this.removeTag(option.value, event)}\n >\n <span class=\"tag-remove-icon\" aria-hidden=\"true\">${unsafeSVG(XMARK_ICON)}</span>\n </button>\n </span>\n `);\n }\n\n private shouldShowPlaceholder(): boolean {\n if (this.inputValue.trim()) {\n return false;\n }\n\n return !this.hasSelection();\n }\n\n private renderInput() {\n const activeDescendant = this.open ? this.getActiveDescendantId() : null;\n const showPlaceholder = this.shouldShowPlaceholder();\n\n return html`\n <input\n part=\"input\"\n class=${classMap({\n 'combobox-input': true,\n 'control-input': true,\n 'combobox-input--inline': this.multiple,\n })}\n type=\"text\"\n role=\"combobox\"\n id=${this.inputId}\n .value=${this.getDisplayInputValue()}\n placeholder=${showPlaceholder ? this.placeholder : nothing}\n ?disabled=${this.disabled}\n aria-label=${this.ariaLabel ?? nothing}\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-controls=${this.listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant=${activeDescendant ?? nothing}\n @input=${this.handleInput}\n @keydown=${this.handleInputKeyDown}\n />\n `;\n }\n\n private renderPanelInput() {\n const activeDescendant = this.open ? this.getActiveDescendantId() : null;\n\n return html`\n <div part=\"panel-search\" class=\"panel-search\">\n <input\n part=\"panel-input\"\n class=\"combobox-input panel-input\"\n type=\"text\"\n role=\"combobox\"\n id=${this.inputId}\n .value=${this.inputValue}\n placeholder=${this.searchPlaceholder}\n ?disabled=${this.disabled}\n aria-label=${this.ariaLabel ?? this.searchPlaceholder}\n aria-expanded=\"true\"\n aria-controls=${this.listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant=${activeDescendant ?? nothing}\n @input=${this.handleInput}\n @keydown=${this.handleInputKeyDown}\n />\n </div>\n `;\n }\n\n private renderPopupTrigger() {\n return html`\n <button\n type=\"button\"\n part=\"trigger\"\n class=\"popup-trigger\"\n ?disabled=${this.disabled}\n aria-label=${this.ariaLabel ?? nothing}\n aria-haspopup=\"listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-controls=${this.listboxId}\n @click=${this.togglePanel}\n @keydown=${this.handleTriggerKeyDown}\n >\n <span\n class=${classMap({\n 'popup-trigger-value': true,\n 'is-placeholder': this.isTriggerPlaceholder(),\n })}\n >\n ${this.getTriggerDisplayValue()}\n </span>\n <span class=\"icon popup-trigger-icon\" aria-hidden=\"true\">${unsafeSVG(CHEVRON_ICON)}</span>\n </button>\n `;\n }\n\n private renderControlContent() {\n if (this.usesPopupMode) {\n return this.renderPopupTrigger();\n }\n\n const showClear = (this.clearable || this.withClear) && this.hasSelection() && !this.disabled;\n\n if (this.multiple) {\n return html`\n ${this.renderHostDecorationSlot('start')}\n <div class=\"chips\" part=\"tags\">\n ${this.renderTags()}\n ${this.renderInput()}\n </div>\n ${this.renderHostDecorationSlot('end')}\n ${showClear\n ? html`\n <button\n type=\"button\"\n class=\"clear-button\"\n part=\"clear-button\"\n aria-label=\"Clear selection\"\n ?disabled=${this.disabled}\n @click=${this.handleClear}\n >\n <span class=\"clear-button-icon\" aria-hidden=\"true\">${unsafeSVG(XMARK_ICON)}</span>\n </button>\n `\n : nothing}\n `;\n }\n\n return html`\n ${this.renderHostDecorationSlot('start')}\n ${this.renderInput()}\n ${this.renderHostDecorationSlot('end')}\n ${showClear\n ? html`\n <button\n type=\"button\"\n class=\"clear-button\"\n part=\"clear-button\"\n aria-label=\"Clear selection\"\n ?disabled=${this.disabled}\n @click=${this.handleClear}\n >\n <span class=\"clear-button-icon\" aria-hidden=\"true\">${unsafeSVG(XMARK_ICON)}</span>\n </button>\n `\n : nothing}\n ${this.renderChevronButton()}\n `;\n }\n\n override render() {\n const visibleOptions = this.getEnabledVisibleOptions();\n const showCreate = this.shouldShowCreateOption();\n // Async empty / loading / errors use `async-status` only — avoid stacking\n // `emptyMessage` under “No matches…”.\n const showEmpty = this.open && !this.usesAsyncSearch && visibleOptions.length === 0 && !showCreate;\n const asyncStatus = this.getAsyncStatusMessage();\n const createQuery = this.inputValue.trim();\n\n return html`\n <input\n class=\"value-input\"\n part=\"value-input\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n .value=${this.multiple ? this.values.join(',') : this.value}\n ?required=${this.required}\n @input=${() => this.updateValidity()}\n />\n <div\n part=\"control\"\n class=${classMap({\n control: true,\n 'is-disabled': this.disabled,\n 'control--multiple': this.multiple,\n 'control--popup': this.usesPopupMode,\n })}\n data-popup-open=${this.open ? '' : nothing}\n @mousedown=${this.handleControlMouseDown}\n >\n ${this.renderControlContent()}\n </div>\n <pk-popup\n .active=${this.open || this.closing}\n .anchor=${this.controlElement ?? ''}\n .placement=${this.placement}\n .distance=${this.sideOffset}\n .sync=${'width'}\n flip\n shift\n >\n <div\n part=\"panel\"\n class=${classMap({\n panel: true,\n 'pk-popup-content': true,\n closing: this.closing,\n 'panel--popup': this.usesPopupMode,\n })}\n tabindex=\"-1\"\n ?hidden=${!this.open && !this.closing}\n data-open=${this.panelAnimated && !this.closing ? '' : nothing}\n >\n ${this.usesPopupMode ? this.renderPanelInput() : nothing}\n <div\n part=\"panel-body\"\n class=\"panel-body\"\n id=${this.listboxId}\n role=\"listbox\"\n aria-multiselectable=${this.multiple ? 'true' : 'false'}\n aria-busy=${this.usesAsyncSearch && this.asyncLoading ? 'true' : nothing}\n @slotchange=${this.syncOptions}\n >\n <slot></slot>\n ${asyncStatus\n ? html`\n <div part=\"async-status\" class=\"async-status\" role=\"status\">${asyncStatus}</div>\n `\n : nothing}\n ${showCreate\n ? html`\n <button\n type=\"button\"\n part=\"create-option\"\n class=${classMap({\n 'create-option': true,\n 'is-highlighted': this.createOptionHighlighted,\n })}\n id=${this.createOptionId}\n role=\"option\"\n aria-selected=\"false\"\n tabindex=\"-1\"\n @click=${this.handleCreateOption}\n @mouseenter=${this.handleCreateMouseEnter}\n @keydown=${this.handleCreateKeyDown}\n >\n Create \"${createQuery}\"\n </button>\n `\n : nothing}\n ${showEmpty\n ? html`\n <div part=\"empty\" class=\"empty\">${this.emptyMessage}</div>\n `\n : nothing}\n </div>\n </div>\n </pk-popup>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-combobox': PkCombobox;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pk-connect.styles-
|
|
1
|
+
{"version":3,"file":"pk-connect.styles-BhW406jt.js","names":[],"sources":["../../src/components/connect/pk-connect.styles.ts"],"sourcesContent":["import { css } from 'lit';\n\n/**\n * Connect row layout on the custom-element host (light DOM).\n *\n * Mirrors `styles/connect/pk-connect.css` — document CSS is canonical for CP;\n * keep `:host` rules in sync as a bundled fallback when document CSS is present.\n */\nexport const pkConnectStyles = css`\n @layer pk-component {\n :host {\n display: flex;\n flex-wrap: nowrap;\n align-items: stretch;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n flex: 1 1 100%;\n min-width: 0;\n min-height: 2.75rem;\n }\n\n :host .heading {\n display: flex;\n align-items: center;\n gap: var(--pk-connect-status-gap, 15px);\n margin: 0;\n flex: 1 1 auto;\n min-width: 0;\n line-height: 1.125rem;\n padding-block: 0.75rem;\n padding-inline: var(--pk-connect-heading-padding-inline, var(--m, 1rem) var(--s, 0.75rem));\n color: var(--pk-connect-heading-color, var(--gray-600, #515f6c));\n }\n\n :host .heading:only-child {\n flex: 1 1 100%;\n }\n\n :host .input {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n padding-block: var(--pk-connect-input-padding-block, var(--s, 0.75rem));\n padding-inline: var(--pk-connect-input-padding-inline, 10px var(--m, 1rem));\n }\n\n :host .heading .light {\n color: var(--pk-connect-muted-color, var(--gray-500, #606d7b));\n }\n\n :host .heading pk-status.pk-connect__status-icon {\n display: block;\n flex-shrink: 0;\n width: 0.75rem;\n height: 0.75rem;\n --pk-status-ring: var(--gray-500);\n }\n\n :host .heading .warning.with-icon::before {\n margin-inline-end: 7px;\n }\n }\n`;\n"],"mappings":";;;;;;;;AAQA,IAAa,kBAAkB,GAAG"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { t as icons_exports } from "./icons-BR8JcQj2.js";
|
|
2
|
-
import { n as PkElement, t as __decorate } from "./decorate-
|
|
3
|
-
import "./pk-button-
|
|
2
|
+
import { i as property, n as PkElement, o as state, s as customElement, t as __decorate } from "./decorate-R0X811qp.js";
|
|
3
|
+
import "./pk-button-BrH4u4Qr.js";
|
|
4
4
|
import { n as renderIconHtml } from "./render-Dvc3MHQR.js";
|
|
5
5
|
import { css, html } from "lit";
|
|
6
|
-
import { customElement, property, state } from "lit/decorators.js";
|
|
7
6
|
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
8
7
|
//#region src/events/pk-copy.ts
|
|
9
8
|
/** Emitted when copy-button successfully copies text. */
|
|
@@ -65,6 +64,45 @@ var pkCopyButtonStyles = css`
|
|
|
65
64
|
width: var(--pk-btn-height-default);
|
|
66
65
|
min-width: var(--pk-btn-height-default);
|
|
67
66
|
}
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* In-control trailing action (slot=end on pk-input, etc.): same family as
|
|
70
|
+
* combobox expand/clear and image-browser clear — flex-reserved hit box
|
|
71
|
+
* flush to the field edge, glyph sized via --pk-input-decoration-size.
|
|
72
|
+
*/
|
|
73
|
+
:host([slot='end']) {
|
|
74
|
+
display: inline-flex;
|
|
75
|
+
align-self: stretch;
|
|
76
|
+
height: auto;
|
|
77
|
+
/* size=none buttons resolve --pk-btn-icon-size: 1em against this. */
|
|
78
|
+
font-size: var(--pk-input-decoration-size, 0.75rem);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
:host([slot='end']) pk-button {
|
|
82
|
+
display: flex;
|
|
83
|
+
height: 100%;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:host([slot='end']) pk-button::part(base) {
|
|
87
|
+
box-sizing: border-box;
|
|
88
|
+
width: calc(
|
|
89
|
+
var(--pk-input-decoration-size, 0.75rem) + var(--pk-input-padding-inline, 8px)
|
|
90
|
+
);
|
|
91
|
+
min-width: calc(
|
|
92
|
+
var(--pk-input-decoration-size, 0.75rem) + var(--pk-input-padding-inline, 8px)
|
|
93
|
+
);
|
|
94
|
+
height: 100%;
|
|
95
|
+
min-height: 100%;
|
|
96
|
+
padding: 0;
|
|
97
|
+
border-width: 0;
|
|
98
|
+
border-radius: 0;
|
|
99
|
+
background: transparent;
|
|
100
|
+
color: var(--pk-color-gray-600);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
:host([slot='end']) pk-button::part(base):hover:not(:disabled) {
|
|
104
|
+
color: var(--pk-color-gray-800);
|
|
105
|
+
}
|
|
68
106
|
}
|
|
69
107
|
`;
|
|
70
108
|
//#endregion
|
|
@@ -111,12 +149,14 @@ var PkCopyButton = class PkCopyButton extends PkElement {
|
|
|
111
149
|
}
|
|
112
150
|
}
|
|
113
151
|
render() {
|
|
152
|
+
const inControl = this.getAttribute("slot") === "end";
|
|
114
153
|
return html`
|
|
115
154
|
<pk-button
|
|
116
155
|
part="button"
|
|
117
|
-
variant=${this.variant}
|
|
118
|
-
size
|
|
119
|
-
|
|
156
|
+
variant=${inControl ? "none" : this.variant}
|
|
157
|
+
size=${inControl ? "none" : "default"}
|
|
158
|
+
?icon=${inControl}
|
|
159
|
+
aria-label="Copy"
|
|
120
160
|
?disabled=${this.disabled}
|
|
121
161
|
@click=${this.handleCopy}
|
|
122
162
|
>
|
|
@@ -137,4 +177,4 @@ PkCopyButton = __decorate([customElement("pk-copy-button")], PkCopyButton);
|
|
|
137
177
|
//#endregion
|
|
138
178
|
export { PkCopyEvent as a, PkCopyErrorEvent as i, copyToClipboard as n, resolveCopyValue as r, PkCopyButton as t };
|
|
139
179
|
|
|
140
|
-
//# sourceMappingURL=pk-copy-button-
|
|
180
|
+
//# sourceMappingURL=pk-copy-button-BVaOLtYG.js.map
|