@verbb/plugin-kit-web 2.0.23 → 2.0.25

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 (446) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/chunks/{active-elements-DM_lCHaW.js → active-elements-739kISON.js} +1 -1
  3. package/dist/chunks/{active-elements-DM_lCHaW.js.map → active-elements-739kISON.js.map} +1 -1
  4. package/dist/chunks/{animate-with-class-NP-yJVt_.js → animate-with-class-CjTZI0NU.js} +1 -1
  5. package/dist/chunks/{animate-with-class-NP-yJVt_.js.map → animate-with-class-CjTZI0NU.js.map} +1 -1
  6. package/dist/chunks/{autoloader-DnSfHkrD.js → autoloader-DcwybeWc.js} +3 -3
  7. package/dist/chunks/{autoloader-DnSfHkrD.js.map → autoloader-DcwybeWc.js.map} +1 -1
  8. package/dist/chunks/{button-group-item.styles-G05d0DNI.js → button-group-item.styles-D7tuu-sr.js} +1 -1
  9. package/dist/chunks/{button-group-item.styles-G05d0DNI.js.map → button-group-item.styles-D7tuu-sr.js.map} +1 -1
  10. package/dist/chunks/{component-registry-DoevfR-u.js → component-registry-B5pnAZsb.js} +2 -1
  11. package/dist/chunks/{component-registry-DoevfR-u.js.map → component-registry-B5pnAZsb.js.map} +1 -1
  12. package/dist/chunks/{control-aria-CzouQRZD.js → control-aria-CtNg2izr.js} +1 -1
  13. package/dist/chunks/{control-aria-CzouQRZD.js.map → control-aria-CtNg2izr.js.map} +1 -1
  14. package/dist/chunks/{decorate-R0X811qp.js → decorate-Br_PE9pq.js} +3 -4
  15. package/dist/chunks/{decorate-R0X811qp.js.map → decorate-Br_PE9pq.js.map} +1 -1
  16. package/dist/chunks/decorators-BkErmuYK.js +2 -0
  17. package/dist/chunks/{dismissible-stack-B3BgzdQb.js → dismissible-stack-CwhtwAyo.js} +1 -1
  18. package/dist/chunks/{dismissible-stack-B3BgzdQb.js.map → dismissible-stack-CwhtwAyo.js.map} +1 -1
  19. package/dist/chunks/{field-labels-CGSfAGf-.js → field-labels-pY-gQDwQ.js} +1 -1
  20. package/dist/chunks/{field-labels-CGSfAGf-.js.map → field-labels-pY-gQDwQ.js.map} +1 -1
  21. package/dist/chunks/{focus-C6pY4Ym4.js → focus-DcVUPVqn.js} +2 -2
  22. package/dist/chunks/{focus-C6pY4Ym4.js.map → focus-DcVUPVqn.js.map} +1 -1
  23. package/dist/chunks/{form-control.styles-BHwSsx_y.js → form-control.styles-CQ93gnVf.js} +1 -1
  24. package/dist/chunks/{form-control.styles-BHwSsx_y.js.map → form-control.styles-CQ93gnVf.js.map} +1 -1
  25. package/dist/chunks/{has-slot-9zjTXvea.js → has-slot-DJv86HKx.js} +1 -1
  26. package/dist/chunks/{has-slot-9zjTXvea.js.map → has-slot-DJv86HKx.js.map} +1 -1
  27. package/dist/chunks/{icon.styles-pNyUmVtP.js → icon.styles-KWvfi7RV.js} +1 -1
  28. package/dist/chunks/{icon.styles-pNyUmVtP.js.map → icon.styles-KWvfi7RV.js.map} +1 -1
  29. package/dist/chunks/{icons-B8siZLOe.js → icons-k1pvx6yX.js} +2 -2
  30. package/dist/chunks/{icons-B8siZLOe.js.map → icons-k1pvx6yX.js.map} +1 -1
  31. package/dist/chunks/{mirror-validator-Cszpqlxk.js → mirror-validator-BkZlEv1Z.js} +1 -1
  32. package/dist/chunks/{mirror-validator-Cszpqlxk.js.map → mirror-validator-BkZlEv1Z.js.map} +1 -1
  33. package/dist/chunks/{option-filter-Cj5SvyzI.js → option-filter-BkKyBg8L.js} +2 -2
  34. package/dist/chunks/{option-filter-Cj5SvyzI.js.map → option-filter-BkKyBg8L.js.map} +1 -1
  35. package/dist/chunks/{overlay-lifecycle-CAoT0LE8.js → overlay-lifecycle-C582MGBJ.js} +1 -1
  36. package/dist/chunks/{overlay-lifecycle-CAoT0LE8.js.map → overlay-lifecycle-C582MGBJ.js.map} +1 -1
  37. package/dist/chunks/{pk-alert-Cjxl6CY_.js → pk-alert-BQAb4lJc.js} +9 -7
  38. package/dist/chunks/pk-alert-BQAb4lJc.js.map +1 -0
  39. package/dist/chunks/{pk-autocomplete-DA77kdTN.js → pk-autocomplete-DUXhs1hi.js} +20 -19
  40. package/dist/chunks/pk-autocomplete-DUXhs1hi.js.map +1 -0
  41. package/dist/chunks/{pk-button-group-DBdKK_2_.js → pk-button-group-BY12Lbk7.js} +10 -7
  42. package/dist/chunks/pk-button-group-BY12Lbk7.js.map +1 -0
  43. package/dist/chunks/{pk-button-group-separator-D0Aa0a0f.js → pk-button-group-separator-B1a8dP9A.js} +3 -2
  44. package/dist/chunks/pk-button-group-separator-B1a8dP9A.js.map +1 -0
  45. package/dist/chunks/{pk-button-group-text-BsqEM-dB.js → pk-button-group-text-CWNlZkyV.js} +3 -3
  46. package/dist/chunks/pk-button-group-text-CWNlZkyV.js.map +1 -0
  47. package/dist/chunks/{pk-button-DCtNLEPr.js → pk-button-ntSVrer_.js} +7 -6
  48. package/dist/chunks/pk-button-ntSVrer_.js.map +1 -0
  49. package/dist/chunks/{pk-calendar-hBz1MnOu.js → pk-calendar-Df0c5u79.js} +11 -10
  50. package/dist/chunks/pk-calendar-Df0c5u79.js.map +1 -0
  51. package/dist/chunks/{pk-checkbox-dvHRoVbL.js → pk-checkbox-L5uRex3b.js} +6 -5
  52. package/dist/chunks/pk-checkbox-L5uRex3b.js.map +1 -0
  53. package/dist/chunks/{pk-checkbox-select-Cqx5ZCMq.js → pk-checkbox-select-6OS0wFYO.js} +4 -3
  54. package/dist/chunks/pk-checkbox-select-6OS0wFYO.js.map +1 -0
  55. package/dist/chunks/{pk-clear-LzxwxEX7.js → pk-clear-DHxP_2cm.js} +1 -1
  56. package/dist/chunks/{pk-clear-LzxwxEX7.js.map → pk-clear-DHxP_2cm.js.map} +1 -1
  57. package/dist/chunks/{pk-code-editor-C_PqjR75.js → pk-code-editor-vZriNR67.js} +6 -5
  58. package/dist/chunks/pk-code-editor-vZriNR67.js.map +1 -0
  59. package/dist/chunks/{pk-color-input-4LDV0Z3W.js → pk-color-input-Csbm4ROT.js} +6 -5
  60. package/dist/chunks/pk-color-input-Csbm4ROT.js.map +1 -0
  61. package/dist/chunks/{pk-combobox-BeddzAsl.js → pk-combobox-BrSBrldb.js} +24 -22
  62. package/dist/chunks/pk-combobox-BrSBrldb.js.map +1 -0
  63. package/dist/chunks/{pk-connect.styles-ciqZMK3B.js → pk-connect.styles-oKhxa_m2.js} +1 -1
  64. package/dist/chunks/{pk-connect.styles-ciqZMK3B.js.map → pk-connect.styles-oKhxa_m2.js.map} +1 -1
  65. package/dist/chunks/{pk-copy-button-KegSx46o.js → pk-copy-button-5i9v_zmu.js} +7 -6
  66. package/dist/chunks/pk-copy-button-5i9v_zmu.js.map +1 -0
  67. package/dist/chunks/{pk-date-picker-D_JFep-Y.js → pk-date-picker-C-w6Mn6j.js} +20 -19
  68. package/dist/chunks/pk-date-picker-C-w6Mn6j.js.map +1 -0
  69. package/dist/chunks/{pk-dialog-CFU850OH.js → pk-dialog-C7KZGpQs.js} +9 -8
  70. package/dist/chunks/pk-dialog-C7KZGpQs.js.map +1 -0
  71. package/dist/chunks/{pk-dropdown-item-A4P4zfVF.js → pk-dropdown-item-Ck2N_suK.js} +11 -8
  72. package/dist/chunks/pk-dropdown-item-Ck2N_suK.js.map +1 -0
  73. package/dist/chunks/{pk-dropdown-label-PqDxMkCI.js → pk-dropdown-label-BdZLeizJ.js} +2 -2
  74. package/dist/chunks/pk-dropdown-label-BdZLeizJ.js.map +1 -0
  75. package/dist/chunks/{pk-dropdown-menu-C_vasBoa.js → pk-dropdown-menu-DBsO1uYR.js} +22 -18
  76. package/dist/chunks/pk-dropdown-menu-DBsO1uYR.js.map +1 -0
  77. package/dist/chunks/{pk-editable-table-B85NhFYY.js → pk-editable-table-Cd8K6vT4.js} +25 -22
  78. package/dist/chunks/pk-editable-table-Cd8K6vT4.js.map +1 -0
  79. package/dist/chunks/{pk-field-BJA2fZ6s.js → pk-field--PCE9nOd.js} +8 -7
  80. package/dist/chunks/pk-field--PCE9nOd.js.map +1 -0
  81. package/dist/chunks/{pk-form-associated-element-MqaHdIoH.js → pk-form-associated-element-Doh2K3pG.js} +3 -3
  82. package/dist/chunks/pk-form-associated-element-Doh2K3pG.js.map +1 -0
  83. package/dist/chunks/{pk-image-browser-DLAQcjFt.js → pk-image-browser-iUqdcLKs.js} +20 -20
  84. package/dist/chunks/pk-image-browser-iUqdcLKs.js.map +1 -0
  85. package/dist/chunks/{pk-input-CiUNLTSW.js → pk-input-BUbXj9We.js} +14 -13
  86. package/dist/chunks/pk-input-BUbXj9We.js.map +1 -0
  87. package/dist/chunks/{pk-input-group-k7WV0pQI.js → pk-input-group-CN79c5HT.js} +5 -4
  88. package/dist/chunks/pk-input-group-CN79c5HT.js.map +1 -0
  89. package/dist/chunks/{pk-input-group-addon-piOznzSS.js → pk-input-group-addon-DpxfuYp1.js} +3 -2
  90. package/dist/chunks/pk-input-group-addon-DpxfuYp1.js.map +1 -0
  91. package/dist/chunks/{pk-input-group-button-Di2vEJLo.js → pk-input-group-button-D5Hm4saA.js} +3 -2
  92. package/dist/chunks/pk-input-group-button-D5Hm4saA.js.map +1 -0
  93. package/dist/chunks/{pk-input-group-input-CwaaEfr1.js → pk-input-group-input-Cm1MoHgN.js} +3 -2
  94. package/dist/chunks/pk-input-group-input-Cm1MoHgN.js.map +1 -0
  95. package/dist/chunks/{pk-input-group-text-C0VAdy0J.js → pk-input-group-text-CtyJZ_Kg.js} +2 -2
  96. package/dist/chunks/pk-input-group-text-CtyJZ_Kg.js.map +1 -0
  97. package/dist/chunks/{pk-input-group-textarea-DOG1NIlE.js → pk-input-group-textarea-BxmKGjdt.js} +3 -2
  98. package/dist/chunks/pk-input-group-textarea-BxmKGjdt.js.map +1 -0
  99. package/dist/chunks/{pk-lightswitch-FH5ZxMG2.js → pk-lightswitch-CSvgiHVQ.js} +9 -8
  100. package/dist/chunks/pk-lightswitch-CSvgiHVQ.js.map +1 -0
  101. package/dist/chunks/{pk-option-Cx52kLmz.js → pk-option-B_PF4v_Z.js} +9 -7
  102. package/dist/chunks/pk-option-B_PF4v_Z.js.map +1 -0
  103. package/dist/chunks/{pk-option-group-CYo9Ukue.js → pk-option-group-D6bHfn0j.js} +4 -3
  104. package/dist/chunks/pk-option-group-D6bHfn0j.js.map +1 -0
  105. package/dist/chunks/{pk-popover-209LdoPr.js → pk-popover-BOoGfR7I.js} +11 -10
  106. package/dist/chunks/pk-popover-BOoGfR7I.js.map +1 -0
  107. package/dist/chunks/{pk-popup-0EIt9X_W.js → pk-popup-DVE93VSV.js} +32 -28
  108. package/dist/chunks/pk-popup-DVE93VSV.js.map +1 -0
  109. package/dist/chunks/{pk-radio-jgj6A0Wy.js → pk-radio-D0eqmnlH.js} +3 -2
  110. package/dist/chunks/pk-radio-D0eqmnlH.js.map +1 -0
  111. package/dist/chunks/{pk-radio-group-CruMBeeF.js → pk-radio-group-BehEZG_k.js} +8 -7
  112. package/dist/chunks/pk-radio-group-BehEZG_k.js.map +1 -0
  113. package/dist/chunks/{pk-scroll-area-BaqN798b.js → pk-scroll-area-BeaLZ6k-.js} +3 -2
  114. package/dist/chunks/pk-scroll-area-BeaLZ6k-.js.map +1 -0
  115. package/dist/chunks/{pk-select-UUH7FE4H.js → pk-select-DZNpEk5Z.js} +19 -18
  116. package/dist/chunks/pk-select-DZNpEk5Z.js.map +1 -0
  117. package/dist/chunks/{pk-separator-Bcxg_GO2.js → pk-separator-ZkRowI5Y.js} +3 -2
  118. package/dist/chunks/pk-separator-ZkRowI5Y.js.map +1 -0
  119. package/dist/chunks/{pk-spinner-CN365srE.js → pk-spinner-Bxkn4iVO.js} +3 -2
  120. package/dist/chunks/pk-spinner-Bxkn4iVO.js.map +1 -0
  121. package/dist/chunks/{pk-state-panel-DPP7t-er.js → pk-state-panel-BTo2xiug.js} +7 -6
  122. package/dist/chunks/pk-state-panel-BTo2xiug.js.map +1 -0
  123. package/dist/chunks/{pk-status-CYcadu0Q.js → pk-status-CdiRBRyh.js} +3 -2
  124. package/dist/chunks/pk-status-CdiRBRyh.js.map +1 -0
  125. package/dist/chunks/{pk-tab-BmXNyDg7.js → pk-tab-CSbI3XxX.js} +2 -2
  126. package/dist/chunks/pk-tab-CSbI3XxX.js.map +1 -0
  127. package/dist/chunks/{pk-tab-heading-GZHVmCAd.js → pk-tab-heading-BMyLTBNc.js} +2 -2
  128. package/dist/chunks/pk-tab-heading-BMyLTBNc.js.map +1 -0
  129. package/dist/chunks/{pk-tab-panel-OpM3f_cm.js → pk-tab-panel-sgdRjV8o.js} +2 -2
  130. package/dist/chunks/pk-tab-panel-sgdRjV8o.js.map +1 -0
  131. package/dist/chunks/{pk-tabs-x26NAw-V.js → pk-tabs-bBNCu_4h.js} +10 -7
  132. package/dist/chunks/pk-tabs-bBNCu_4h.js.map +1 -0
  133. package/dist/chunks/{pk-textarea-CBijEmcV.js → pk-textarea-B401dUWa.js} +11 -10
  134. package/dist/chunks/pk-textarea-B401dUWa.js.map +1 -0
  135. package/dist/chunks/{pk-time-picker-D-u5-7pf.js → pk-time-picker-DnNZVwRk.js} +6 -6
  136. package/dist/chunks/pk-time-picker-DnNZVwRk.js.map +1 -0
  137. package/dist/chunks/{pk-tiptap-content-BGxMO3T4.js → pk-tiptap-content-DmS_2EUi.js} +4 -3
  138. package/dist/chunks/pk-tiptap-content-DmS_2EUi.js.map +1 -0
  139. package/dist/chunks/{pk-tiptap-editor-BeuyzH5l.js → pk-tiptap-editor-DCgHtgoi.js} +20 -21
  140. package/dist/chunks/pk-tiptap-editor-DCgHtgoi.js.map +1 -0
  141. package/dist/chunks/{pk-tiptap-input-CQojaxDH.js → pk-tiptap-input-asrD-8W6.js} +7 -6
  142. package/dist/chunks/pk-tiptap-input-asrD-8W6.js.map +1 -0
  143. package/dist/chunks/{pk-toggle-CAtGO_Le.js → pk-toggle-Co8GsHuK.js} +4 -3
  144. package/dist/chunks/pk-toggle-Co8GsHuK.js.map +1 -0
  145. package/dist/chunks/{pk-toggle-group-CLso6OE7.js → pk-toggle-group-Ct1ljI-7.js} +7 -4
  146. package/dist/chunks/pk-toggle-group-Ct1ljI-7.js.map +1 -0
  147. package/dist/chunks/{pk-tooltip-C6yb4CXI.js → pk-tooltip-Cvv2f7T5.js} +7 -6
  148. package/dist/chunks/pk-tooltip-Cvv2f7T5.js.map +1 -0
  149. package/dist/chunks/{popup-content-animation.styles-EUnGV75J.js → popup-content-animation.styles-CJ8zGJz-.js} +1 -1
  150. package/dist/chunks/{popup-content-animation.styles-EUnGV75J.js.map → popup-content-animation.styles-CJ8zGJz-.js.map} +1 -1
  151. package/dist/chunks/{popup-placement-animation-GvFXER7D.js → popup-placement-animation-ClUYI79z.js} +1 -1
  152. package/dist/chunks/{popup-placement-animation-GvFXER7D.js.map → popup-placement-animation-ClUYI79z.js.map} +1 -1
  153. package/dist/chunks/{popup-pointer-BTS3Y6LE.js → popup-pointer-Bh_d205v.js} +1 -1
  154. package/dist/chunks/{popup-pointer-BTS3Y6LE.js.map → popup-pointer-Bh_d205v.js.map} +1 -1
  155. package/dist/chunks/{register-components-Dcdn1e3S.js → register-components-CZtpgZe3.js} +1 -1
  156. package/dist/chunks/{register-components-Dcdn1e3S.js.map → register-components-CZtpgZe3.js.map} +1 -1
  157. package/dist/chunks/{render-BKGW1a68.js → render-DQZp_Rak.js} +1 -1
  158. package/dist/chunks/{render-BKGW1a68.js.map → render-DQZp_Rak.js.map} +1 -1
  159. package/dist/chunks/{required-validator-CaRnQk1V.js → required-validator-I58oJGZ3.js} +1 -1
  160. package/dist/chunks/{required-validator-CaRnQk1V.js.map → required-validator-I58oJGZ3.js.map} +1 -1
  161. package/dist/chunks/{scroll-lock-gTFrvIPu.js → scroll-lock-DE1pElMQ.js} +2 -2
  162. package/dist/chunks/{scroll-lock-gTFrvIPu.js.map → scroll-lock-DE1pElMQ.js.map} +1 -1
  163. package/dist/chunks/{spinner-utils-Co_4X3ip.js → spinner-utils-DXwIxQ6z.js} +1 -1
  164. package/dist/chunks/{spinner-utils-Co_4X3ip.js.map → spinner-utils-DXwIxQ6z.js.map} +1 -1
  165. package/dist/chunks/{supports-popover-6lNVStLh.js → supports-popover-BCqyOPtO.js} +1 -1
  166. package/dist/chunks/{supports-popover-6lNVStLh.js.map → supports-popover-BCqyOPtO.js.map} +1 -1
  167. package/dist/chunks/{sync-listbox-separators-CPFtrpNq.js → sync-listbox-separators-saLEtPpJ.js} +2 -2
  168. package/dist/chunks/{sync-listbox-separators-CPFtrpNq.js.map → sync-listbox-separators-saLEtPpJ.js.map} +1 -1
  169. package/dist/chunks/{tiptap.styles-DjhIrSBN.js → tiptap.styles-Cwb_cj9g.js} +21 -2
  170. package/dist/chunks/{tiptap.styles-DjhIrSBN.js.map → tiptap.styles-Cwb_cj9g.js.map} +1 -1
  171. package/dist/components/alert/pk-alert.js +1 -1
  172. package/dist/components/alert.js +1 -1
  173. package/dist/components/autocomplete/pk-autocomplete.js +1 -1
  174. package/dist/components/autocomplete.js +1 -1
  175. package/dist/components/button/pk-button.js +1 -1
  176. package/dist/components/button-group/pk-button-group-separator.js +1 -1
  177. package/dist/components/button-group/pk-button-group-text.js +1 -1
  178. package/dist/components/button-group/pk-button-group.js +1 -1
  179. package/dist/components/button-group.js +3 -3
  180. package/dist/components/button.js +1 -1
  181. package/dist/components/calendar/pk-calendar.js +1 -1
  182. package/dist/components/calendar.js +1 -1
  183. package/dist/components/checkbox/pk-checkbox.js +1 -1
  184. package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
  185. package/dist/components/checkbox-select.js +1 -1
  186. package/dist/components/checkbox.js +1 -1
  187. package/dist/components/code-editor/pk-code-editor.js +1 -1
  188. package/dist/components/code-editor.js +1 -1
  189. package/dist/components/color-input/pk-color-input.js +1 -1
  190. package/dist/components/color-input.js +1 -1
  191. package/dist/components/combobox/pk-combobox.js +1 -1
  192. package/dist/components/combobox.js +1 -1
  193. package/dist/components/connect/pk-connect-oauth.js +5 -4
  194. package/dist/components/connect/pk-connect-oauth.js.map +1 -1
  195. package/dist/components/connect/pk-connect.js +7 -6
  196. package/dist/components/connect/pk-connect.js.map +1 -1
  197. package/dist/components/copy-button/pk-copy-button.js +1 -1
  198. package/dist/components/copy-button.js +1 -1
  199. package/dist/components/date-picker/pk-date-picker.js +1 -1
  200. package/dist/components/date-picker.js +1 -1
  201. package/dist/components/dialog/pk-dialog.js +1 -1
  202. package/dist/components/dialog.js +1 -1
  203. package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
  204. package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
  205. package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
  206. package/dist/components/dropdown-menu/pk-dropdown-separator.js +1 -1
  207. package/dist/components/dropdown-menu/pk-dropdown-separator.js.map +1 -1
  208. package/dist/components/dropdown-menu.js +3 -3
  209. package/dist/components/editable-table/pk-editable-table.js +1 -1
  210. package/dist/components/editable-table.js +1 -1
  211. package/dist/components/field/pk-field.js +1 -1
  212. package/dist/components/field.js +1 -1
  213. package/dist/components/icon/pk-icon.js +2 -1
  214. package/dist/components/icon/pk-icon.js.map +1 -1
  215. package/dist/components/image-browser/pk-image-browser.js +1 -1
  216. package/dist/components/image-browser.js +1 -1
  217. package/dist/components/input/pk-input.js +1 -1
  218. package/dist/components/input-group/pk-input-group-addon.js +1 -1
  219. package/dist/components/input-group/pk-input-group-button.js +1 -1
  220. package/dist/components/input-group/pk-input-group-input.js +1 -1
  221. package/dist/components/input-group/pk-input-group-text.js +1 -1
  222. package/dist/components/input-group/pk-input-group-textarea.js +1 -1
  223. package/dist/components/input-group/pk-input-group.js +1 -1
  224. package/dist/components/input-group.js +6 -6
  225. package/dist/components/input.js +1 -1
  226. package/dist/components/lightswitch/pk-lightswitch.js +1 -1
  227. package/dist/components/lightswitch.js +1 -1
  228. package/dist/components/popover/pk-popover.js +1 -1
  229. package/dist/components/popover.js +1 -1
  230. package/dist/components/popup/pk-popup.js +1 -1
  231. package/dist/components/popup.js +1 -1
  232. package/dist/components/radio-group/pk-radio-group.js +1 -1
  233. package/dist/components/radio-group/pk-radio.js +1 -1
  234. package/dist/components/radio-group.js +2 -2
  235. package/dist/components/scroll-area/pk-scroll-area.js +1 -1
  236. package/dist/components/scroll-area.js +1 -1
  237. package/dist/components/select/pk-option-group.js +1 -1
  238. package/dist/components/select/pk-option.js +1 -1
  239. package/dist/components/select/pk-select.js +1 -1
  240. package/dist/components/select.js +3 -3
  241. package/dist/components/separator/pk-separator.js +1 -1
  242. package/dist/components/separator.js +1 -1
  243. package/dist/components/spinner/pk-spinner.js +1 -1
  244. package/dist/components/spinner.js +2 -2
  245. package/dist/components/state-panel/pk-state-panel.js +1 -1
  246. package/dist/components/state-panel.js +1 -1
  247. package/dist/components/status/pk-status.js +1 -1
  248. package/dist/components/status.js +1 -1
  249. package/dist/components/tabs/pk-tab-heading.js +1 -1
  250. package/dist/components/tabs/pk-tab-panel.js +1 -1
  251. package/dist/components/tabs/pk-tab.js +1 -1
  252. package/dist/components/tabs/pk-tabs.js +1 -1
  253. package/dist/components/tabs.js +4 -4
  254. package/dist/components/textarea/pk-textarea.js +1 -1
  255. package/dist/components/textarea.js +1 -1
  256. package/dist/components/time-picker/pk-time-picker.js +1 -1
  257. package/dist/components/time-picker.js +1 -1
  258. package/dist/components/tiptap/pk-tiptap-content.js +1 -1
  259. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  260. package/dist/components/tiptap/pk-tiptap-input.js +1 -1
  261. package/dist/components/tiptap/tiptap.styles.d.ts.map +1 -1
  262. package/dist/components/tiptap-content.js +1 -1
  263. package/dist/components/tiptap-editor.js +1 -1
  264. package/dist/components/tiptap-input.js +1 -1
  265. package/dist/components/toggle/pk-toggle.js +1 -1
  266. package/dist/components/toggle-group/pk-toggle-group.js +1 -1
  267. package/dist/components/toggle-group.js +1 -1
  268. package/dist/components/toggle.js +1 -1
  269. package/dist/components/tooltip/pk-tooltip.js +1 -1
  270. package/dist/components/tooltip.js +1 -1
  271. package/dist/connect/register-cp-connect.js +4 -4
  272. package/dist/connect/register-cp-connect.js.map +1 -1
  273. package/dist/icons/index.js +2 -2
  274. package/dist/index.js +67 -67
  275. package/dist/plugin-kit.js +4 -4
  276. package/dist/plugin-kit.js.map +1 -1
  277. package/dist/register-components.js +1 -1
  278. package/dist/register.js +120 -55
  279. package/dist/register.js.map +1 -0
  280. package/dist-loader/chunks/{button-group-item.styles-CXLuiMeZ.js → button-group-item.styles-BQbvE3sC.js} +1 -1
  281. package/dist-loader/chunks/{codemirror-CU2NB7wh.js → codemirror-C_TTKlG1.js} +584 -436
  282. package/dist-loader/chunks/editor-CS16rBkM.js +110 -0
  283. package/dist-loader/chunks/{floating-ui-B84As3F-.js → floating-ui-BJQPB-Ip.js} +9 -11
  284. package/dist-loader/chunks/{lit-s6aadvWG.js → lit-B6nFKgbW.js} +52 -14
  285. package/dist-loader/chunks/{option-filter-DH11hDpV.js → option-filter-BkKyBg8L.js} +1 -1
  286. package/dist-loader/chunks/{pk-a11y-CjB4-U-R.js → pk-a11y-mGj0G5AE.js} +1 -1
  287. package/dist-loader/chunks/{pk-base-Om6X9ab5.js → pk-base-BGegy7-X.js} +2 -2
  288. package/dist-loader/chunks/{pk-button-nSZxt8_B.js → pk-button-DV9Tk5Pd.js} +5 -5
  289. package/dist-loader/chunks/{pk-calendar-BS7Mfme_.js → pk-calendar-C0xpIVIw.js} +9 -9
  290. package/dist-loader/chunks/{pk-checkbox-CYUcOnco.js → pk-checkbox-DhP0iMoP.js} +9 -6
  291. package/dist-loader/chunks/{pk-color-input-BjDit7z0.js → pk-color-input-B02cYzyr.js} +4 -4
  292. package/dist-loader/chunks/{pk-combobox-DyexEhFo.js → pk-combobox-S_tpNUHK.js} +19 -18
  293. package/dist-loader/chunks/{pk-connect.styles-BsPAXjgF.js → pk-connect.styles-B5qe5yQB.js} +1 -1
  294. package/dist-loader/chunks/{pk-copy-button-CoN83ilF.js → pk-copy-button-D6tPuhJ3.js} +6 -6
  295. package/dist-loader/chunks/{pk-date-picker-CO6deRCu.js → pk-date-picker-C0y4sfSf.js} +15 -15
  296. package/dist-loader/chunks/{pk-dialog-BWo6iDnY.js → pk-dialog-BJs5fVHS.js} +7 -7
  297. package/dist-loader/chunks/{pk-dropdown-item-CbujjI8U.js → pk-dropdown-item-Bs5NZDRh.js} +11 -9
  298. package/dist-loader/chunks/{pk-dropdown-label-9X4ctyES.js → pk-dropdown-label-Cpl9-bzB.js} +2 -2
  299. package/dist-loader/chunks/{pk-dropdown-menu-D1KpGuqU.js → pk-dropdown-menu-CLrfuD3i.js} +20 -17
  300. package/dist-loader/chunks/{pk-field-DzggayrX.js → pk-field-Pg61fxBR.js} +140 -74
  301. package/dist-loader/chunks/{pk-icon-DQPqxFKW.js → pk-icon-B7ywfPb6.js} +4 -4
  302. package/dist-loader/chunks/{pk-input-C1peOijH.js → pk-input-Cj5s8eBT.js} +10 -10
  303. package/dist-loader/chunks/{pk-lightswitch-Y-I3eKCt.js → pk-lightswitch-rUGB1p8q.js} +6 -6
  304. package/dist-loader/chunks/{pk-option-IfazQDxz.js → pk-option-B-MeLvZf.js} +8 -7
  305. package/dist-loader/chunks/{pk-popup-BrLT_4kD.js → pk-popup-CeyruJFh.js} +35 -29
  306. package/dist-loader/chunks/{pk-select-49fogRYV.js → pk-select-JUx3mxRS.js} +14 -14
  307. package/dist-loader/chunks/{pk-spinner-BmnrA60m.js → pk-spinner-B8iuHDQ9.js} +2 -2
  308. package/dist-loader/chunks/{pk-state-panel-DKf54EnJ.js → pk-state-panel-BhdZGllL.js} +7 -7
  309. package/dist-loader/chunks/{pk-status-Dat3_D-T.js → pk-status-D3qVwWlR.js} +2 -2
  310. package/dist-loader/chunks/{pk-textarea-DPb2R8gV.js → pk-textarea-KnpJMQX2.js} +7 -7
  311. package/dist-loader/chunks/{pk-time-picker-CJiQTVuC.js → pk-time-picker-DCqZ5z7M.js} +6 -6
  312. package/dist-loader/chunks/{pk-tooltip-CqwQfOPV.js → pk-tooltip-DStkplzy.js} +6 -6
  313. package/dist-loader/chunks/{popup-content-animation.styles-CWR2mend.js → popup-content-animation.styles-BtUVJg82.js} +1 -1
  314. package/dist-loader/chunks/{render-BuA2YeZN.js → render-D9G_a_c2.js} +1 -1
  315. package/dist-loader/chunks/{sync-listbox-separators-rbu8jrAa.js → sync-listbox-separators-saLEtPpJ.js} +1 -1
  316. package/dist-loader/chunks/{tiptap-BhYH5Dva.js → tiptap-DYSRDaas.js} +10392 -7521
  317. package/dist-loader/chunks/tiptap.styles-CZUkf2K6.js +915 -0
  318. package/dist-loader/components/alert/alert.js +8 -7
  319. package/dist-loader/components/autocomplete/autocomplete.js +15 -15
  320. package/dist-loader/components/button/button.js +1 -1
  321. package/dist-loader/components/button-group/button-group-separator.js +2 -2
  322. package/dist-loader/components/button-group/button-group-text.js +3 -3
  323. package/dist-loader/components/button-group/button-group.js +9 -7
  324. package/dist-loader/components/calendar/calendar.js +1 -1
  325. package/dist-loader/components/checkbox/checkbox.js +1 -1
  326. package/dist-loader/components/checkbox-select/checkbox-select.js +3 -3
  327. package/dist-loader/components/code-editor/code-editor.js +4 -4
  328. package/dist-loader/components/color-input/color-input.js +1 -1
  329. package/dist-loader/components/combobox/combobox.js +1 -1
  330. package/dist-loader/components/connect/connect-oauth.js +5 -5
  331. package/dist-loader/components/connect/connect.js +8 -8
  332. package/dist-loader/components/copy-button/copy-button.js +1 -1
  333. package/dist-loader/components/date-picker/date-picker.js +1 -1
  334. package/dist-loader/components/dialog/dialog.js +1 -1
  335. package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
  336. package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -1
  337. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  338. package/dist-loader/components/dropdown-menu/dropdown-separator.js +2 -2
  339. package/dist-loader/components/editable-table/editable-table.js +25 -23
  340. package/dist-loader/components/field/field.js +1 -1
  341. package/dist-loader/components/icon/icon.js +3 -3
  342. package/dist-loader/components/image-browser/image-browser.js +15 -16
  343. package/dist-loader/components/input/input.js +1 -1
  344. package/dist-loader/components/input-group/input-group-addon.js +2 -2
  345. package/dist-loader/components/input-group/input-group-button.js +2 -2
  346. package/dist-loader/components/input-group/input-group-input.js +2 -2
  347. package/dist-loader/components/input-group/input-group-text.js +2 -2
  348. package/dist-loader/components/input-group/input-group-textarea.js +2 -2
  349. package/dist-loader/components/input-group/input-group.js +3 -3
  350. package/dist-loader/components/lightswitch/lightswitch.js +1 -1
  351. package/dist-loader/components/popover/popover.js +9 -9
  352. package/dist-loader/components/popup/popup.js +1 -1
  353. package/dist-loader/components/radio-group/radio-group.js +5 -5
  354. package/dist-loader/components/radio-group/radio.js +2 -2
  355. package/dist-loader/components/scroll-area/scroll-area.js +2 -2
  356. package/dist-loader/components/select/option-group.js +3 -3
  357. package/dist-loader/components/select/option.js +1 -1
  358. package/dist-loader/components/select/select.js +1 -1
  359. package/dist-loader/components/separator/separator.js +2 -2
  360. package/dist-loader/components/spinner/spinner.js +1 -1
  361. package/dist-loader/components/state-panel/state-panel.js +1 -1
  362. package/dist-loader/components/status/status.js +1 -1
  363. package/dist-loader/components/tabs/tab-heading.js +2 -2
  364. package/dist-loader/components/tabs/tab-panel.js +2 -2
  365. package/dist-loader/components/tabs/tab.js +2 -2
  366. package/dist-loader/components/tabs/tabs.js +9 -7
  367. package/dist-loader/components/textarea/textarea.js +1 -1
  368. package/dist-loader/components/time-picker/time-picker.js +1 -1
  369. package/dist-loader/components/tiptap/tiptap-content.js +5 -4
  370. package/dist-loader/components/tiptap/tiptap-editor.js +594 -20
  371. package/dist-loader/components/tiptap/tiptap-input.js +273 -5
  372. package/dist-loader/components/toggle/toggle.js +3 -3
  373. package/dist-loader/components/toggle-group/toggle-group.js +6 -4
  374. package/dist-loader/components/tooltip/tooltip.js +1 -1
  375. package/dist-loader/plugin-kit.loader.js +2 -1
  376. package/package.json +9 -9
  377. package/dist/chunks/pk-alert-Cjxl6CY_.js.map +0 -1
  378. package/dist/chunks/pk-autocomplete-DA77kdTN.js.map +0 -1
  379. package/dist/chunks/pk-button-DCtNLEPr.js.map +0 -1
  380. package/dist/chunks/pk-button-group-DBdKK_2_.js.map +0 -1
  381. package/dist/chunks/pk-button-group-separator-D0Aa0a0f.js.map +0 -1
  382. package/dist/chunks/pk-button-group-text-BsqEM-dB.js.map +0 -1
  383. package/dist/chunks/pk-calendar-hBz1MnOu.js.map +0 -1
  384. package/dist/chunks/pk-checkbox-dvHRoVbL.js.map +0 -1
  385. package/dist/chunks/pk-checkbox-select-Cqx5ZCMq.js.map +0 -1
  386. package/dist/chunks/pk-code-editor-C_PqjR75.js.map +0 -1
  387. package/dist/chunks/pk-color-input-4LDV0Z3W.js.map +0 -1
  388. package/dist/chunks/pk-combobox-BeddzAsl.js.map +0 -1
  389. package/dist/chunks/pk-copy-button-KegSx46o.js.map +0 -1
  390. package/dist/chunks/pk-date-picker-D_JFep-Y.js.map +0 -1
  391. package/dist/chunks/pk-dialog-CFU850OH.js.map +0 -1
  392. package/dist/chunks/pk-dropdown-item-A4P4zfVF.js.map +0 -1
  393. package/dist/chunks/pk-dropdown-label-PqDxMkCI.js.map +0 -1
  394. package/dist/chunks/pk-dropdown-menu-C_vasBoa.js.map +0 -1
  395. package/dist/chunks/pk-editable-table-B85NhFYY.js.map +0 -1
  396. package/dist/chunks/pk-field-BJA2fZ6s.js.map +0 -1
  397. package/dist/chunks/pk-form-associated-element-MqaHdIoH.js.map +0 -1
  398. package/dist/chunks/pk-image-browser-DLAQcjFt.js.map +0 -1
  399. package/dist/chunks/pk-input-CiUNLTSW.js.map +0 -1
  400. package/dist/chunks/pk-input-group-addon-piOznzSS.js.map +0 -1
  401. package/dist/chunks/pk-input-group-button-Di2vEJLo.js.map +0 -1
  402. package/dist/chunks/pk-input-group-input-CwaaEfr1.js.map +0 -1
  403. package/dist/chunks/pk-input-group-k7WV0pQI.js.map +0 -1
  404. package/dist/chunks/pk-input-group-text-C0VAdy0J.js.map +0 -1
  405. package/dist/chunks/pk-input-group-textarea-DOG1NIlE.js.map +0 -1
  406. package/dist/chunks/pk-lightswitch-FH5ZxMG2.js.map +0 -1
  407. package/dist/chunks/pk-option-Cx52kLmz.js.map +0 -1
  408. package/dist/chunks/pk-option-group-CYo9Ukue.js.map +0 -1
  409. package/dist/chunks/pk-popover-209LdoPr.js.map +0 -1
  410. package/dist/chunks/pk-popup-0EIt9X_W.js.map +0 -1
  411. package/dist/chunks/pk-radio-group-CruMBeeF.js.map +0 -1
  412. package/dist/chunks/pk-radio-jgj6A0Wy.js.map +0 -1
  413. package/dist/chunks/pk-scroll-area-BaqN798b.js.map +0 -1
  414. package/dist/chunks/pk-select-UUH7FE4H.js.map +0 -1
  415. package/dist/chunks/pk-separator-Bcxg_GO2.js.map +0 -1
  416. package/dist/chunks/pk-spinner-CN365srE.js.map +0 -1
  417. package/dist/chunks/pk-state-panel-DPP7t-er.js.map +0 -1
  418. package/dist/chunks/pk-status-CYcadu0Q.js.map +0 -1
  419. package/dist/chunks/pk-tab-BmXNyDg7.js.map +0 -1
  420. package/dist/chunks/pk-tab-heading-GZHVmCAd.js.map +0 -1
  421. package/dist/chunks/pk-tab-panel-OpM3f_cm.js.map +0 -1
  422. package/dist/chunks/pk-tabs-x26NAw-V.js.map +0 -1
  423. package/dist/chunks/pk-textarea-CBijEmcV.js.map +0 -1
  424. package/dist/chunks/pk-time-picker-D-u5-7pf.js.map +0 -1
  425. package/dist/chunks/pk-tiptap-content-BGxMO3T4.js.map +0 -1
  426. package/dist/chunks/pk-tiptap-editor-BeuyzH5l.js.map +0 -1
  427. package/dist/chunks/pk-tiptap-input-CQojaxDH.js.map +0 -1
  428. package/dist/chunks/pk-toggle-CAtGO_Le.js.map +0 -1
  429. package/dist/chunks/pk-toggle-group-CLso6OE7.js.map +0 -1
  430. package/dist/chunks/pk-tooltip-C6yb4CXI.js.map +0 -1
  431. package/dist/chunks/register-BDO_LUHK.js +0 -154
  432. package/dist/chunks/register-BDO_LUHK.js.map +0 -1
  433. package/dist-loader/chunks/rolldown-runtime-CzwdidQP.js +0 -13
  434. package/dist-loader/chunks/supports-popover-COjbi2RP.js +0 -5
  435. package/dist-loader/chunks/tiptap.styles-BckAim0_.js +0 -1848
  436. /package/dist-loader/chunks/{animate-with-class-BpZi7v-y.js → animate-with-class-CjTZI0NU.js} +0 -0
  437. /package/dist-loader/chunks/{field-labels-D7ccWdRn.js → field-labels-pY-gQDwQ.js} +0 -0
  438. /package/dist-loader/chunks/{has-slot-BvdEcnpm.js → has-slot-DJv86HKx.js} +0 -0
  439. /package/dist-loader/chunks/{mirror-validator-9X0wdFnh.js → mirror-validator-BkZlEv1Z.js} +0 -0
  440. /package/dist-loader/chunks/{overlay-lifecycle-CSIBJZgQ.js → overlay-lifecycle-C582MGBJ.js} +0 -0
  441. /package/dist-loader/chunks/{pk-clear-BL8m1NyC.js → pk-clear-DHxP_2cm.js} +0 -0
  442. /package/dist-loader/chunks/{popup-placement-animation-BQdKabXq.js → popup-placement-animation-ClUYI79z.js} +0 -0
  443. /package/dist-loader/chunks/{popup-pointer-BNwlPGKA.js → popup-pointer-Bh_d205v.js} +0 -0
  444. /package/dist-loader/chunks/{registry-BanyScVR.js → registry-CJc164pT.js} +0 -0
  445. /package/dist-loader/chunks/{required-validator-DCTovZ6r.js → required-validator-I58oJGZ3.js} +0 -0
  446. /package/dist-loader/chunks/{svg-C6YcJMk9.js → svg-BRgqS9vA.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-checkbox-select-6OS0wFYO.js","names":["_decorate"],"sources":["../../src/components/checkbox-select/pk-checkbox-select.styles.ts","../../src/components/checkbox-select/pk-checkbox-select.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const pkCheckboxSelectStyles = css`\n @layer pk-component {\n :host {\n display: block;\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-sm);\n line-height: var(--pk-line-height);\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .options {\n display: flex;\n flex-direction: column;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n .options--horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n ::slotted(pk-checkbox),\n pk-checkbox {\n display: block;\n }\n\n .options--horizontal pk-checkbox.all-option {\n width: 100%;\n }\n }\n`;\n","import { html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, state } from '../../decorators.js';\nimport type { ComplexAttributeConverter, PropertyValues } from 'lit';\n\nimport { PkElement } from '../../base/pk-element.js';\n// Side-effect import — option rows are created as `pk-checkbox` in the shadow tree.\nimport '../checkbox/pk-checkbox.js';\nimport type { PkCheckbox } from '../checkbox/pk-checkbox.js';\nimport { pkCheckboxSelectStyles } from './pk-checkbox-select.styles.js';\n\nexport const ALL_VALUE = '*' as const;\n\nexport type PkCheckboxSelectOption = {\n label: string;\n value: string;\n};\n\nexport type PkCheckboxSelectValue = typeof ALL_VALUE | string[];\n\nexport type PkCheckboxSelectOrientation = 'horizontal' | 'vertical';\n\n/** JSON array for Craft/Twig + docs HTML; property assignment still preferred in JS. */\nconst optionsConverter: ComplexAttributeConverter<PkCheckboxSelectOption[]> = {\n fromAttribute(value) {\n if (!value) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed)\n ? parsed\n .filter((item): item is PkCheckboxSelectOption => Boolean(item && typeof item === 'object' && 'value' in item))\n .map((item) => ({\n label: String((item as PkCheckboxSelectOption).label ?? (item as PkCheckboxSelectOption).value),\n value: String((item as PkCheckboxSelectOption).value),\n }))\n : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return JSON.stringify(value ?? []);\n },\n};\n\n/** `*` for all-selected, otherwise a JSON string array. */\nconst valueConverter: ComplexAttributeConverter<PkCheckboxSelectValue> = {\n fromAttribute(value) {\n if (value == null || value === '') {\n return [];\n }\n\n if (value === '*') {\n return ALL_VALUE;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n if (parsed === '*') {\n return ALL_VALUE;\n }\n\n return Array.isArray(parsed) ? parsed.map(String) : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return value === ALL_VALUE ? '*' : JSON.stringify(value ?? []);\n },\n};\n\n/**\n * Multi-select checkbox group — options via the `options` property/attribute (not slotted\n * checkboxes). Wrap in `pk-field` for label/instructions (mirrors React `CheckboxSelect` + `FieldLayout`).\n *\n * @fires pk-change - `{ value: string[] | '*' }`\n *\n * @csspart base - Checkbox options container\n */\n@customElement('pk-checkbox-select')\nexport class PkCheckboxSelect extends PkElement {\n static override styles = pkCheckboxSelectStyles;\n\n @property({ attribute: 'options', converter: optionsConverter })\n options: PkCheckboxSelectOption[] = [];\n\n /** Selected values, or `*` when the All option is active. */\n @property({ attribute: 'value', converter: valueConverter })\n value: PkCheckboxSelectValue = [];\n @property({ type: Boolean, attribute: 'show-all-option' })\n showAllOption = false;\n\n @property({ attribute: 'all-label' })\n allLabel = 'All';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ reflect: true })\n orientation: PkCheckboxSelectOrientation = 'vertical';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n @state()\n private optionElements: PkCheckbox[] = [];\n\n private allOptionElement: PkCheckbox | null = null;\n\n override connectedCallback(): void {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'group');\n }\n\n super.connectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('options') || changed.has('showAllOption')) {\n this.rebuildOptionElements();\n return;\n }\n\n if (changed.has('value') || changed.has('disabled')) {\n this.updateOptionStates();\n }\n }\n\n override firstUpdated(): void {\n this.rebuildOptionElements();\n }\n\n override focus(options?: FocusOptions): void {\n const first = this.optionElements.find((element) => !element.disabled);\n\n first?.focus(options);\n }\n\n private get isAllSelected(): boolean {\n return this.value === ALL_VALUE;\n }\n\n private get selectedValues(): string[] {\n if (this.isAllSelected) {\n return this.options.map((option) => option.value);\n }\n\n return Array.isArray(this.value) ? this.value : [];\n }\n\n private dispatchValueChange(): void {\n const detailValue = this.isAllSelected ? ALL_VALUE : [...this.selectedValues];\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value: detailValue },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleAllChange = (event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n this.value = event.detail.checked ? ALL_VALUE : [];\n this.dispatchValueChange();\n };\n\n private handleItemChange = (optionValue: string, event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n\n if (this.isAllSelected) {\n return;\n }\n\n const checked = event.detail.checked;\n const current = this.selectedValues;\n this.value = checked\n ? [...current, optionValue]\n : current.filter((value) => value !== optionValue);\n\n this.dispatchValueChange();\n };\n\n private rebuildOptionElements(): void {\n const container = this.shadowRoot?.querySelector('.options');\n\n if (!container) {\n return;\n }\n\n for (const element of this.optionElements) {\n element.remove();\n }\n\n this.optionElements = [];\n this.allOptionElement = null;\n\n if (this.showAllOption) {\n const allCheckbox = document.createElement('pk-checkbox') as PkCheckbox;\n allCheckbox.classList.add('all-option');\n allCheckbox.append(this.allLabel);\n allCheckbox.addEventListener('pk-change', this.handleAllChange as EventListener);\n\n container.append(allCheckbox);\n this.allOptionElement = allCheckbox;\n this.optionElements.push(allCheckbox);\n }\n\n for (const option of this.options) {\n const checkbox = document.createElement('pk-checkbox') as PkCheckbox;\n checkbox.checkboxValue = option.value;\n checkbox.append(option.label);\n checkbox.addEventListener('pk-change', (event) => {\n this.handleItemChange(option.value, event as CustomEvent<{ checked: boolean }>);\n });\n\n container.append(checkbox);\n this.optionElements.push(checkbox);\n }\n\n this.updateOptionStates();\n }\n\n private updateOptionStates(): void {\n if (this.allOptionElement) {\n this.allOptionElement.checked = this.isAllSelected;\n this.allOptionElement.disabled = this.disabled;\n }\n\n for (const option of this.options) {\n const checkbox = this.optionElements.find(\n (element) => element !== this.allOptionElement && element.checkboxValue === option.value,\n );\n\n if (!checkbox) {\n continue;\n }\n\n checkbox.checked = this.isAllSelected || this.selectedValues.includes(option.value);\n checkbox.disabled = this.disabled || this.isAllSelected;\n }\n }\n\n override render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n options: true,\n 'options--horizontal': this.orientation === 'horizontal',\n })}\n ></div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-checkbox-select': PkCheckboxSelect;\n }\n}\n"],"mappings":"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"}
@@ -12,4 +12,4 @@ var PkClearEvent = class extends Event {
12
12
  //#endregion
13
13
  export { PkClearEvent as t };
14
14
 
15
- //# sourceMappingURL=pk-clear-LzxwxEX7.js.map
15
+ //# sourceMappingURL=pk-clear-DHxP_2cm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pk-clear-LzxwxEX7.js","names":[],"sources":["../../src/events/pk-clear.ts"],"sourcesContent":["/** Fired when a form control's value is cleared — mirrors `pk-clear`. */\nexport class PkClearEvent extends Event {\n constructor() {\n super('pk-clear', { bubbles: true, cancelable: false, composed: true });\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-clear': PkClearEvent;\n }\n}\n"],"mappings":";;AACA,IAAa,eAAb,cAAkC,MAAM;CACpC,cAAc;AACV,QAAM,YAAY;GAAE,SAAS;GAAM,YAAY;GAAO,UAAU;GAAM,CAAC"}
1
+ {"version":3,"file":"pk-clear-DHxP_2cm.js","names":[],"sources":["../../src/events/pk-clear.ts"],"sourcesContent":["/** Fired when a form control's value is cleared — mirrors `pk-clear`. */\nexport class PkClearEvent extends Event {\n constructor() {\n super('pk-clear', { bubbles: true, cancelable: false, composed: true });\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-clear': PkClearEvent;\n }\n}\n"],"mappings":";;AACA,IAAa,eAAb,cAAkC,MAAM;CACpC,cAAc;EACV,MAAM,YAAY;GAAE,SAAS;GAAM,YAAY;GAAO,UAAU;EAAK,CAAC;CAC1E;AACJ"}
@@ -1,7 +1,8 @@
1
- import { a as query, i as property, o as state, s as customElement, t as __decorate } from "./decorate-R0X811qp.js";
2
- import { t as PkFormAssociatedElement } from "./pk-form-associated-element-MqaHdIoH.js";
3
- import { t as MirrorValidator } from "./mirror-validator-Cszpqlxk.js";
4
- import { t as formControlStyles } from "./form-control.styles-BHwSsx_y.js";
1
+ import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
2
+ import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
3
+ import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
4
+ import { t as MirrorValidator } from "./mirror-validator-BkZlEv1Z.js";
5
+ import { t as formControlStyles } from "./form-control.styles-CQ93gnVf.js";
5
6
  import { css, html } from "lit";
6
7
  import { CodeMirrorHost, computeCodeEditorMinHeight } from "@verbb/plugin-kit-codemirror-core";
7
8
  //#region src/components/code-editor/pk-code-editor.styles.ts
@@ -209,4 +210,4 @@ PkCodeEditor = __decorate([customElement("pk-code-editor")], PkCodeEditor);
209
210
  //#endregion
210
211
  export { PkCodeEditor as t };
211
212
 
212
- //# sourceMappingURL=pk-code-editor-C_PqjR75.js.map
213
+ //# sourceMappingURL=pk-code-editor-vZriNR67.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-code-editor-vZriNR67.js","names":["_decorate"],"sources":["../../src/components/code-editor/pk-code-editor.styles.ts","../../src/components/code-editor/pk-code-editor.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const pkCodeEditorStyles = css`\n @layer pk-component {\n :host {\n display: block;\n width: 100%;\n font-family: var(--pk-font-family);\n }\n\n .shell {\n overflow: hidden;\n border: 1px solid rgba(96, 125, 159, 0.4);\n border-radius: var(--pk-radius-sm);\n background: #ffffff;\n }\n\n .shell:focus-within {\n border-color: var(--pk-color-sky-600);\n box-shadow:\n 0 0 0 1px var(--pk-color-sky-600),\n 0 0 4px 0 color-mix(in srgb, var(--pk-color-sky-600) 70%, transparent);\n }\n\n :host([invalid]) .shell,\n :host(:state(user-invalid)) .shell {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([invalid]) .shell:focus-within,\n :host(:state(user-invalid)) .shell:focus-within {\n border-color: var(--pk-color-rose-600);\n box-shadow:\n 0 0 0 1px var(--pk-color-rose-600),\n 0 0 4px 0 color-mix(in srgb, var(--pk-color-rose-600) 70%, transparent);\n }\n\n :host([disabled]),\n :host([readonly]) {\n opacity: 0.7;\n }\n\n .editor-mount {\n min-height: var(--pk-code-editor-min-height, 12rem);\n }\n\n .editor-mount .cm-editor {\n min-height: inherit;\n }\n\n .mirror-input {\n display: none;\n }\n }\n`;\n","import { html } from 'lit';\nimport { customElement, property, query, state } from '../../decorators.js';\nimport type { PropertyValues } from 'lit';\nimport {\n CodeMirrorHost,\n computeCodeEditorMinHeight,\n type CodeEditorLanguage,\n} from '@verbb/plugin-kit-codemirror-core';\n\nimport { formControlStyles } from '../../base/form-control.styles.js';\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { MirrorValidator } from '../../validators/index.js';\nimport { pkCodeEditorStyles } from './pk-code-editor.styles.js';\n\n@customElement('pk-code-editor')\nexport class PkCodeEditor extends PkFormAssociatedElement {\n static override styles = [formControlStyles, pkCodeEditorStyles];\n\n static override get validators() {\n return [...super.validators, MirrorValidator()];\n }\n\n override assumeInteractionOn = ['blur', 'input'];\n\n @query('.editor-mount')\n private editorMount!: HTMLDivElement;\n\n @query('.mirror-input')\n override input!: HTMLInputElement;\n\n private readonly host = new CodeMirrorHost();\n\n private hasInitializedEditor = false;\n\n private _value: string | null = null;\n\n @property()\n language: CodeEditorLanguage = 'html';\n\n @property({ type: Number, attribute: 'tab-size' })\n tabSize = 4;\n\n @property({ type: Boolean, attribute: 'line-numbers' })\n lineNumbers = true;\n\n @property({ type: Number })\n rows = 12;\n\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n get value(): string {\n if (this.valueHasChanged) {\n return this._value ?? '';\n }\n\n return this._value ?? this.defaultValue ?? '';\n }\n\n @state()\n set value(val: string | null) {\n const next = val ?? '';\n\n if (this._value === next) {\n return;\n }\n\n this.valueHasChanged = true;\n this._value = next;\n }\n\n @property({ attribute: 'value', reflect: true })\n defaultValue: string | null = '';\n\n get editorView() {\n return this.host.view;\n }\n\n protected override syncFormValue(): void {\n this.setValue(this.value || '');\n\n if (this.input) {\n this.input.value = this.value || '';\n }\n }\n\n protected override resetToDefaultValue(): void {\n this.valueHasChanged = false;\n this._value = null;\n this.syncEditorContent();\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (typeof state === 'string') {\n this.value = state;\n this.syncEditorContent();\n }\n }\n\n override disconnectedCallback(): void {\n this.host.destroy();\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if ((changed.has('value') && !changed.has('defaultValue')) || (changed.has('defaultValue') && !this.valueHasChanged)) {\n this.syncEditorContent();\n }\n\n if (changed.has('disabled') || changed.has('readonly')) {\n this.host.setEditable(!this.disabled && !this.readonly);\n }\n\n if (\n this.hasInitializedEditor\n && (changed.has('language') || changed.has('tabSize') || changed.has('lineNumbers') || changed.has('rows'))\n ) {\n this.remountEditor();\n }\n\n super.updated(changed);\n }\n\n override firstUpdated(): void {\n this.style.setProperty('--pk-code-editor-min-height', computeCodeEditorMinHeight(this.rows));\n this.mountEditor();\n this.hasInitializedEditor = true;\n this.syncFormValue();\n }\n\n private mountEditor(): void {\n this.host.mount({\n parent: this.editorMount,\n value: this.value,\n language: this.language,\n tabSize: this.tabSize,\n lineNumbers: this.lineNumbers,\n rows: this.rows,\n editable: !this.disabled && !this.readonly,\n onUpdate: (nextValue) => {\n this.value = nextValue;\n\n if (this.input) {\n this.input.value = nextValue;\n }\n\n this.syncFormValue();\n this.emitValueChange(nextValue);\n },\n onBlur: () => {\n this.dispatchEvent(new Event('blur', { bubbles: true, composed: true }));\n },\n });\n }\n\n private remountEditor(): void {\n this.host.destroy();\n this.style.setProperty('--pk-code-editor-min-height', computeCodeEditorMinHeight(this.rows));\n this.mountEditor();\n }\n\n private syncEditorContent(): void {\n this.host.setValue(this.value);\n }\n\n private emitValueChange(value: string): void {\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value },\n bubbles: true,\n composed: true,\n }));\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n override render() {\n return html`\n <div class=\"shell\" part=\"shell\">\n <div class=\"editor-mount\" part=\"editor\"></div>\n <input class=\"mirror-input\" type=\"text\" .value=${this.value} readonly tabindex=\"-1\" aria-hidden=\"true\" />\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-code-editor': PkCodeEditor;\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { a as query, i as property, o as state, s as customElement, t as __decorate } from "./decorate-R0X811qp.js";
2
- import { t as PkFormAssociatedElement } from "./pk-form-associated-element-MqaHdIoH.js";
3
- import { t as MirrorValidator } from "./mirror-validator-Cszpqlxk.js";
4
- import { t as RequiredValidator } from "./required-validator-CaRnQk1V.js";
1
+ import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
2
+ import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
3
+ import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
4
+ import { t as MirrorValidator } from "./mirror-validator-BkZlEv1Z.js";
5
+ import { t as RequiredValidator } from "./required-validator-I58oJGZ3.js";
5
6
  import { css, html, nothing } from "lit";
6
7
  import { classMap } from "lit/directives/class-map.js";
7
8
  //#region src/components/color-input/pk-color-input.styles.ts
@@ -402,4 +403,4 @@ PkColorInput = __decorate([customElement("pk-color-input")], PkColorInput);
402
403
  //#endregion
403
404
  export { PkColorInput as t };
404
405
 
405
- //# sourceMappingURL=pk-color-input-4LDV0Z3W.js.map
406
+ //# sourceMappingURL=pk-color-input-Csbm4ROT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-color-input-Csbm4ROT.js","names":["_decorate"],"sources":["../../src/components/color-input/pk-color-input.styles.ts","../../src/components/color-input/pk-color-input.ts"],"sourcesContent":["import { css } from 'lit';\n\n/**\n * Size scale matches pk-input (xs / sm / default / lg). Metrics are shifted so\n * former `lg` (2.125rem / ~34px) is default — aligned with base input chrome.\n * `xl` is kept as a deprecated alias of `lg`.\n */\nexport const pkColorInputStyles = css`\n @layer pk-component {\n :host {\n display: inline-block;\n position: relative;\n /* Former lg min-width — default now matches input default chrome. */\n min-width: 6.75rem;\n font-family: var(--pk-font-family);\n vertical-align: middle;\n }\n\n :host([size='xs']) {\n min-width: 5.5rem;\n }\n\n :host([size='sm']) {\n min-width: 6.125rem;\n }\n\n :host([size='lg']),\n :host([size='xl']) {\n min-width: 7.375rem;\n }\n\n :host([fit-cell]) {\n display: block;\n width: 100%;\n min-width: 0;\n max-width: 100%;\n height: 100%;\n }\n\n :host([fit-cell]) .root {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .root {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n .swatch {\n position: absolute;\n top: 50%;\n left: 0.5rem;\n z-index: 2;\n width: 1.25rem;\n height: 1.25rem;\n transform: translateY(-50%);\n border-radius: var(--pk-radius-sm);\n }\n\n :host([size='xs']) .swatch {\n left: 0.375rem;\n width: 1rem;\n height: 1rem;\n }\n\n :host([size='sm']) .swatch {\n left: 0.375rem;\n width: 1.25rem;\n height: 1.25rem;\n }\n\n :host([size='lg']) .swatch,\n :host([size='xl']) .swatch {\n left: 0.5rem;\n width: 1.5rem;\n height: 1.5rem;\n }\n\n :host([fit-cell]) .swatch {\n left: 0.5rem;\n width: 1rem;\n height: 1rem;\n }\n\n .swatch-preview {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.15);\n }\n\n .swatch-preview.is-transparent {\n background-color: #fff;\n background-image:\n linear-gradient(45deg, #d1d5db 25%, transparent 25%),\n linear-gradient(-45deg, #d1d5db 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, #d1d5db 75%),\n linear-gradient(-45deg, transparent 75%, #d1d5db 75%);\n background-size: 8px 8px;\n background-position: 0 0, 0 4px, 4px -4px, -4px 0;\n }\n\n .swatch-picker {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border: 0;\n opacity: 0;\n cursor: pointer;\n appearance: none;\n }\n\n .swatch-picker:disabled {\n cursor: not-allowed;\n }\n\n .hash {\n position: absolute;\n top: 50%;\n left: 2.125rem;\n z-index: 1;\n transform: translateY(-50%);\n color: var(--pk-color-gray-300);\n font-family: var(--pk-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);\n font-size: var(--pk-font-size-mono, 0.9em);\n line-height: var(--pk-line-height-mono, 1.5);\n pointer-events: none;\n user-select: none;\n }\n\n :host([size='xs']) .hash {\n left: 1.625rem;\n }\n\n :host([size='sm']) .hash {\n left: 2rem;\n }\n\n :host([size='lg']) .hash,\n :host([size='xl']) .hash {\n left: 2.5rem;\n }\n\n :host([fit-cell]) .hash {\n left: 1.75rem;\n }\n\n .hex-input {\n display: block;\n width: 100%;\n /* Former lg — matches pk-input default chrome (~34px). */\n height: 2.125rem;\n margin: 0;\n padding-inline: 3rem 0.75rem;\n border: var(--pk-input-border);\n border-radius: var(--pk-input-border-radius);\n background: var(--pk-input-bg);\n color: var(--pk-color-gray-700);\n font-family: var(--pk-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);\n font-size: var(--pk-font-size-mono, 0.9em);\n line-height: var(--pk-line-height-mono, 1.5);\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.12s ease, box-shadow 0.12s ease;\n }\n\n :host([size='xs']) .hex-input {\n height: 1.625rem;\n padding-inline: 2.25rem 0.625rem;\n }\n\n :host([size='sm']) .hex-input {\n height: 1.875rem;\n padding-inline: 2.75rem 0.75rem;\n }\n\n :host([size='lg']) .hex-input,\n :host([size='xl']) .hex-input {\n height: 2.375rem;\n padding-inline: 3.25rem 0.875rem;\n }\n\n :host([fit-cell]) .hex-input {\n width: 100%;\n max-width: 100%;\n height: 100%;\n padding-inline: 2.25rem 0.5rem;\n border: 0;\n border-radius: 0;\n background: transparent;\n }\n\n .hex-input:focus,\n .hex-input:focus-visible {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n }\n\n :host([invalid]) .hex-input:focus,\n :host([invalid]) .hex-input:focus-visible {\n border-color: var(--pk-color-rose-600);\n box-shadow: var(--pk-input-invalid-focus-shadow);\n }\n\n :host([fit-cell]:not([invalid])) .hex-input:focus,\n :host([fit-cell]:not([invalid])) .hex-input:focus-visible {\n box-shadow: inset 0 0 0 1px var(--pk-color-gray-200);\n }\n\n :host([fit-cell][invalid]) .hex-input,\n :host([fit-cell][invalid]) .hex-input:focus,\n :host([fit-cell][invalid]) .hex-input:focus-visible {\n box-shadow: inset 0 0 0 1px var(--pk-color-rose-600);\n }\n\n .hex-input:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n :host([invalid]) .hex-input {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([disabled]) .swatch {\n opacity: 0.5;\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 type { PropertyValues } from 'lit';\n\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { MirrorValidator, RequiredValidator } from '../../validators/index.js';\nimport { pkColorInputStyles } from './pk-color-input.styles.js';\n\n/** Public scale is xs / sm / default / lg (`xl` aliases `lg` for compatibility). */\nexport type PkColorInputSize = 'xs' | 'sm' | 'default' | 'lg' | 'xl';\n\nconst DEFAULT_COLOR = '#000000';\n\nfunction sanitizeHex(value: string): string {\n return String(value || '')\n .replace(/^#/, '')\n .replace(/[^0-9a-fA-F]/g, '')\n .slice(0, 6)\n .toLowerCase();\n}\n\nfunction isCompleteHex(value: string): boolean {\n return value.length === 3 || value.length === 6;\n}\n\nfunction expandShortHex(value: string): string {\n if (value.length !== 3) {\n return value;\n }\n\n return value.split('').map((char) => `${char}${char}`).join('');\n}\n\nfunction toPickerValue(hex: string): string {\n if (hex.length === 6) {\n return `#${hex}`;\n }\n\n if (hex.length === 3) {\n return `#${expandShortHex(hex)}`;\n }\n\n return DEFAULT_COLOR;\n}\n\n/**\n * Color input — swatch picker + hex text field (Craft ColorInput parity).\n * Form-associated; submits `#rrggbb` or empty string.\n *\n * @csspart swatch - Swatch container\n * @csspart input - Hex text input\n */\n@customElement('pk-color-input')\nexport class PkColorInput extends PkFormAssociatedElement {\n static override styles = pkColorInputStyles;\n\n static override get validators() {\n return [...super.validators, MirrorValidator(), RequiredValidator()];\n }\n\n override assumeInteractionOn = ['blur', 'input'];\n\n @property({ reflect: true })\n size: PkColorInputSize = 'default';\n\n @property({ type: Boolean, reflect: true, attribute: 'fit-cell' })\n fitCell = false;\n\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n @property()\n value = '';\n\n @property({ attribute: 'default-value' })\n defaultValue = '';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n @query('.hex-input')\n override input!: HTMLInputElement;\n\n @state()\n private hexValue = '';\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncHexFromValue();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n if (changed.has('value')) {\n this.syncHexFromValue();\n }\n\n super.willUpdate(changed);\n }\n\n private syncHexFromValue(): void {\n this.hexValue = sanitizeHex(this.value);\n }\n\n protected override get validationTarget(): HTMLElement {\n return this.input;\n }\n\n protected override syncFormValue(): void {\n const submitted = this.hexValue ? `#${this.hexValue}` : '';\n this.setFormValue(submitted, submitted);\n }\n\n protected override resetToDefaultValue(): void {\n this.value = this.defaultValue;\n this.hexValue = sanitizeHex(this.defaultValue);\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (typeof state === 'string') {\n this.value = state;\n this.hexValue = sanitizeHex(state);\n }\n }\n\n private emitChange(): void {\n const next = this.hexValue ? `#${this.hexValue}` : '';\n this.value = next;\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value: next },\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 handleHexInput(event: Event): void {\n // Readonly must not mutate the value even if a stray input event slips through.\n if (this.disabled || this.readonly) {\n return;\n }\n\n const nextHex = sanitizeHex((event.target as HTMLInputElement).value);\n this.hexValue = nextHex;\n this.emitChange();\n }\n\n private handlePickerChange(event: Event): void {\n if (this.disabled || this.readonly) {\n return;\n }\n\n const nextHex = sanitizeHex((event.target as HTMLInputElement).value);\n this.hexValue = nextHex;\n this.emitChange();\n }\n\n override render() {\n const previewColor = toPickerValue(this.hexValue);\n const isTransparent = !isCompleteHex(this.hexValue);\n\n return html`\n <div class=\"root\">\n <div part=\"swatch\" class=\"swatch\">\n <div\n class=${classMap({\n 'swatch-preview': true,\n 'is-transparent': isTransparent,\n })}\n style=${isTransparent ? nothing : `background-color: ${previewColor}`}\n ></div>\n <input\n part=\"picker\"\n class=\"swatch-picker\"\n type=\"color\"\n .value=${previewColor}\n ?disabled=${this.disabled || this.readonly}\n aria-label=\"Color picker\"\n @input=${this.handlePickerChange}\n />\n </div>\n <span class=\"hash\" aria-hidden=\"true\">#</span>\n <input\n part=\"input\"\n class=\"hex-input\"\n type=\"text\"\n inputmode=\"text\"\n autocomplete=\"off\"\n maxlength=\"6\"\n .value=${this.hexValue}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n aria-label=${this.ariaLabel ?? nothing}\n aria-invalid=${this.invalid ? 'true' : nothing}\n @input=${this.handleHexInput}\n />\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-color-input': PkColorInput;\n }\n}\n"],"mappings":"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"}
@@ -1,21 +1,22 @@
1
- import { t as icons_exports } from "./icons-B8siZLOe.js";
2
- import { a as query, i as property, o as state, s as customElement, t as __decorate } from "./decorate-R0X811qp.js";
3
- import { n as renderIconHtml } from "./render-BKGW1a68.js";
4
- import { t as HasSlotController } from "./has-slot-9zjTXvea.js";
5
- import { t as iconStyles } from "./icon.styles-pNyUmVtP.js";
6
- import { t as PkFormAssociatedElement } from "./pk-form-associated-element-MqaHdIoH.js";
7
- import { t as MirrorValidator } from "./mirror-validator-Cszpqlxk.js";
8
- import { i as uniqueId, t as LiveRegion } from "./focus-C6pY4Ym4.js";
9
- import { i as unregisterDismissible, n as isTopDismissible, r as registerDismissible } from "./dismissible-stack-B3BgzdQb.js";
10
- import { i as scrollIntoView } from "./scroll-lock-gTFrvIPu.js";
11
- import { t as PkClearEvent } from "./pk-clear-LzxwxEX7.js";
12
- import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "./overlay-lifecycle-CAoT0LE8.js";
13
- import "./pk-popup-0EIt9X_W.js";
14
- import { i as waitForPopupReposition, r as syncPopupPlacementAnimation } from "./popup-placement-animation-GvFXER7D.js";
15
- import { a as isListboxTypeToSelectKey, i as handleListboxKeyDown, n as LISTBOX_NAVIGATION_KEYS } from "./sync-listbox-separators-CPFtrpNq.js";
16
- import { i as waitForPopupContentExitAnimation, n as AsyncOptionFetcher, r as syncFilteredOptions, t as matchesOptionFilter } from "./option-filter-Cj5SvyzI.js";
17
- import { n as isPointerInsideOverlay, t as isEventInsideOverlay } from "./popup-pointer-BTS3Y6LE.js";
18
- import { t as popupContentAnimationStyles } from "./popup-content-animation.styles-EUnGV75J.js";
1
+ import { t as icons_exports } from "./icons-k1pvx6yX.js";
2
+ import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
3
+ import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
4
+ import { n as renderIconHtml } from "./render-DQZp_Rak.js";
5
+ import { t as HasSlotController } from "./has-slot-DJv86HKx.js";
6
+ import { t as iconStyles } from "./icon.styles-KWvfi7RV.js";
7
+ import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
8
+ import { t as MirrorValidator } from "./mirror-validator-BkZlEv1Z.js";
9
+ import { i as uniqueId, t as LiveRegion } from "./focus-DcVUPVqn.js";
10
+ import { i as unregisterDismissible, n as isTopDismissible, r as registerDismissible } from "./dismissible-stack-CwhtwAyo.js";
11
+ import { i as scrollIntoView } from "./scroll-lock-DE1pElMQ.js";
12
+ import { t as PkClearEvent } from "./pk-clear-DHxP_2cm.js";
13
+ import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "./overlay-lifecycle-C582MGBJ.js";
14
+ import "./pk-popup-DVE93VSV.js";
15
+ import { i as waitForPopupReposition, r as syncPopupPlacementAnimation } from "./popup-placement-animation-ClUYI79z.js";
16
+ import { a as isListboxTypeToSelectKey, i as handleListboxKeyDown, n as LISTBOX_NAVIGATION_KEYS } from "./sync-listbox-separators-saLEtPpJ.js";
17
+ import { i as waitForPopupContentExitAnimation, n as AsyncOptionFetcher, r as syncFilteredOptions, t as matchesOptionFilter } from "./option-filter-BkKyBg8L.js";
18
+ import { n as isPointerInsideOverlay, t as isEventInsideOverlay } from "./popup-pointer-Bh_d205v.js";
19
+ import { t as popupContentAnimationStyles } from "./popup-content-animation.styles-CJ8zGJz-.js";
19
20
  import { css, html, nothing } from "lit";
20
21
  import { unsafeSVG } from "lit/directives/unsafe-svg.js";
21
22
  import { classMap } from "lit/directives/class-map.js";
@@ -1414,9 +1415,10 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
1414
1415
  this.syncHasValueAttribute();
1415
1416
  this.emitValueChange();
1416
1417
  }
1417
- if (this.shouldReturnFocusToInput(source)) if (this.usesPopupMode) this.popupTrigger?.focus({ preventScroll: true });
1418
- else this.activeInput?.focus({ preventScroll: true });
1419
- else {
1418
+ if (this.shouldReturnFocusToInput(source)) {
1419
+ if (this.usesPopupMode) this.popupTrigger?.focus({ preventScroll: true });
1420
+ else this.activeInput?.focus({ preventScroll: true });
1421
+ } else {
1420
1422
  this.activeInput?.blur();
1421
1423
  this.popupTrigger?.blur();
1422
1424
  }
@@ -1970,4 +1972,4 @@ PkCombobox = __decorate([customElement("pk-combobox")], PkCombobox);
1970
1972
  //#endregion
1971
1973
  export { PkCreateEvent as n, PkCombobox as t };
1972
1974
 
1973
- //# sourceMappingURL=pk-combobox-BeddzAsl.js.map
1975
+ //# sourceMappingURL=pk-combobox-BrSBrldb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-combobox-BrSBrldb.js","names":["chevronDown","xmark","_decorate"],"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 if (changed.has('values') || changed.has('multiple')) {\n this.syncFormValue();\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-ciqZMK3B.js.map
68
+ //# sourceMappingURL=pk-connect.styles-oKhxa_m2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pk-connect.styles-ciqZMK3B.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-oKhxa_m2.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,8 +1,9 @@
1
- import { t as icons_exports } from "./icons-B8siZLOe.js";
2
- import { i as property, n as PkElement, o as state, s as customElement, t as __decorate } from "./decorate-R0X811qp.js";
3
- import { n as renderIconHtml } from "./render-BKGW1a68.js";
4
- import { t as HasSlotController } from "./has-slot-9zjTXvea.js";
5
- import "./pk-button-DCtNLEPr.js";
1
+ import { t as icons_exports } from "./icons-k1pvx6yX.js";
2
+ import { i as customElement, n as PkElement, t as __decorate } from "./decorate-Br_PE9pq.js";
3
+ import { r as state, t as property } from "./decorators-BkErmuYK.js";
4
+ import { n as renderIconHtml } from "./render-DQZp_Rak.js";
5
+ import { t as HasSlotController } from "./has-slot-DJv86HKx.js";
6
+ import "./pk-button-ntSVrer_.js";
6
7
  import { css, html } from "lit";
7
8
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
8
9
  //#region src/events/pk-copy.ts
@@ -198,4 +199,4 @@ PkCopyButton = __decorate([customElement("pk-copy-button")], PkCopyButton);
198
199
  //#endregion
199
200
  export { PkCopyEvent as a, PkCopyErrorEvent as i, copyToClipboard as n, resolveCopyValue as r, PkCopyButton as t };
200
201
 
201
- //# sourceMappingURL=pk-copy-button-KegSx46o.js.map
202
+ //# sourceMappingURL=pk-copy-button-5i9v_zmu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-copy-button-5i9v_zmu.js","names":["record","check","copy","_decorate"],"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 border-color: var(--pk-copy-button-border-color);\n border-radius: var(--pk-copy-button-radius);\n background: var(--pk-copy-button-background);\n color: var(--pk-copy-button-color);\n }\n\n pk-button::part(base):hover:not(:disabled) {\n border-color: var(\n --pk-copy-button-hover-border-color,\n var(--pk-copy-button-border-color)\n );\n background: var(--pk-copy-button-hover-background);\n color: var(--pk-copy-button-hover-color, var(--pk-copy-button-color));\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, copy, renderIconHtml } from '../../icons/index.js';\nimport { HasSlotController } from '../../internal/has-slot.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);\nconst COPY_ICON = renderIconHtml(copy).replace(\n '<svg',\n '<svg slot=\"start\" part=\"copy-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 - Custom copy icon. The component supplies a copy icon by default.\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 copy-icon - Copy icon shown before copying\n * @csspart success-icon - Success icon shown after copying\n *\n * @cssproperty --pk-copy-button-background - Trigger background override.\n * @cssproperty --pk-copy-button-border-color - Trigger border colour override.\n * @cssproperty --pk-copy-button-color - Trigger foreground colour override.\n * @cssproperty --pk-copy-button-hover-background - Trigger hover background override.\n * @cssproperty --pk-copy-button-hover-border-color - Trigger hover border colour override.\n * @cssproperty --pk-copy-button-hover-color - Trigger hover foreground colour override.\n * @cssproperty --pk-copy-button-radius - Trigger corner radius override.\n */\n@customElement('pk-copy-button')\nexport class PkCopyButton extends PkElement {\n static override styles = pkCopyButtonStyles;\n\n private readonly hasSlotController = new HasSlotController(this, 'icon');\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 /** Accessible name shown while the copy action is available. */\n @property({ attribute: 'aria-label' })\n ariaLabel = 'Copy';\n\n /** Accessible name shown briefly after copying succeeds. */\n @property({ attribute: 'copied-label' })\n copiedLabel = 'Copied';\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 /** Copy the configured value and emit the corresponding result event. */\n async copy(): 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=${this.copied ? this.copiedLabel : this.ariaLabel}\n ?disabled=${this.disabled}\n @click=${this.copy}\n >\n ${this.copied\n ? unsafeHTML(SUCCESS_ICON)\n : this.hasSlotController.test('icon')\n ? html`<slot name=\"icon\" slot=\"start\"></slot>`\n : unsafeHTML(COPY_ICON)}\n </pk-button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-copy-button': PkCopyButton;\n }\n}\n"],"mappings":"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"}