@verbb/plugin-kit-web 2.0.15 → 2.0.17

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.
Files changed (386) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +3 -3
  3. package/custom-elements.json +39781 -0
  4. package/dist/base/pk-form-associated-element.d.ts +17 -1
  5. package/dist/base/pk-form-associated-element.d.ts.map +1 -1
  6. package/dist/chunks/{animate-with-class-ZJeCOKB3.js → animate-with-class-CsDwYnXL.js} +1 -1
  7. package/dist/chunks/{animate-with-class-ZJeCOKB3.js.map → animate-with-class-CsDwYnXL.js.map} +1 -1
  8. package/dist/chunks/{autoloader-DPX9YYZs.js → autoloader-dJO3tYOX.js} +2 -2
  9. package/dist/chunks/{autoloader-DPX9YYZs.js.map → autoloader-dJO3tYOX.js.map} +1 -1
  10. package/dist/chunks/{component-registry-CNB8PbP_.js → component-registry-D34fm8xW.js} +5 -1
  11. package/dist/chunks/component-registry-D34fm8xW.js.map +1 -0
  12. package/dist/chunks/{field-labels-CoU9dnNq.js → field-labels-CmuAW8Cl.js} +1 -1
  13. package/dist/chunks/{field-labels-CoU9dnNq.js.map → field-labels-CmuAW8Cl.js.map} +1 -1
  14. package/dist/chunks/option-filter-BQqr8Z21.js +121 -0
  15. package/dist/chunks/option-filter-BQqr8Z21.js.map +1 -0
  16. package/dist/chunks/pk-autocomplete-IFL-u-RF.js +992 -0
  17. package/dist/chunks/pk-autocomplete-IFL-u-RF.js.map +1 -0
  18. package/dist/chunks/{pk-button-BWGDkuzc.js → pk-button-BrH4u4Qr.js} +8 -4
  19. package/dist/chunks/{pk-button-BWGDkuzc.js.map → pk-button-BrH4u4Qr.js.map} +1 -1
  20. package/dist/chunks/{pk-calendar-enTOUCRD.js → pk-calendar-Z7Y0PjeY.js} +1 -1
  21. package/dist/chunks/{pk-calendar-enTOUCRD.js.map → pk-calendar-Z7Y0PjeY.js.map} +1 -1
  22. package/dist/chunks/{pk-checkbox-CvZwJZn_.js → pk-checkbox-CfV1uDdC.js} +2 -2
  23. package/dist/chunks/{pk-checkbox-CvZwJZn_.js.map → pk-checkbox-CfV1uDdC.js.map} +1 -1
  24. package/dist/chunks/{pk-checkbox-select-DclPoyDM.js → pk-checkbox-select-DeCaI3a0.js} +2 -2
  25. package/dist/chunks/{pk-checkbox-select-DclPoyDM.js.map → pk-checkbox-select-DeCaI3a0.js.map} +1 -1
  26. package/dist/chunks/{pk-code-editor-CrKnJUyi.js → pk-code-editor-BG9sG_Fy.js} +2 -2
  27. package/dist/chunks/{pk-code-editor-CrKnJUyi.js.map → pk-code-editor-BG9sG_Fy.js.map} +1 -1
  28. package/dist/chunks/{pk-color-input-DXdqNCK7.js → pk-color-input-CncNce1C.js} +2 -2
  29. package/dist/chunks/{pk-color-input-DXdqNCK7.js.map → pk-color-input-CncNce1C.js.map} +1 -1
  30. package/dist/chunks/{pk-combobox-BLft8AXy.js → pk-combobox-CL9En0J-.js} +49 -92
  31. package/dist/chunks/pk-combobox-CL9En0J-.js.map +1 -0
  32. package/dist/chunks/{pk-connect.styles-DshgIW2n.js → pk-connect.styles-BhW406jt.js} +1 -1
  33. package/dist/chunks/{pk-connect.styles-DshgIW2n.js.map → pk-connect.styles-BhW406jt.js.map} +1 -1
  34. package/dist/chunks/{pk-copy-button-asOLQkqk.js → pk-copy-button-BVaOLtYG.js} +46 -5
  35. package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +1 -0
  36. package/dist/chunks/{pk-date-picker-Bri3kZ6x.js → pk-date-picker-BEAd4Ngl.js} +6 -6
  37. package/dist/chunks/{pk-date-picker-Bri3kZ6x.js.map → pk-date-picker-BEAd4Ngl.js.map} +1 -1
  38. package/dist/chunks/{pk-dialog-BbEfvb0g.js → pk-dialog-VMQqLW1f.js} +2 -2
  39. package/dist/chunks/{pk-dialog-BbEfvb0g.js.map → pk-dialog-VMQqLW1f.js.map} +1 -1
  40. package/dist/chunks/{pk-dropdown-item-BoZTGWMU.js → pk-dropdown-item-D9OaG5o-.js} +9 -5
  41. package/dist/chunks/pk-dropdown-item-D9OaG5o-.js.map +1 -0
  42. package/dist/chunks/{pk-dropdown-label-Da28F917.js → pk-dropdown-label-CRNWMWQd.js} +1 -1
  43. package/dist/chunks/{pk-dropdown-label-Da28F917.js.map → pk-dropdown-label-CRNWMWQd.js.map} +1 -1
  44. package/dist/chunks/{pk-dropdown-menu-CfZc7dIz.js → pk-dropdown-menu-DW1wI8xQ.js} +6 -4
  45. package/dist/chunks/pk-dropdown-menu-DW1wI8xQ.js.map +1 -0
  46. package/dist/chunks/{pk-editable-table-Cn4WXqAo.js → pk-editable-table-BoqfveXO.js} +17 -19
  47. package/dist/chunks/pk-editable-table-BoqfveXO.js.map +1 -0
  48. package/dist/chunks/{pk-field-NL4KdFZC.js → pk-field-UAlMq6mQ.js} +2 -2
  49. package/dist/chunks/{pk-field-NL4KdFZC.js.map → pk-field-UAlMq6mQ.js.map} +1 -1
  50. package/dist/chunks/{pk-form-associated-element-9M2NzOE2.js → pk-form-associated-element-CCQALRGB.js} +14 -2
  51. package/dist/chunks/pk-form-associated-element-CCQALRGB.js.map +1 -0
  52. package/dist/chunks/pk-image-browser-DwiCFOIG.js +1364 -0
  53. package/dist/chunks/pk-image-browser-DwiCFOIG.js.map +1 -0
  54. package/dist/chunks/{pk-input-DDkIXOkt.js → pk-input-CF_icEtR.js} +76 -30
  55. package/dist/chunks/pk-input-CF_icEtR.js.map +1 -0
  56. package/dist/chunks/{pk-input-group-CRPSBFhX.js → pk-input-group-BLqKPnfc.js} +2 -2
  57. package/dist/chunks/{pk-input-group-CRPSBFhX.js.map → pk-input-group-BLqKPnfc.js.map} +1 -1
  58. package/dist/chunks/{pk-input-group-addon-B0StOmTJ.js → pk-input-group-addon-ClBkGmAw.js} +1 -1
  59. package/dist/chunks/{pk-input-group-addon-B0StOmTJ.js.map → pk-input-group-addon-ClBkGmAw.js.map} +1 -1
  60. package/dist/chunks/{pk-input-group-button-CnKajvsP.js → pk-input-group-button-CHQHsWd4.js} +1 -1
  61. package/dist/chunks/{pk-input-group-button-CnKajvsP.js.map → pk-input-group-button-CHQHsWd4.js.map} +1 -1
  62. package/dist/chunks/{pk-input-group-input-mllffsjQ.js → pk-input-group-input-oNnqMBGU.js} +1 -1
  63. package/dist/chunks/{pk-input-group-input-mllffsjQ.js.map → pk-input-group-input-oNnqMBGU.js.map} +1 -1
  64. package/dist/chunks/{pk-input-group-text-DvaPJvh2.js → pk-input-group-text-HUxlXROB.js} +1 -1
  65. package/dist/chunks/{pk-input-group-text-DvaPJvh2.js.map → pk-input-group-text-HUxlXROB.js.map} +1 -1
  66. package/dist/chunks/{pk-input-group-textarea-CqYv8tUQ.js → pk-input-group-textarea-Cl2FNuw-.js} +1 -1
  67. package/dist/chunks/{pk-input-group-textarea-CqYv8tUQ.js.map → pk-input-group-textarea-Cl2FNuw-.js.map} +1 -1
  68. package/dist/chunks/{pk-lightswitch-DI1BeCmA.js → pk-lightswitch-D1qEFRxK.js} +3 -3
  69. package/dist/chunks/{pk-lightswitch-DI1BeCmA.js.map → pk-lightswitch-D1qEFRxK.js.map} +1 -1
  70. package/dist/chunks/{pk-option-MGj9SKOK.js → pk-option-DQZHV9jL.js} +3 -2
  71. package/dist/chunks/pk-option-DQZHV9jL.js.map +1 -0
  72. package/dist/chunks/{pk-option-group-Cs6N7mlP.js → pk-option-group-CCzJkBFp.js} +1 -1
  73. package/dist/chunks/{pk-option-group-Cs6N7mlP.js.map → pk-option-group-CCzJkBFp.js.map} +1 -1
  74. package/dist/chunks/{pk-popover-duyNosk2.js → pk-popover-D3jkHfwB.js} +4 -4
  75. package/dist/chunks/pk-popover-D3jkHfwB.js.map +1 -0
  76. package/dist/chunks/{pk-popup-B9AgBC2V.js → pk-popup-B65tZMQH.js} +23 -1
  77. package/dist/chunks/pk-popup-B65tZMQH.js.map +1 -0
  78. package/dist/chunks/{pk-radio-BK4D2Htu.js → pk-radio-B5XkMHy3.js} +1 -1
  79. package/dist/chunks/{pk-radio-BK4D2Htu.js.map → pk-radio-B5XkMHy3.js.map} +1 -1
  80. package/dist/chunks/{pk-radio-group-BRJIjOsR.js → pk-radio-group-ByrxGLdX.js} +3 -3
  81. package/dist/chunks/{pk-radio-group-BRJIjOsR.js.map → pk-radio-group-ByrxGLdX.js.map} +1 -1
  82. package/dist/chunks/{pk-scroll-area-BR6ckorh.js → pk-scroll-area-CdfNxYz8.js} +1 -1
  83. package/dist/chunks/{pk-scroll-area-BR6ckorh.js.map → pk-scroll-area-CdfNxYz8.js.map} +1 -1
  84. package/dist/chunks/{pk-select-C1s0OJr0.js → pk-select-CdQdhnZN.js} +7 -5
  85. package/dist/chunks/pk-select-CdQdhnZN.js.map +1 -0
  86. package/dist/chunks/{pk-separator-CHij3vEG.js → pk-separator-N-VyjYE6.js} +1 -1
  87. package/dist/chunks/{pk-separator-CHij3vEG.js.map → pk-separator-N-VyjYE6.js.map} +1 -1
  88. package/dist/chunks/{pk-status-D1IzTSI2.js → pk-status-BehQARDv.js} +1 -1
  89. package/dist/chunks/{pk-status-D1IzTSI2.js.map → pk-status-BehQARDv.js.map} +1 -1
  90. package/dist/chunks/{pk-tab-2MHunhlF.js → pk-tab-CTloD18e.js} +1 -1
  91. package/dist/chunks/{pk-tab-2MHunhlF.js.map → pk-tab-CTloD18e.js.map} +1 -1
  92. package/dist/chunks/{pk-tab-heading-BV6m_sT-.js → pk-tab-heading-Cjcgebxn.js} +1 -1
  93. package/dist/chunks/{pk-tab-heading-BV6m_sT-.js.map → pk-tab-heading-Cjcgebxn.js.map} +1 -1
  94. package/dist/chunks/{pk-tab-panel-C6FxQw9q.js → pk-tab-panel-CkKU5-Ah.js} +1 -1
  95. package/dist/chunks/{pk-tab-panel-C6FxQw9q.js.map → pk-tab-panel-CkKU5-Ah.js.map} +1 -1
  96. package/dist/chunks/{pk-tabs-BTE63uK9.js → pk-tabs-BgEBki1q.js} +1 -1
  97. package/dist/chunks/{pk-tabs-BTE63uK9.js.map → pk-tabs-BgEBki1q.js.map} +1 -1
  98. package/dist/chunks/{pk-textarea-BcAyZYC-.js → pk-textarea-CYM2tK88.js} +3 -3
  99. package/dist/chunks/{pk-textarea-BcAyZYC-.js.map → pk-textarea-CYM2tK88.js.map} +1 -1
  100. package/dist/chunks/{pk-time-picker-5D4nmig2.js → pk-time-picker-CebRqydV.js} +3 -3
  101. package/dist/chunks/{pk-time-picker-5D4nmig2.js.map → pk-time-picker-CebRqydV.js.map} +1 -1
  102. package/dist/chunks/{pk-tiptap-content-BPd4GO6c.js → pk-tiptap-content-CL8smjGi.js} +6 -3
  103. package/dist/chunks/{pk-tiptap-content-BPd4GO6c.js.map → pk-tiptap-content-CL8smjGi.js.map} +1 -1
  104. package/dist/chunks/{pk-tiptap-editor-tG67Vegc.js → pk-tiptap-editor-CTz-yfHL.js} +335 -19
  105. package/dist/chunks/pk-tiptap-editor-CTz-yfHL.js.map +1 -0
  106. package/dist/chunks/{pk-tiptap-input-CtefNnaK.js → pk-tiptap-input-Y9eog9Zn.js} +3 -3
  107. package/dist/chunks/{pk-tiptap-input-CtefNnaK.js.map → pk-tiptap-input-Y9eog9Zn.js.map} +1 -1
  108. package/dist/chunks/{pk-toggle-CW-lflrh.js → pk-toggle-BthhH7vl.js} +1 -1
  109. package/dist/chunks/{pk-toggle-CW-lflrh.js.map → pk-toggle-BthhH7vl.js.map} +1 -1
  110. package/dist/chunks/{pk-toggle-group-BKymefo3.js → pk-toggle-group-D2Quux8D.js} +1 -1
  111. package/dist/chunks/{pk-toggle-group-BKymefo3.js.map → pk-toggle-group-D2Quux8D.js.map} +1 -1
  112. package/dist/chunks/{pk-tooltip-BoDq8YVe.js → pk-tooltip--QBV6puX.js} +2 -2
  113. package/dist/chunks/{pk-tooltip-BoDq8YVe.js.map → pk-tooltip--QBV6puX.js.map} +1 -1
  114. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js → popup-content-animation.styles-BnNiguJo.js} +1 -1
  115. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js.map → popup-content-animation.styles-BnNiguJo.js.map} +1 -1
  116. package/dist/chunks/{popup-pointer-DMnuZDQl.js → popup-pointer-CuLjk1th.js} +1 -1
  117. package/dist/chunks/{popup-pointer-DMnuZDQl.js.map → popup-pointer-CuLjk1th.js.map} +1 -1
  118. package/dist/chunks/{register-CQodpTWT.js → register-aJw-9RWi.js} +46 -46
  119. package/dist/chunks/{register-CQodpTWT.js.map → register-aJw-9RWi.js.map} +1 -1
  120. package/dist/chunks/{register-components-B-qCPFFh.js → register-components-BT9THgdh.js} +1 -1
  121. package/dist/chunks/{register-components-B-qCPFFh.js.map → register-components-BT9THgdh.js.map} +1 -1
  122. package/dist/chunks/{tiptap.styles-ChAfyVi9.js → tiptap.styles-CPRows--.js} +4 -3
  123. package/dist/chunks/tiptap.styles-CPRows--.js.map +1 -0
  124. package/dist/component-registry.d.ts.map +1 -1
  125. package/dist/components/autocomplete/index.d.ts +2 -0
  126. package/dist/components/autocomplete/index.d.ts.map +1 -0
  127. package/dist/components/autocomplete/pk-autocomplete.d.ts +150 -0
  128. package/dist/components/autocomplete/pk-autocomplete.d.ts.map +1 -0
  129. package/dist/components/autocomplete/pk-autocomplete.js +2 -0
  130. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts +7 -0
  131. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts.map +1 -0
  132. package/dist/components/autocomplete.d.ts +2 -0
  133. package/dist/components/autocomplete.js +2 -0
  134. package/dist/components/button/pk-button.d.ts +37 -1
  135. package/dist/components/button/pk-button.d.ts.map +1 -1
  136. package/dist/components/button/pk-button.js +1 -1
  137. package/dist/components/button.js +1 -1
  138. package/dist/components/calendar/pk-calendar.js +1 -1
  139. package/dist/components/calendar.js +1 -1
  140. package/dist/components/checkbox/pk-checkbox.js +1 -1
  141. package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
  142. package/dist/components/checkbox-select.js +1 -1
  143. package/dist/components/checkbox.js +1 -1
  144. package/dist/components/code-editor/pk-code-editor.js +1 -1
  145. package/dist/components/code-editor.js +1 -1
  146. package/dist/components/color-input/pk-color-input.js +1 -1
  147. package/dist/components/color-input.js +1 -1
  148. package/dist/components/combobox/pk-combobox.d.ts +8 -14
  149. package/dist/components/combobox/pk-combobox.d.ts.map +1 -1
  150. package/dist/components/combobox/pk-combobox.js +1 -1
  151. package/dist/components/combobox/pk-combobox.styles.d.ts.map +1 -1
  152. package/dist/components/combobox.js +1 -1
  153. package/dist/components/connect/pk-connect-oauth.d.ts +1 -1
  154. package/dist/components/connect/pk-connect-oauth.js +3 -3
  155. package/dist/components/connect/pk-connect-oauth.js.map +1 -1
  156. package/dist/components/connect/pk-connect.js +4 -4
  157. package/dist/components/copy-button/pk-copy-button.d.ts +3 -0
  158. package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
  159. package/dist/components/copy-button/pk-copy-button.js +1 -1
  160. package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
  161. package/dist/components/copy-button.js +1 -1
  162. package/dist/components/date-picker/pk-date-picker.js +1 -1
  163. package/dist/components/date-picker.js +1 -1
  164. package/dist/components/dialog/pk-dialog.d.ts +1 -1
  165. package/dist/components/dialog/pk-dialog.js +1 -1
  166. package/dist/components/dialog.js +1 -1
  167. package/dist/components/dropdown-menu/pk-dropdown-item.d.ts +3 -1
  168. package/dist/components/dropdown-menu/pk-dropdown-item.d.ts.map +1 -1
  169. package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
  170. package/dist/components/dropdown-menu/pk-dropdown-item.styles.d.ts.map +1 -1
  171. package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
  172. package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
  173. package/dist/components/dropdown-menu/pk-dropdown-menu.styles.d.ts.map +1 -1
  174. package/dist/components/dropdown-menu.js +3 -3
  175. package/dist/components/editable-table/editable-table-model.d.ts +4 -1
  176. package/dist/components/editable-table/editable-table-model.d.ts.map +1 -1
  177. package/dist/components/editable-table/pk-editable-table.d.ts +1 -1
  178. package/dist/components/editable-table/pk-editable-table.d.ts.map +1 -1
  179. package/dist/components/editable-table/pk-editable-table.js +1 -1
  180. package/dist/components/editable-table.js +1 -1
  181. package/dist/components/field/pk-field.js +1 -1
  182. package/dist/components/field.js +1 -1
  183. package/dist/components/icon/pk-icon.d.ts +3 -2
  184. package/dist/components/icon/pk-icon.d.ts.map +1 -1
  185. package/dist/components/icon/pk-icon.js.map +1 -1
  186. package/dist/components/image-browser/index.d.ts +2 -0
  187. package/dist/components/image-browser/index.d.ts.map +1 -0
  188. package/dist/components/image-browser/pk-image-browser.d.ts +190 -0
  189. package/dist/components/image-browser/pk-image-browser.d.ts.map +1 -0
  190. package/dist/components/image-browser/pk-image-browser.js +2 -0
  191. package/dist/components/image-browser/pk-image-browser.styles.d.ts +6 -0
  192. package/dist/components/image-browser/pk-image-browser.styles.d.ts.map +1 -0
  193. package/dist/components/image-browser.d.ts +2 -0
  194. package/dist/components/image-browser.js +2 -0
  195. package/dist/components/input/pk-input.d.ts +3 -2
  196. package/dist/components/input/pk-input.d.ts.map +1 -1
  197. package/dist/components/input/pk-input.js +1 -1
  198. package/dist/components/input/pk-input.styles.d.ts.map +1 -1
  199. package/dist/components/input-group/pk-input-group-addon.js +1 -1
  200. package/dist/components/input-group/pk-input-group-button.js +1 -1
  201. package/dist/components/input-group/pk-input-group-input.js +1 -1
  202. package/dist/components/input-group/pk-input-group-text.js +1 -1
  203. package/dist/components/input-group/pk-input-group-textarea.js +1 -1
  204. package/dist/components/input-group/pk-input-group.d.ts +2 -2
  205. package/dist/components/input-group/pk-input-group.d.ts.map +1 -1
  206. package/dist/components/input-group/pk-input-group.js +1 -1
  207. package/dist/components/input-group.js +6 -6
  208. package/dist/components/input.js +1 -1
  209. package/dist/components/lightswitch/pk-lightswitch.js +1 -1
  210. package/dist/components/lightswitch.js +1 -1
  211. package/dist/components/popover/pk-popover.d.ts +2 -2
  212. package/dist/components/popover/pk-popover.js +1 -1
  213. package/dist/components/popover.js +1 -1
  214. package/dist/components/popup/pk-popup.d.ts +4 -0
  215. package/dist/components/popup/pk-popup.d.ts.map +1 -1
  216. package/dist/components/popup/pk-popup.js +1 -1
  217. package/dist/components/popup.js +1 -1
  218. package/dist/components/radio-group/pk-radio-group.js +1 -1
  219. package/dist/components/radio-group/pk-radio.js +1 -1
  220. package/dist/components/radio-group.js +2 -2
  221. package/dist/components/scroll-area/pk-scroll-area.js +1 -1
  222. package/dist/components/scroll-area.js +1 -1
  223. package/dist/components/select/pk-option-group.d.ts +3 -1
  224. package/dist/components/select/pk-option-group.d.ts.map +1 -1
  225. package/dist/components/select/pk-option-group.js +1 -1
  226. package/dist/components/select/pk-option.d.ts +10 -1
  227. package/dist/components/select/pk-option.d.ts.map +1 -1
  228. package/dist/components/select/pk-option.js +1 -1
  229. package/dist/components/select/pk-select.d.ts +42 -3
  230. package/dist/components/select/pk-select.d.ts.map +1 -1
  231. package/dist/components/select/pk-select.js +1 -1
  232. package/dist/components/select.js +3 -3
  233. package/dist/components/separator/pk-separator.js +1 -1
  234. package/dist/components/separator.js +1 -1
  235. package/dist/components/status/pk-status.js +1 -1
  236. package/dist/components/status.js +1 -1
  237. package/dist/components/tabs/pk-tab-heading.js +1 -1
  238. package/dist/components/tabs/pk-tab-panel.js +1 -1
  239. package/dist/components/tabs/pk-tab.js +1 -1
  240. package/dist/components/tabs/pk-tabs.js +1 -1
  241. package/dist/components/tabs.js +4 -4
  242. package/dist/components/textarea/pk-textarea.js +1 -1
  243. package/dist/components/textarea.js +1 -1
  244. package/dist/components/time-picker/pk-time-picker.js +1 -1
  245. package/dist/components/time-picker.js +1 -1
  246. package/dist/components/tiptap/pk-tiptap-content.d.ts.map +1 -1
  247. package/dist/components/tiptap/pk-tiptap-content.js +1 -1
  248. package/dist/components/tiptap/pk-tiptap-editor.d.ts +11 -1
  249. package/dist/components/tiptap/pk-tiptap-editor.d.ts.map +1 -1
  250. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  251. package/dist/components/tiptap/pk-tiptap-editor.styles.d.ts.map +1 -1
  252. package/dist/components/tiptap/pk-tiptap-input.js +1 -1
  253. package/dist/components/tiptap/tiptap-toolbar.d.ts +1 -0
  254. package/dist/components/tiptap/tiptap-toolbar.d.ts.map +1 -1
  255. package/dist/components/tiptap/variable-tag-node-view.d.ts.map +1 -1
  256. package/dist/components/tiptap-content.js +1 -1
  257. package/dist/components/tiptap-editor.js +1 -1
  258. package/dist/components/tiptap-input.js +1 -1
  259. package/dist/components/toggle/pk-toggle.js +1 -1
  260. package/dist/components/toggle-group/pk-toggle-group.js +1 -1
  261. package/dist/components/toggle-group.js +1 -1
  262. package/dist/components/toggle.js +1 -1
  263. package/dist/components/tooltip/pk-tooltip.js +1 -1
  264. package/dist/components/tooltip.js +1 -1
  265. package/dist/connect/register-cp-connect.js +3 -3
  266. package/dist/index.js +50 -50
  267. package/dist/internal/sync-filtered-options.d.ts +23 -0
  268. package/dist/internal/sync-filtered-options.d.ts.map +1 -0
  269. package/dist/plugin-kit.css +2 -0
  270. package/dist/plugin-kit.js +2 -2
  271. package/dist/register-components.js +1 -1
  272. package/dist/register-pk.generated.d.ts +4 -0
  273. package/dist/register-pk.generated.d.ts.map +1 -1
  274. package/dist/register.js +48 -48
  275. package/dist/utilities/fouce.css +2 -0
  276. package/dist/utils/async-option-fetch.d.ts +38 -0
  277. package/dist/utils/async-option-fetch.d.ts.map +1 -0
  278. package/dist/utils/option-filter.d.ts +11 -0
  279. package/dist/utils/option-filter.d.ts.map +1 -0
  280. package/dist/utils/popup-content-exit.d.ts +6 -0
  281. package/dist/utils/popup-content-exit.d.ts.map +1 -0
  282. package/dist-loader/chunks/option-filter-Bc5aNNT0.js +119 -0
  283. package/dist-loader/chunks/{pk-base-B21zXxSo.js → pk-base-CyzwylQ7.js} +13 -1
  284. package/dist-loader/chunks/{pk-button-Dh4gjLHw.js → pk-button-saBDszJV.js} +10 -6
  285. package/dist-loader/chunks/{pk-calendar-n1bwSO7X.js → pk-calendar-BrF8i3dW.js} +3 -3
  286. package/dist-loader/chunks/{pk-checkbox-BrZQB816.js → pk-checkbox-B3d4nkBx.js} +1 -1
  287. package/dist-loader/chunks/{pk-color-input-sS05YOwT.js → pk-color-input-CD-r_sfG.js} +1 -1
  288. package/dist-loader/chunks/{pk-combobox-B7q6alzE.js → pk-combobox-Cpx0w1KV.js} +49 -92
  289. package/dist-loader/chunks/{pk-date-picker-Dni5ty79.js → pk-date-picker-DEoiTOxN.js} +6 -6
  290. package/dist-loader/chunks/{pk-dialog-BpPRqFMm.js → pk-dialog-C6aaPokv.js} +3 -3
  291. package/dist-loader/chunks/{pk-dropdown-item-CHkFNlA9.js → pk-dropdown-item-D8RrwjxL.js} +10 -6
  292. package/dist-loader/chunks/pk-dropdown-label-Cg32UgRe.js +51 -0
  293. package/dist-loader/chunks/{pk-dropdown-menu-BHVOMNV1.js → pk-dropdown-menu-CAHCltlX.js} +5 -3
  294. package/dist-loader/chunks/{pk-field-CJ09ll1S.js → pk-field-V7JOy26T.js} +4 -4
  295. package/dist-loader/chunks/{pk-icon-WHUu7wxk.js → pk-icon-Bph-EBqp.js} +2 -2
  296. package/dist-loader/chunks/{pk-input-CEw3AdYt.js → pk-input-BhU0PiCk.js} +74 -28
  297. package/dist-loader/chunks/{pk-lightswitch-DJEUScgo.js → pk-lightswitch-m23Cy3_D.js} +1 -1
  298. package/dist-loader/chunks/{pk-option-CunPIei0.js → pk-option-BrDMERSl.js} +5 -4
  299. package/dist-loader/chunks/{pk-popup-FDdBxb4k.js → pk-popup-CrxxR-Hb.js} +24 -2
  300. package/dist-loader/chunks/{pk-select-CbAaQ7uE.js → pk-select-Dok-JdSe.js} +8 -6
  301. package/dist-loader/chunks/{pk-spinner-CIbXjDnp.js → pk-spinner-BKU9Rf2R.js} +1 -1
  302. package/dist-loader/chunks/{pk-status-BRIVW7EH.js → pk-status-D2g_77m_.js} +1 -1
  303. package/dist-loader/chunks/{pk-textarea-C_rOUtFS.js → pk-textarea-CC7rA5A7.js} +1 -1
  304. package/dist-loader/chunks/{pk-time-picker-Dr3uvbvc.js → pk-time-picker-h5Wgd4a_.js} +5 -5
  305. package/dist-loader/chunks/{pk-tooltip-HwZ0zRd2.js → pk-tooltip-Dd_Q0Bn5.js} +2 -2
  306. package/dist-loader/chunks/{render-Niz5wYRa.js → render-Bnzcxfss.js} +1 -1
  307. package/dist-loader/chunks/{svg-_Mtb7CHx.js → svg-Bz-bXZn7.js} +12 -4
  308. package/dist-loader/chunks/{tiptap-Db7MTUH1.js → tiptap-CgXkiK8d.js} +283 -13
  309. package/dist-loader/chunks/{tiptap.styles-BIRIMP7I.js → tiptap.styles-C0E1NpSx.js} +225 -5
  310. package/dist-loader/components/autocomplete/autocomplete.js +984 -0
  311. package/dist-loader/components/button/button.js +1 -1
  312. package/dist-loader/components/button-group/button-group-separator.js +1 -1
  313. package/dist-loader/components/button-group/button-group-text.js +1 -1
  314. package/dist-loader/components/button-group/button-group.js +1 -1
  315. package/dist-loader/components/calendar/calendar.js +1 -1
  316. package/dist-loader/components/checkbox/checkbox.js +1 -1
  317. package/dist-loader/components/checkbox-select/checkbox-select.js +2 -2
  318. package/dist-loader/components/code-editor/code-editor.js +6 -6
  319. package/dist-loader/components/color-input/color-input.js +1 -1
  320. package/dist-loader/components/combobox/combobox.js +1 -1
  321. package/dist-loader/components/connect/connect-oauth.js +4 -4
  322. package/dist-loader/components/connect/connect.js +6 -6
  323. package/dist-loader/components/copy-button/copy-button.js +48 -7
  324. package/dist-loader/components/date-picker/date-picker.js +1 -1
  325. package/dist-loader/components/dialog/dialog.js +1 -1
  326. package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
  327. package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -50
  328. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  329. package/dist-loader/components/dropdown-menu/dropdown-separator.js +1 -1
  330. package/dist-loader/components/editable-table/editable-table.js +18 -20
  331. package/dist-loader/components/field/field.js +1 -1
  332. package/dist-loader/components/icon/icon.js +2 -2
  333. package/dist-loader/components/image-browser/image-browser.js +1356 -0
  334. package/dist-loader/components/input/input.js +1 -1
  335. package/dist-loader/components/input-group/input-group-addon.js +1 -1
  336. package/dist-loader/components/input-group/input-group-button.js +1 -1
  337. package/dist-loader/components/input-group/input-group-input.js +1 -1
  338. package/dist-loader/components/input-group/input-group-text.js +1 -1
  339. package/dist-loader/components/input-group/input-group-textarea.js +1 -1
  340. package/dist-loader/components/input-group/input-group.js +2 -2
  341. package/dist-loader/components/lightswitch/lightswitch.js +1 -1
  342. package/dist-loader/components/popover/popover.js +3 -3
  343. package/dist-loader/components/popup/popup.js +1 -1
  344. package/dist-loader/components/radio-group/radio-group.js +1 -1
  345. package/dist-loader/components/radio-group/radio.js +1 -1
  346. package/dist-loader/components/scroll-area/scroll-area.js +1 -1
  347. package/dist-loader/components/select/option-group.js +1 -1
  348. package/dist-loader/components/select/option.js +1 -1
  349. package/dist-loader/components/select/select.js +1 -1
  350. package/dist-loader/components/separator/separator.js +1 -1
  351. package/dist-loader/components/spinner/spinner.js +1 -1
  352. package/dist-loader/components/status/status.js +1 -1
  353. package/dist-loader/components/tabs/tab-heading.js +1 -1
  354. package/dist-loader/components/tabs/tab-panel.js +1 -1
  355. package/dist-loader/components/tabs/tab.js +1 -1
  356. package/dist-loader/components/tabs/tabs.js +1 -1
  357. package/dist-loader/components/textarea/textarea.js +1 -1
  358. package/dist-loader/components/time-picker/time-picker.js +1 -1
  359. package/dist-loader/components/tiptap/tiptap-content.js +7 -4
  360. package/dist-loader/components/tiptap/tiptap-editor.js +336 -20
  361. package/dist-loader/components/tiptap/tiptap-input.js +3 -3
  362. package/dist-loader/components/toggle/toggle.js +1 -1
  363. package/dist-loader/components/toggle-group/toggle-group.js +1 -1
  364. package/dist-loader/components/tooltip/tooltip.js +1 -1
  365. package/dist-loader/plugin-kit.css +2 -0
  366. package/dist-loader/plugin-kit.loader.js +4 -0
  367. package/dist-loader/utilities/fouce.css +2 -0
  368. package/package.json +57 -10
  369. package/dist/chunks/component-registry-CNB8PbP_.js.map +0 -1
  370. package/dist/chunks/pk-combobox-BLft8AXy.js.map +0 -1
  371. package/dist/chunks/pk-copy-button-asOLQkqk.js.map +0 -1
  372. package/dist/chunks/pk-dropdown-item-BoZTGWMU.js.map +0 -1
  373. package/dist/chunks/pk-dropdown-menu-CfZc7dIz.js.map +0 -1
  374. package/dist/chunks/pk-editable-table-Cn4WXqAo.js.map +0 -1
  375. package/dist/chunks/pk-form-associated-element-9M2NzOE2.js.map +0 -1
  376. package/dist/chunks/pk-input-DDkIXOkt.js.map +0 -1
  377. package/dist/chunks/pk-option-MGj9SKOK.js.map +0 -1
  378. package/dist/chunks/pk-popover-duyNosk2.js.map +0 -1
  379. package/dist/chunks/pk-popup-B9AgBC2V.js.map +0 -1
  380. package/dist/chunks/pk-select-C1s0OJr0.js.map +0 -1
  381. package/dist/chunks/pk-tiptap-editor-tG67Vegc.js.map +0 -1
  382. package/dist/chunks/tiptap.styles-ChAfyVi9.js.map +0 -1
  383. /package/dist-loader/chunks/{floating-ui-DU6GNott.js → floating-ui-Cj0imr6d.js} +0 -0
  384. /package/dist-loader/chunks/{pk-connect.styles-Bfgwu0VH.js → pk-connect.styles-k61snd3X.js} +0 -0
  385. /package/dist-loader/chunks/{popup-pointer-caPc8kwB.js → popup-pointer-Ck28WdVP.js} +0 -0
  386. /package/dist-loader/chunks/{sync-listbox-separators-Dk_E_IVa.js → sync-listbox-separators-Ch5krDUs.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-combobox-CL9En0J-.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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"}
@@ -65,4 +65,4 @@ var pkConnectStyles = css`
65
65
  //#endregion
66
66
  export { pkConnectStyles as t };
67
67
 
68
- //# sourceMappingURL=pk-connect.styles-DshgIW2n.js.map
68
+ //# sourceMappingURL=pk-connect.styles-BhW406jt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pk-connect.styles-DshgIW2n.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
+ {"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,6 +1,6 @@
1
1
  import { t as icons_exports } from "./icons-BR8JcQj2.js";
2
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-BWGDkuzc.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
6
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
@@ -64,6 +64,45 @@ var pkCopyButtonStyles = css`
64
64
  width: var(--pk-btn-height-default);
65
65
  min-width: var(--pk-btn-height-default);
66
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
+ }
67
106
  }
68
107
  `;
69
108
  //#endregion
@@ -110,12 +149,14 @@ var PkCopyButton = class PkCopyButton extends PkElement {
110
149
  }
111
150
  }
112
151
  render() {
152
+ const inControl = this.getAttribute("slot") === "end";
113
153
  return html`
114
154
  <pk-button
115
155
  part="button"
116
- variant=${this.variant}
117
- size="default"
118
- title="Copy"
156
+ variant=${inControl ? "none" : this.variant}
157
+ size=${inControl ? "none" : "default"}
158
+ ?icon=${inControl}
159
+ aria-label="Copy"
119
160
  ?disabled=${this.disabled}
120
161
  @click=${this.handleCopy}
121
162
  >
@@ -136,4 +177,4 @@ PkCopyButton = __decorate([customElement("pk-copy-button")], PkCopyButton);
136
177
  //#endregion
137
178
  export { PkCopyEvent as a, PkCopyErrorEvent as i, copyToClipboard as n, resolveCopyValue as r, PkCopyButton as t };
138
179
 
139
- //# sourceMappingURL=pk-copy-button-asOLQkqk.js.map
180
+ //# sourceMappingURL=pk-copy-button-BVaOLtYG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-copy-button-BVaOLtYG.js","names":[],"sources":["../../src/events/pk-copy.ts","../../src/utils/copy-to-clipboard.ts","../../src/components/copy-button/pk-copy-button.styles.ts","../../src/components/copy-button/pk-copy-button.ts"],"sourcesContent":["/** Emitted when copy-button successfully copies text. */\nexport class PkCopyEvent extends Event {\n readonly detail: { value: string };\n\n constructor(value: string) {\n super('pk-copy', { bubbles: true, cancelable: false, composed: true });\n this.detail = { value };\n }\n}\n\n/** Emitted when copy-button fails to copy text. */\nexport class PkCopyErrorEvent extends Event {\n constructor() {\n super('pk-copy-error', { bubbles: true, cancelable: false, composed: true });\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-copy': PkCopyEvent;\n 'pk-copy-error': PkCopyErrorEvent;\n }\n}\n","/** Writes text to the clipboard — requires a secure context in most browsers. */\nexport async function copyToClipboard(value: string): Promise<void> {\n await navigator.clipboard.writeText(value);\n}\n\n/** Resolves the string to copy from a `from` selector (from selector). */\nexport function resolveCopyValue(\n root: Document | ShadowRoot,\n from: string,\n fallbackValue: string,\n): string | null {\n if (!from) {\n return fallbackValue || null;\n }\n\n const isProperty = from.includes('.');\n const isAttribute = from.includes('[') && from.includes(']');\n let id = from;\n let field = '';\n\n if (isProperty) {\n [id, field] = from.trim().split('.');\n } else if (isAttribute) {\n [id, field] = from.trim().replace(/\\]$/, '').split('[');\n }\n\n const target = 'getElementById' in root ? root.getElementById(id) : null;\n\n if (!target) {\n return null;\n }\n\n if (isAttribute) {\n return target.getAttribute(field) ?? '';\n }\n\n if (isProperty) {\n const record = target as unknown as Record<string, unknown>;\n const propertyValue = record[field];\n return propertyValue == null ? '' : String(propertyValue);\n }\n\n return target.textContent ?? '';\n}\n","import { css } from 'lit';\n\nexport const pkCopyButtonStyles = css`\n @layer pk-component {\n :host {\n display: inline-block;\n }\n\n /* Match React CopyButton size=\"icon\" — square, no horizontal padding. */\n pk-button::part(base) {\n padding-inline: 0;\n width: var(--pk-btn-height-default);\n min-width: var(--pk-btn-height-default);\n }\n\n /*\n * In-control trailing action (slot=end on pk-input, etc.): same family as\n * combobox expand/clear and image-browser clear — flex-reserved hit box\n * flush to the field edge, glyph sized via --pk-input-decoration-size.\n */\n :host([slot='end']) {\n display: inline-flex;\n align-self: stretch;\n height: auto;\n /* size=none buttons resolve --pk-btn-icon-size: 1em against this. */\n font-size: var(--pk-input-decoration-size, 0.75rem);\n }\n\n :host([slot='end']) pk-button {\n display: flex;\n height: 100%;\n }\n\n :host([slot='end']) pk-button::part(base) {\n box-sizing: border-box;\n width: calc(\n var(--pk-input-decoration-size, 0.75rem) + var(--pk-input-padding-inline, 8px)\n );\n min-width: calc(\n var(--pk-input-decoration-size, 0.75rem) + var(--pk-input-padding-inline, 8px)\n );\n height: 100%;\n min-height: 100%;\n padding: 0;\n border-width: 0;\n border-radius: 0;\n background: transparent;\n color: var(--pk-color-gray-600);\n }\n\n :host([slot='end']) pk-button::part(base):hover:not(:disabled) {\n color: var(--pk-color-gray-800);\n }\n }\n`;\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { customElement, property, state } from '../../decorators.js';\n\nimport { PkElement } from '../../base/pk-element.js';\nimport { PkCopyErrorEvent, PkCopyEvent } from '../../events/pk-copy.js';\nimport { check, renderIconHtml } from '../../icons/index.js';\nimport { copyToClipboard, resolveCopyValue } from '../../utils/copy-to-clipboard.js';\nimport type { PkButtonVariant } from '../button/pk-button.js';\nimport '../button/pk-button.js';\nimport { pkCopyButtonStyles } from './pk-copy-button.styles.js';\n\nconst SUCCESS_ICON = renderIconHtml(check).replace(\n '<svg',\n '<svg slot=\"start\" part=\"success-icon\"',\n);\n\nconst COPIED_RESET_MS = 2000;\n\n/**\n * Copy button — copies text to the clipboard and briefly shows a check icon.\n *\n * Place in `slot=\"end\"` on `<pk-input>` (or another control with an end adornment)\n * for an in-control treatment that matches combobox / image-browser trailing actions.\n *\n * @slot icon - Copy icon (SVG supplied by the consumer)\n *\n * @event pk-copy - Emitted when text is copied successfully\n * @event pk-copy-error - Emitted when copying fails\n *\n * @csspart button - Trigger button\n * @csspart success-icon - Success icon shown after copying\n */\n@customElement('pk-copy-button')\nexport class PkCopyButton extends PkElement {\n static override styles = pkCopyButtonStyles;\n\n @property()\n value = '';\n\n /**\n * Element id to copy from — `from=\"el[attr]\"` or `from=\"el.value\"`.\n * Takes precedence over `value` when set.\n */\n @property()\n from = '';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ reflect: true })\n variant: PkButtonVariant = 'transparent';\n\n @state()\n private copied = false;\n\n private resetTimer?: number;\n\n override disconnectedCallback(): void {\n window.clearTimeout(this.resetTimer);\n super.disconnectedCallback();\n }\n\n private resetCopied = (): void => {\n this.copied = false;\n };\n\n private scheduleReset(): void {\n window.clearTimeout(this.resetTimer);\n this.resetTimer = window.setTimeout(this.resetCopied, COPIED_RESET_MS);\n }\n\n private async handleCopy(): Promise<void> {\n if (this.disabled) {\n return;\n }\n\n const root = this.getRootNode() as Document | ShadowRoot;\n const valueToCopy = resolveCopyValue(root, this.from, this.value);\n\n if (valueToCopy == null || valueToCopy === '') {\n this.dispatchEvent(new PkCopyErrorEvent());\n return;\n }\n\n try {\n await copyToClipboard(valueToCopy);\n this.copied = true;\n this.scheduleReset();\n this.dispatchEvent(new PkCopyEvent(valueToCopy));\n } catch {\n this.dispatchEvent(new PkCopyErrorEvent());\n }\n }\n\n override render() {\n // slot=end → in-control chrome (pk-input end adornment); padless glyph button.\n const inControl = this.getAttribute('slot') === 'end';\n\n return html`\n <pk-button\n part=\"button\"\n variant=${inControl ? 'none' : this.variant}\n size=${inControl ? 'none' : 'default'}\n ?icon=${inControl}\n aria-label=\"Copy\"\n ?disabled=${this.disabled}\n @click=${this.handleCopy}\n >\n ${this.copied\n ? unsafeHTML(SUCCESS_ICON)\n : html`<slot name=\"icon\" slot=\"start\"></slot>`}\n </pk-button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-copy-button': PkCopyButton;\n }\n}\n"],"mappings":";;;;;;;;AACA,IAAa,cAAb,cAAiC,MAAM;CAGnC,YAAY,OAAe;AACvB,QAAM,WAAW;GAAE,SAAS;GAAM,YAAY;GAAO,UAAU;GAAM,CAAC;AACtE,OAAK,SAAS,EAAE,OAAO;;;;AAK/B,IAAa,mBAAb,cAAsC,MAAM;CACxC,cAAc;AACV,QAAM,iBAAiB;GAAE,SAAS;GAAM,YAAY;GAAO,UAAU;GAAM,CAAC;;;;;;ACZpF,eAAsB,gBAAgB,OAA8B;AAChE,OAAM,UAAU,UAAU,UAAU,MAAM;;;AAI9C,SAAgB,iBACZ,MACA,MACA,eACa;AACb,KAAI,CAAC,KACD,QAAO,iBAAiB;CAG5B,MAAM,aAAa,KAAK,SAAS,IAAI;CACrC,MAAM,cAAc,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI;CAC5D,IAAI,KAAK;CACT,IAAI,QAAQ;AAEZ,KAAI,WACA,EAAC,IAAI,SAAS,KAAK,MAAM,CAAC,MAAM,IAAI;UAC7B,YACP,EAAC,IAAI,SAAS,KAAK,MAAM,CAAC,QAAQ,OAAO,GAAG,CAAC,MAAM,IAAI;CAG3D,MAAM,SAAS,oBAAoB,OAAO,KAAK,eAAe,GAAG,GAAG;AAEpE,KAAI,CAAC,OACD,QAAO;AAGX,KAAI,YACA,QAAO,OAAO,aAAa,MAAM,IAAI;AAGzC,KAAI,YAAY;EAEZ,MAAM,gBAAgB,OAAO;AAC7B,SAAO,iBAAiB,OAAO,KAAK,OAAO,cAAc;;AAG7D,QAAO,OAAO,eAAe;;;;ACxCjC,IAAa,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACUrC,IAAM,eAAe,eAAe,cAAA,MAAM,CAAC,QACvC,QACA,4CACH;AAED,IAAM,kBAAkB;AAiBjB,IAAA,eAAA,MAAM,qBAAqB,UAAU;;;eAIhC;cAOD;kBAGI;iBAGgB;gBAGV;2BASiB;AAC9B,QAAK,SAAS;;;;gBA7BO;;CAuBzB,uBAAsC;AAClC,SAAO,aAAa,KAAK,WAAW;AACpC,QAAM,sBAAsB;;CAOhC,gBAA8B;AAC1B,SAAO,aAAa,KAAK,WAAW;AACpC,OAAK,aAAa,OAAO,WAAW,KAAK,aAAa,gBAAgB;;CAG1E,MAAc,aAA4B;AACtC,MAAI,KAAK,SACL;EAIJ,MAAM,cAAc,iBADP,KAAK,aACmB,EAAM,KAAK,MAAM,KAAK,MAAM;AAEjE,MAAI,eAAe,QAAQ,gBAAgB,IAAI;AAC3C,QAAK,cAAc,IAAI,kBAAkB,CAAC;AAC1C;;AAGJ,MAAI;AACA,SAAM,gBAAgB,YAAY;AAClC,QAAK,SAAS;AACd,QAAK,eAAe;AACpB,QAAK,cAAc,IAAI,YAAY,YAAY,CAAC;UAC5C;AACJ,QAAK,cAAc,IAAI,kBAAkB,CAAC;;;CAIlD,SAAkB;EAEd,MAAM,YAAY,KAAK,aAAa,OAAO,KAAK;AAEhD,SAAO,IAAI;;;0BAGO,YAAY,SAAS,KAAK,QAAQ;uBACrC,YAAY,SAAS,UAAU;wBAC9B,UAAU;;4BAEN,KAAK,SAAS;yBACjB,KAAK,WAAW;;kBAEvB,KAAK,SACD,WAAW,aAAa,GACxB,IAAI,yCAAyC;;;;;YA1E9D,UAAU,CAAA,EAAA,aAAA,WAAA,SAAA,KAAA,EAAA;YAOV,UAAU,CAAA,EAAA,aAAA,WAAA,QAAA,KAAA,EAAA;YAGV,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,aAAA,WAAA,YAAA,KAAA,EAAA;YAG1C,SAAS,EAAE,SAAS,MAAM,CAAC,CAAA,EAAA,aAAA,WAAA,WAAA,KAAA,EAAA;YAG3B,OAAO,CAAA,EAAA,aAAA,WAAA,UAAA,KAAA,EAAA;2BApBX,cAAc,iBAAiB,CAAA,EAAA,aAAA"}
@@ -1,7 +1,7 @@
1
1
  import { t as icons_exports } from "./icons-BR8JcQj2.js";
2
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-9M2NzOE2.js";
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 RequiredValidator } from "./required-validator-CEg8dvjS.js";
7
7
  import { t as HasSlotController } from "./has-slot-8BvCt_qo.js";
@@ -11,11 +11,11 @@ import { i as uniqueId } from "./focus-aa5dlv8k.js";
11
11
  import { i as unregisterDismissible, n as isTopDismissible, r as registerDismissible } from "./dismissible-stack-XQUMfKO3.js";
12
12
  import { t as PkClearEvent } from "./pk-clear--mPWZP7H.js";
13
13
  import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "./overlay-lifecycle-D0pkTQyI.js";
14
- import "./pk-popup-B9AgBC2V.js";
14
+ import "./pk-popup-B65tZMQH.js";
15
15
  import { i as waitForPopupReposition } from "./popup-placement-animation-WlEXnS85.js";
16
- import { n as isPointerInsideOverlay } from "./popup-pointer-DMnuZDQl.js";
17
- import { n as readLegacyInstructions } from "./field-labels-CoU9dnNq.js";
18
- import { a as parseIsoDate, i as parseDateList, n as coerceToDate, o as parseRange, r as formatIsoDate } from "./pk-calendar-enTOUCRD.js";
16
+ import { n as isPointerInsideOverlay } from "./popup-pointer-CuLjk1th.js";
17
+ import { n as readLegacyInstructions } from "./field-labels-CmuAW8Cl.js";
18
+ import { a as parseIsoDate, i as parseDateList, n as coerceToDate, o as parseRange, r as formatIsoDate } from "./pk-calendar-Z7Y0PjeY.js";
19
19
  import { css, html, nothing } from "lit";
20
20
  import { classMap } from "lit/directives/class-map.js";
21
21
  import { unsafeSVG } from "lit/directives/unsafe-svg.js";
@@ -734,4 +734,4 @@ PkDatePicker = __decorate([customElement("pk-date-picker")], PkDatePicker);
734
734
  //#endregion
735
735
  export { PkDatePicker as t };
736
736
 
737
- //# sourceMappingURL=pk-date-picker-Bri3kZ6x.js.map
737
+ //# sourceMappingURL=pk-date-picker-BEAd4Ngl.js.map