@verbb/plugin-kit-web 2.0.15 → 2.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/custom-elements.json +39571 -0
  3. package/dist/base/pk-form-associated-element.d.ts +17 -1
  4. package/dist/base/pk-form-associated-element.d.ts.map +1 -1
  5. package/dist/chunks/{animate-with-class-ZJeCOKB3.js → animate-with-class-CsDwYnXL.js} +1 -1
  6. package/dist/chunks/{animate-with-class-ZJeCOKB3.js.map → animate-with-class-CsDwYnXL.js.map} +1 -1
  7. package/dist/chunks/{autoloader-DPX9YYZs.js → autoloader-dJO3tYOX.js} +2 -2
  8. package/dist/chunks/{autoloader-DPX9YYZs.js.map → autoloader-dJO3tYOX.js.map} +1 -1
  9. package/dist/chunks/{component-registry-CNB8PbP_.js → component-registry-D34fm8xW.js} +5 -1
  10. package/dist/chunks/component-registry-D34fm8xW.js.map +1 -0
  11. package/dist/chunks/{field-labels-CoU9dnNq.js → field-labels-CmuAW8Cl.js} +1 -1
  12. package/dist/chunks/{field-labels-CoU9dnNq.js.map → field-labels-CmuAW8Cl.js.map} +1 -1
  13. package/dist/chunks/option-filter-BQqr8Z21.js +121 -0
  14. package/dist/chunks/option-filter-BQqr8Z21.js.map +1 -0
  15. package/dist/chunks/pk-autocomplete-kOT0Zlld.js +992 -0
  16. package/dist/chunks/pk-autocomplete-kOT0Zlld.js.map +1 -0
  17. package/dist/chunks/{pk-button-BWGDkuzc.js → pk-button-BrH4u4Qr.js} +8 -4
  18. package/dist/chunks/{pk-button-BWGDkuzc.js.map → pk-button-BrH4u4Qr.js.map} +1 -1
  19. package/dist/chunks/{pk-calendar-enTOUCRD.js → pk-calendar-Z7Y0PjeY.js} +1 -1
  20. package/dist/chunks/{pk-calendar-enTOUCRD.js.map → pk-calendar-Z7Y0PjeY.js.map} +1 -1
  21. package/dist/chunks/{pk-checkbox-CvZwJZn_.js → pk-checkbox-CfV1uDdC.js} +2 -2
  22. package/dist/chunks/{pk-checkbox-CvZwJZn_.js.map → pk-checkbox-CfV1uDdC.js.map} +1 -1
  23. package/dist/chunks/{pk-checkbox-select-DclPoyDM.js → pk-checkbox-select-DeCaI3a0.js} +2 -2
  24. package/dist/chunks/{pk-checkbox-select-DclPoyDM.js.map → pk-checkbox-select-DeCaI3a0.js.map} +1 -1
  25. package/dist/chunks/{pk-code-editor-CrKnJUyi.js → pk-code-editor-BG9sG_Fy.js} +2 -2
  26. package/dist/chunks/{pk-code-editor-CrKnJUyi.js.map → pk-code-editor-BG9sG_Fy.js.map} +1 -1
  27. package/dist/chunks/{pk-color-input-DXdqNCK7.js → pk-color-input-CncNce1C.js} +2 -2
  28. package/dist/chunks/{pk-color-input-DXdqNCK7.js.map → pk-color-input-CncNce1C.js.map} +1 -1
  29. package/dist/chunks/{pk-combobox-BLft8AXy.js → pk-combobox-Dn7UJ_CV.js} +48 -91
  30. package/dist/chunks/pk-combobox-Dn7UJ_CV.js.map +1 -0
  31. package/dist/chunks/{pk-connect.styles-DshgIW2n.js → pk-connect.styles-BhW406jt.js} +1 -1
  32. package/dist/chunks/{pk-connect.styles-DshgIW2n.js.map → pk-connect.styles-BhW406jt.js.map} +1 -1
  33. package/dist/chunks/{pk-copy-button-asOLQkqk.js → pk-copy-button-BVaOLtYG.js} +46 -5
  34. package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +1 -0
  35. package/dist/chunks/{pk-date-picker-Bri3kZ6x.js → pk-date-picker-DfIvmoZ1.js} +5 -5
  36. package/dist/chunks/{pk-date-picker-Bri3kZ6x.js.map → pk-date-picker-DfIvmoZ1.js.map} +1 -1
  37. package/dist/chunks/{pk-dialog-BbEfvb0g.js → pk-dialog-VMQqLW1f.js} +2 -2
  38. package/dist/chunks/{pk-dialog-BbEfvb0g.js.map → pk-dialog-VMQqLW1f.js.map} +1 -1
  39. package/dist/chunks/{pk-dropdown-item-BoZTGWMU.js → pk-dropdown-item-BZQS87U0.js} +2 -2
  40. package/dist/chunks/{pk-dropdown-item-BoZTGWMU.js.map → pk-dropdown-item-BZQS87U0.js.map} +1 -1
  41. package/dist/chunks/{pk-dropdown-label-Da28F917.js → pk-dropdown-label-CRNWMWQd.js} +1 -1
  42. package/dist/chunks/{pk-dropdown-label-Da28F917.js.map → pk-dropdown-label-CRNWMWQd.js.map} +1 -1
  43. package/dist/chunks/{pk-dropdown-menu-CfZc7dIz.js → pk-dropdown-menu-D60p2-9X.js} +3 -3
  44. package/dist/chunks/{pk-dropdown-menu-CfZc7dIz.js.map → pk-dropdown-menu-D60p2-9X.js.map} +1 -1
  45. package/dist/chunks/{pk-editable-table-Cn4WXqAo.js → pk-editable-table-BQ47MXpu.js} +17 -19
  46. package/dist/chunks/pk-editable-table-BQ47MXpu.js.map +1 -0
  47. package/dist/chunks/{pk-field-NL4KdFZC.js → pk-field-UAlMq6mQ.js} +2 -2
  48. package/dist/chunks/{pk-field-NL4KdFZC.js.map → pk-field-UAlMq6mQ.js.map} +1 -1
  49. package/dist/chunks/{pk-form-associated-element-9M2NzOE2.js → pk-form-associated-element-CCQALRGB.js} +14 -2
  50. package/dist/chunks/pk-form-associated-element-CCQALRGB.js.map +1 -0
  51. package/dist/chunks/pk-image-browser-BXFDfch3.js +1364 -0
  52. package/dist/chunks/pk-image-browser-BXFDfch3.js.map +1 -0
  53. package/dist/chunks/{pk-input-DDkIXOkt.js → pk-input-CF_icEtR.js} +76 -30
  54. package/dist/chunks/pk-input-CF_icEtR.js.map +1 -0
  55. package/dist/chunks/{pk-input-group-CRPSBFhX.js → pk-input-group-CWdoVhkH.js} +1 -1
  56. package/dist/chunks/{pk-input-group-CRPSBFhX.js.map → pk-input-group-CWdoVhkH.js.map} +1 -1
  57. package/dist/chunks/{pk-input-group-addon-B0StOmTJ.js → pk-input-group-addon-ClBkGmAw.js} +1 -1
  58. package/dist/chunks/{pk-input-group-addon-B0StOmTJ.js.map → pk-input-group-addon-ClBkGmAw.js.map} +1 -1
  59. package/dist/chunks/{pk-input-group-button-CnKajvsP.js → pk-input-group-button-CHQHsWd4.js} +1 -1
  60. package/dist/chunks/{pk-input-group-button-CnKajvsP.js.map → pk-input-group-button-CHQHsWd4.js.map} +1 -1
  61. package/dist/chunks/{pk-input-group-input-mllffsjQ.js → pk-input-group-input-oNnqMBGU.js} +1 -1
  62. package/dist/chunks/{pk-input-group-input-mllffsjQ.js.map → pk-input-group-input-oNnqMBGU.js.map} +1 -1
  63. package/dist/chunks/{pk-input-group-text-DvaPJvh2.js → pk-input-group-text-HUxlXROB.js} +1 -1
  64. package/dist/chunks/{pk-input-group-text-DvaPJvh2.js.map → pk-input-group-text-HUxlXROB.js.map} +1 -1
  65. package/dist/chunks/{pk-input-group-textarea-CqYv8tUQ.js → pk-input-group-textarea-Cl2FNuw-.js} +1 -1
  66. package/dist/chunks/{pk-input-group-textarea-CqYv8tUQ.js.map → pk-input-group-textarea-Cl2FNuw-.js.map} +1 -1
  67. package/dist/chunks/{pk-lightswitch-DI1BeCmA.js → pk-lightswitch-D1qEFRxK.js} +3 -3
  68. package/dist/chunks/{pk-lightswitch-DI1BeCmA.js.map → pk-lightswitch-D1qEFRxK.js.map} +1 -1
  69. package/dist/chunks/{pk-option-MGj9SKOK.js → pk-option-DQZHV9jL.js} +3 -2
  70. package/dist/chunks/pk-option-DQZHV9jL.js.map +1 -0
  71. package/dist/chunks/{pk-option-group-Cs6N7mlP.js → pk-option-group-CCzJkBFp.js} +1 -1
  72. package/dist/chunks/{pk-option-group-Cs6N7mlP.js.map → pk-option-group-CCzJkBFp.js.map} +1 -1
  73. package/dist/chunks/{pk-popover-duyNosk2.js → pk-popover-KSIOYlbs.js} +3 -3
  74. package/dist/chunks/{pk-popover-duyNosk2.js.map → pk-popover-KSIOYlbs.js.map} +1 -1
  75. package/dist/chunks/{pk-radio-BK4D2Htu.js → pk-radio-B5XkMHy3.js} +1 -1
  76. package/dist/chunks/{pk-radio-BK4D2Htu.js.map → pk-radio-B5XkMHy3.js.map} +1 -1
  77. package/dist/chunks/{pk-radio-group-BRJIjOsR.js → pk-radio-group-ByrxGLdX.js} +3 -3
  78. package/dist/chunks/{pk-radio-group-BRJIjOsR.js.map → pk-radio-group-ByrxGLdX.js.map} +1 -1
  79. package/dist/chunks/{pk-scroll-area-BR6ckorh.js → pk-scroll-area-CdfNxYz8.js} +1 -1
  80. package/dist/chunks/{pk-scroll-area-BR6ckorh.js.map → pk-scroll-area-CdfNxYz8.js.map} +1 -1
  81. package/dist/chunks/{pk-select-C1s0OJr0.js → pk-select-DQtORz-v.js} +6 -4
  82. package/dist/chunks/pk-select-DQtORz-v.js.map +1 -0
  83. package/dist/chunks/{pk-separator-CHij3vEG.js → pk-separator-N-VyjYE6.js} +1 -1
  84. package/dist/chunks/{pk-separator-CHij3vEG.js.map → pk-separator-N-VyjYE6.js.map} +1 -1
  85. package/dist/chunks/{pk-status-D1IzTSI2.js → pk-status-BehQARDv.js} +1 -1
  86. package/dist/chunks/{pk-status-D1IzTSI2.js.map → pk-status-BehQARDv.js.map} +1 -1
  87. package/dist/chunks/{pk-tab-2MHunhlF.js → pk-tab-CTloD18e.js} +1 -1
  88. package/dist/chunks/{pk-tab-2MHunhlF.js.map → pk-tab-CTloD18e.js.map} +1 -1
  89. package/dist/chunks/{pk-tab-heading-BV6m_sT-.js → pk-tab-heading-Cjcgebxn.js} +1 -1
  90. package/dist/chunks/{pk-tab-heading-BV6m_sT-.js.map → pk-tab-heading-Cjcgebxn.js.map} +1 -1
  91. package/dist/chunks/{pk-tab-panel-C6FxQw9q.js → pk-tab-panel-CkKU5-Ah.js} +1 -1
  92. package/dist/chunks/{pk-tab-panel-C6FxQw9q.js.map → pk-tab-panel-CkKU5-Ah.js.map} +1 -1
  93. package/dist/chunks/{pk-tabs-BTE63uK9.js → pk-tabs-BgEBki1q.js} +1 -1
  94. package/dist/chunks/{pk-tabs-BTE63uK9.js.map → pk-tabs-BgEBki1q.js.map} +1 -1
  95. package/dist/chunks/{pk-textarea-BcAyZYC-.js → pk-textarea-CYM2tK88.js} +3 -3
  96. package/dist/chunks/{pk-textarea-BcAyZYC-.js.map → pk-textarea-CYM2tK88.js.map} +1 -1
  97. package/dist/chunks/{pk-time-picker-5D4nmig2.js → pk-time-picker-DLUBYLFo.js} +3 -3
  98. package/dist/chunks/{pk-time-picker-5D4nmig2.js.map → pk-time-picker-DLUBYLFo.js.map} +1 -1
  99. package/dist/chunks/{pk-tiptap-content-BPd4GO6c.js → pk-tiptap-content-BwkqYVJb.js} +2 -2
  100. package/dist/chunks/{pk-tiptap-content-BPd4GO6c.js.map → pk-tiptap-content-BwkqYVJb.js.map} +1 -1
  101. package/dist/chunks/{pk-tiptap-editor-tG67Vegc.js → pk-tiptap-editor-De8UUTis.js} +12 -12
  102. package/dist/chunks/pk-tiptap-editor-De8UUTis.js.map +1 -0
  103. package/dist/chunks/{pk-tiptap-input-CtefNnaK.js → pk-tiptap-input-Y9eog9Zn.js} +3 -3
  104. package/dist/chunks/{pk-tiptap-input-CtefNnaK.js.map → pk-tiptap-input-Y9eog9Zn.js.map} +1 -1
  105. package/dist/chunks/{pk-toggle-CW-lflrh.js → pk-toggle-BthhH7vl.js} +1 -1
  106. package/dist/chunks/{pk-toggle-CW-lflrh.js.map → pk-toggle-BthhH7vl.js.map} +1 -1
  107. package/dist/chunks/{pk-toggle-group-BKymefo3.js → pk-toggle-group-D2Quux8D.js} +1 -1
  108. package/dist/chunks/{pk-toggle-group-BKymefo3.js.map → pk-toggle-group-D2Quux8D.js.map} +1 -1
  109. package/dist/chunks/{pk-tooltip-BoDq8YVe.js → pk-tooltip-Cmmc0916.js} +1 -1
  110. package/dist/chunks/{pk-tooltip-BoDq8YVe.js.map → pk-tooltip-Cmmc0916.js.map} +1 -1
  111. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js → popup-content-animation.styles-BnNiguJo.js} +1 -1
  112. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js.map → popup-content-animation.styles-BnNiguJo.js.map} +1 -1
  113. package/dist/chunks/{popup-pointer-DMnuZDQl.js → popup-pointer-CuLjk1th.js} +1 -1
  114. package/dist/chunks/{popup-pointer-DMnuZDQl.js.map → popup-pointer-CuLjk1th.js.map} +1 -1
  115. package/dist/chunks/{register-components-B-qCPFFh.js → register-components-BT9THgdh.js} +1 -1
  116. package/dist/chunks/{register-components-B-qCPFFh.js.map → register-components-BT9THgdh.js.map} +1 -1
  117. package/dist/chunks/{register-CQodpTWT.js → register-posLyX3U.js} +45 -45
  118. package/dist/chunks/{register-CQodpTWT.js.map → register-posLyX3U.js.map} +1 -1
  119. package/dist/chunks/{tiptap.styles-ChAfyVi9.js → tiptap.styles-CPRows--.js} +4 -3
  120. package/dist/chunks/tiptap.styles-CPRows--.js.map +1 -0
  121. package/dist/component-registry.d.ts.map +1 -1
  122. package/dist/components/autocomplete/index.d.ts +2 -0
  123. package/dist/components/autocomplete/index.d.ts.map +1 -0
  124. package/dist/components/autocomplete/pk-autocomplete.d.ts +150 -0
  125. package/dist/components/autocomplete/pk-autocomplete.d.ts.map +1 -0
  126. package/dist/components/autocomplete/pk-autocomplete.js +2 -0
  127. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts +7 -0
  128. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts.map +1 -0
  129. package/dist/components/autocomplete.d.ts +2 -0
  130. package/dist/components/autocomplete.js +2 -0
  131. package/dist/components/button/pk-button.d.ts +37 -1
  132. package/dist/components/button/pk-button.d.ts.map +1 -1
  133. package/dist/components/button/pk-button.js +1 -1
  134. package/dist/components/button.js +1 -1
  135. package/dist/components/calendar/pk-calendar.js +1 -1
  136. package/dist/components/calendar.js +1 -1
  137. package/dist/components/checkbox/pk-checkbox.js +1 -1
  138. package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
  139. package/dist/components/checkbox-select.js +1 -1
  140. package/dist/components/checkbox.js +1 -1
  141. package/dist/components/code-editor/pk-code-editor.js +1 -1
  142. package/dist/components/code-editor.js +1 -1
  143. package/dist/components/color-input/pk-color-input.js +1 -1
  144. package/dist/components/color-input.js +1 -1
  145. package/dist/components/combobox/pk-combobox.d.ts +8 -14
  146. package/dist/components/combobox/pk-combobox.d.ts.map +1 -1
  147. package/dist/components/combobox/pk-combobox.js +1 -1
  148. package/dist/components/combobox/pk-combobox.styles.d.ts.map +1 -1
  149. package/dist/components/combobox.js +1 -1
  150. package/dist/components/connect/pk-connect-oauth.js +3 -3
  151. package/dist/components/connect/pk-connect.js +4 -4
  152. package/dist/components/copy-button/pk-copy-button.d.ts +3 -0
  153. package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
  154. package/dist/components/copy-button/pk-copy-button.js +1 -1
  155. package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
  156. package/dist/components/copy-button.js +1 -1
  157. package/dist/components/date-picker/pk-date-picker.js +1 -1
  158. package/dist/components/date-picker.js +1 -1
  159. package/dist/components/dialog/pk-dialog.js +1 -1
  160. package/dist/components/dialog.js +1 -1
  161. package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
  162. package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
  163. package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
  164. package/dist/components/dropdown-menu.js +3 -3
  165. package/dist/components/editable-table/editable-table-model.d.ts +4 -1
  166. package/dist/components/editable-table/editable-table-model.d.ts.map +1 -1
  167. package/dist/components/editable-table/pk-editable-table.d.ts +1 -1
  168. package/dist/components/editable-table/pk-editable-table.d.ts.map +1 -1
  169. package/dist/components/editable-table/pk-editable-table.js +1 -1
  170. package/dist/components/editable-table.js +1 -1
  171. package/dist/components/field/pk-field.js +1 -1
  172. package/dist/components/field.js +1 -1
  173. package/dist/components/icon/pk-icon.d.ts +3 -2
  174. package/dist/components/icon/pk-icon.d.ts.map +1 -1
  175. package/dist/components/icon/pk-icon.js.map +1 -1
  176. package/dist/components/image-browser/index.d.ts +2 -0
  177. package/dist/components/image-browser/index.d.ts.map +1 -0
  178. package/dist/components/image-browser/pk-image-browser.d.ts +190 -0
  179. package/dist/components/image-browser/pk-image-browser.d.ts.map +1 -0
  180. package/dist/components/image-browser/pk-image-browser.js +2 -0
  181. package/dist/components/image-browser/pk-image-browser.styles.d.ts +6 -0
  182. package/dist/components/image-browser/pk-image-browser.styles.d.ts.map +1 -0
  183. package/dist/components/image-browser.d.ts +2 -0
  184. package/dist/components/image-browser.js +2 -0
  185. package/dist/components/input/pk-input.d.ts +2 -1
  186. package/dist/components/input/pk-input.d.ts.map +1 -1
  187. package/dist/components/input/pk-input.js +1 -1
  188. package/dist/components/input/pk-input.styles.d.ts.map +1 -1
  189. package/dist/components/input-group/pk-input-group-addon.js +1 -1
  190. package/dist/components/input-group/pk-input-group-button.js +1 -1
  191. package/dist/components/input-group/pk-input-group-input.js +1 -1
  192. package/dist/components/input-group/pk-input-group-text.js +1 -1
  193. package/dist/components/input-group/pk-input-group-textarea.js +1 -1
  194. package/dist/components/input-group/pk-input-group.js +1 -1
  195. package/dist/components/input-group.js +6 -6
  196. package/dist/components/input.js +1 -1
  197. package/dist/components/lightswitch/pk-lightswitch.js +1 -1
  198. package/dist/components/lightswitch.js +1 -1
  199. package/dist/components/popover/pk-popover.js +1 -1
  200. package/dist/components/popover.js +1 -1
  201. package/dist/components/radio-group/pk-radio-group.js +1 -1
  202. package/dist/components/radio-group/pk-radio.js +1 -1
  203. package/dist/components/radio-group.js +2 -2
  204. package/dist/components/scroll-area/pk-scroll-area.js +1 -1
  205. package/dist/components/scroll-area.js +1 -1
  206. package/dist/components/select/pk-option-group.d.ts +3 -1
  207. package/dist/components/select/pk-option-group.d.ts.map +1 -1
  208. package/dist/components/select/pk-option-group.js +1 -1
  209. package/dist/components/select/pk-option.d.ts +10 -1
  210. package/dist/components/select/pk-option.d.ts.map +1 -1
  211. package/dist/components/select/pk-option.js +1 -1
  212. package/dist/components/select/pk-select.d.ts +42 -3
  213. package/dist/components/select/pk-select.d.ts.map +1 -1
  214. package/dist/components/select/pk-select.js +1 -1
  215. package/dist/components/select.js +3 -3
  216. package/dist/components/separator/pk-separator.js +1 -1
  217. package/dist/components/separator.js +1 -1
  218. package/dist/components/status/pk-status.js +1 -1
  219. package/dist/components/status.js +1 -1
  220. package/dist/components/tabs/pk-tab-heading.js +1 -1
  221. package/dist/components/tabs/pk-tab-panel.js +1 -1
  222. package/dist/components/tabs/pk-tab.js +1 -1
  223. package/dist/components/tabs/pk-tabs.js +1 -1
  224. package/dist/components/tabs.js +4 -4
  225. package/dist/components/textarea/pk-textarea.js +1 -1
  226. package/dist/components/textarea.js +1 -1
  227. package/dist/components/time-picker/pk-time-picker.js +1 -1
  228. package/dist/components/time-picker.js +1 -1
  229. package/dist/components/tiptap/pk-tiptap-content.js +1 -1
  230. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  231. package/dist/components/tiptap/pk-tiptap-input.js +1 -1
  232. package/dist/components/tiptap/variable-tag-node-view.d.ts.map +1 -1
  233. package/dist/components/tiptap-content.js +1 -1
  234. package/dist/components/tiptap-editor.js +1 -1
  235. package/dist/components/tiptap-input.js +1 -1
  236. package/dist/components/toggle/pk-toggle.js +1 -1
  237. package/dist/components/toggle-group/pk-toggle-group.js +1 -1
  238. package/dist/components/toggle-group.js +1 -1
  239. package/dist/components/toggle.js +1 -1
  240. package/dist/components/tooltip/pk-tooltip.js +1 -1
  241. package/dist/components/tooltip.js +1 -1
  242. package/dist/connect/register-cp-connect.js +3 -3
  243. package/dist/index.js +49 -49
  244. package/dist/internal/sync-filtered-options.d.ts +23 -0
  245. package/dist/internal/sync-filtered-options.d.ts.map +1 -0
  246. package/dist/plugin-kit.css +2 -0
  247. package/dist/plugin-kit.js +2 -2
  248. package/dist/register-components.js +1 -1
  249. package/dist/register-pk.generated.d.ts +4 -0
  250. package/dist/register-pk.generated.d.ts.map +1 -1
  251. package/dist/register.js +47 -47
  252. package/dist/utilities/fouce.css +2 -0
  253. package/dist/utils/async-option-fetch.d.ts +38 -0
  254. package/dist/utils/async-option-fetch.d.ts.map +1 -0
  255. package/dist/utils/option-filter.d.ts +11 -0
  256. package/dist/utils/option-filter.d.ts.map +1 -0
  257. package/dist/utils/popup-content-exit.d.ts +6 -0
  258. package/dist/utils/popup-content-exit.d.ts.map +1 -0
  259. package/dist-loader/chunks/option-filter-Z7bomRrK.js +119 -0
  260. package/dist-loader/chunks/{pk-base-B21zXxSo.js → pk-base-CyzwylQ7.js} +13 -1
  261. package/dist-loader/chunks/{pk-button-Dh4gjLHw.js → pk-button-dngp-vOd.js} +10 -6
  262. package/dist-loader/chunks/{pk-calendar-n1bwSO7X.js → pk-calendar-BE4HRfCq.js} +3 -3
  263. package/dist-loader/chunks/{pk-checkbox-BrZQB816.js → pk-checkbox-B3d4nkBx.js} +1 -1
  264. package/dist-loader/chunks/{pk-color-input-sS05YOwT.js → pk-color-input-CD-r_sfG.js} +1 -1
  265. package/dist-loader/chunks/{pk-combobox-B7q6alzE.js → pk-combobox-DMBKXPLB.js} +48 -91
  266. package/dist-loader/chunks/{pk-date-picker-Dni5ty79.js → pk-date-picker-wntQmeIM.js} +5 -5
  267. package/dist-loader/chunks/{pk-dialog-BpPRqFMm.js → pk-dialog-B6lzsRur.js} +3 -3
  268. package/dist-loader/chunks/{pk-dropdown-item-CHkFNlA9.js → pk-dropdown-item-DJ5TeF1r.js} +3 -3
  269. package/dist-loader/chunks/{pk-dropdown-menu-BHVOMNV1.js → pk-dropdown-menu-B87bsdlI.js} +3 -3
  270. package/dist-loader/chunks/{pk-field-CJ09ll1S.js → pk-field-D_SNOJpl.js} +4 -4
  271. package/dist-loader/chunks/{pk-icon-WHUu7wxk.js → pk-icon-B5ob3JdK.js} +2 -2
  272. package/dist-loader/chunks/{pk-input-CEw3AdYt.js → pk-input-BhU0PiCk.js} +74 -28
  273. package/dist-loader/chunks/{pk-lightswitch-DJEUScgo.js → pk-lightswitch-DRxY8511.js} +1 -1
  274. package/dist-loader/chunks/{pk-option-CunPIei0.js → pk-option-Cc6QWw-0.js} +5 -4
  275. package/dist-loader/chunks/{pk-popup-FDdBxb4k.js → pk-popup-BooGjXgH.js} +1 -1
  276. package/dist-loader/chunks/{pk-select-CbAaQ7uE.js → pk-select-BG8qPsBd.js} +6 -4
  277. package/dist-loader/chunks/{pk-spinner-CIbXjDnp.js → pk-spinner-BKU9Rf2R.js} +1 -1
  278. package/dist-loader/chunks/{pk-status-BRIVW7EH.js → pk-status-D3ArH2ui.js} +1 -1
  279. package/dist-loader/chunks/{pk-textarea-C_rOUtFS.js → pk-textarea-CC7rA5A7.js} +1 -1
  280. package/dist-loader/chunks/{pk-time-picker-Dr3uvbvc.js → pk-time-picker-CDVFNhN7.js} +5 -5
  281. package/dist-loader/chunks/{pk-tooltip-HwZ0zRd2.js → pk-tooltip-BS2dNLOS.js} +2 -2
  282. package/dist-loader/chunks/{render-Niz5wYRa.js → render-BKfL_WRl.js} +1 -1
  283. package/dist-loader/chunks/{svg-_Mtb7CHx.js → svg-BiAlXtCn.js} +5 -3
  284. package/dist-loader/chunks/{tiptap.styles-BIRIMP7I.js → tiptap.styles-BFGP4eTV.js} +3 -2
  285. package/dist-loader/components/autocomplete/autocomplete.js +984 -0
  286. package/dist-loader/components/button/button.js +1 -1
  287. package/dist-loader/components/button-group/button-group-separator.js +1 -1
  288. package/dist-loader/components/button-group/button-group-text.js +1 -1
  289. package/dist-loader/components/button-group/button-group.js +1 -1
  290. package/dist-loader/components/calendar/calendar.js +1 -1
  291. package/dist-loader/components/checkbox/checkbox.js +1 -1
  292. package/dist-loader/components/checkbox-select/checkbox-select.js +2 -2
  293. package/dist-loader/components/code-editor/code-editor.js +1 -1
  294. package/dist-loader/components/color-input/color-input.js +1 -1
  295. package/dist-loader/components/combobox/combobox.js +1 -1
  296. package/dist-loader/components/connect/connect-oauth.js +3 -3
  297. package/dist-loader/components/connect/connect.js +5 -5
  298. package/dist-loader/components/copy-button/copy-button.js +48 -7
  299. package/dist-loader/components/date-picker/date-picker.js +1 -1
  300. package/dist-loader/components/dialog/dialog.js +1 -1
  301. package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
  302. package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -1
  303. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  304. package/dist-loader/components/dropdown-menu/dropdown-separator.js +1 -1
  305. package/dist-loader/components/editable-table/editable-table.js +18 -20
  306. package/dist-loader/components/field/field.js +1 -1
  307. package/dist-loader/components/icon/icon.js +2 -2
  308. package/dist-loader/components/image-browser/image-browser.js +1356 -0
  309. package/dist-loader/components/input/input.js +1 -1
  310. package/dist-loader/components/input-group/input-group-addon.js +1 -1
  311. package/dist-loader/components/input-group/input-group-button.js +1 -1
  312. package/dist-loader/components/input-group/input-group-input.js +1 -1
  313. package/dist-loader/components/input-group/input-group-text.js +1 -1
  314. package/dist-loader/components/input-group/input-group-textarea.js +1 -1
  315. package/dist-loader/components/input-group/input-group.js +1 -1
  316. package/dist-loader/components/lightswitch/lightswitch.js +1 -1
  317. package/dist-loader/components/popover/popover.js +2 -2
  318. package/dist-loader/components/popup/popup.js +1 -1
  319. package/dist-loader/components/radio-group/radio-group.js +1 -1
  320. package/dist-loader/components/radio-group/radio.js +1 -1
  321. package/dist-loader/components/scroll-area/scroll-area.js +1 -1
  322. package/dist-loader/components/select/option-group.js +1 -1
  323. package/dist-loader/components/select/option.js +1 -1
  324. package/dist-loader/components/select/select.js +1 -1
  325. package/dist-loader/components/separator/separator.js +1 -1
  326. package/dist-loader/components/spinner/spinner.js +1 -1
  327. package/dist-loader/components/status/status.js +1 -1
  328. package/dist-loader/components/tabs/tab-heading.js +1 -1
  329. package/dist-loader/components/tabs/tab-panel.js +1 -1
  330. package/dist-loader/components/tabs/tab.js +1 -1
  331. package/dist-loader/components/tabs/tabs.js +1 -1
  332. package/dist-loader/components/textarea/textarea.js +1 -1
  333. package/dist-loader/components/time-picker/time-picker.js +1 -1
  334. package/dist-loader/components/tiptap/tiptap-content.js +2 -2
  335. package/dist-loader/components/tiptap/tiptap-editor.js +13 -13
  336. package/dist-loader/components/tiptap/tiptap-input.js +2 -2
  337. package/dist-loader/components/toggle/toggle.js +1 -1
  338. package/dist-loader/components/toggle-group/toggle-group.js +1 -1
  339. package/dist-loader/components/tooltip/tooltip.js +1 -1
  340. package/dist-loader/plugin-kit.css +2 -0
  341. package/dist-loader/plugin-kit.loader.js +4 -0
  342. package/dist-loader/utilities/fouce.css +2 -0
  343. package/package.json +53 -9
  344. package/dist/chunks/component-registry-CNB8PbP_.js.map +0 -1
  345. package/dist/chunks/pk-combobox-BLft8AXy.js.map +0 -1
  346. package/dist/chunks/pk-copy-button-asOLQkqk.js.map +0 -1
  347. package/dist/chunks/pk-editable-table-Cn4WXqAo.js.map +0 -1
  348. package/dist/chunks/pk-form-associated-element-9M2NzOE2.js.map +0 -1
  349. package/dist/chunks/pk-input-DDkIXOkt.js.map +0 -1
  350. package/dist/chunks/pk-option-MGj9SKOK.js.map +0 -1
  351. package/dist/chunks/pk-select-C1s0OJr0.js.map +0 -1
  352. package/dist/chunks/pk-tiptap-editor-tG67Vegc.js.map +0 -1
  353. package/dist/chunks/tiptap.styles-ChAfyVi9.js.map +0 -1
@@ -2,7 +2,15 @@ import { PropertyValues } from 'lit';
2
2
  import { PkValidator } from '../validators/index.js';
3
3
  import { PkElement } from './pk-element.js';
4
4
  /**
5
- * Form-associated custom element base — `FormAssociatedElement` pattern.
5
+ * Form-associated custom element base — ElementInternals + shared validity helpers.
6
+ *
7
+ * @cssstate disabled - The control is disabled.
8
+ * @cssstate required - The control is required.
9
+ * @cssstate optional - The control is not required.
10
+ * @cssstate invalid - The control currently fails constraint validation.
11
+ * @cssstate valid - The control currently passes constraint validation.
12
+ * @cssstate user-invalid - Invalid after the user has interacted with the control.
13
+ * @cssstate user-valid - Valid after the user has interacted with the control.
6
14
  */
7
15
  export declare abstract class PkFormAssociatedElement extends PkElement {
8
16
  static formAssociated: boolean;
@@ -14,9 +22,13 @@ export declare abstract class PkFormAssociatedElement extends PkElement {
14
22
  /** Events that must all fire before `:user-invalid` applies — override per component. */
15
23
  assumeInteractionOn: string[];
16
24
  validators: PkValidator[];
25
+ /** Name submitted with form data. */
17
26
  name: string | null;
27
+ /** Disables the control and excludes it from constraint validation. */
18
28
  disabled: boolean;
29
+ /** Marks the control as required for form submission. */
19
30
  required: boolean;
31
+ /** Custom validation message; also settable via `setCustomValidity()`. */
20
32
  customError: string | null;
21
33
  valueHasChanged: boolean;
22
34
  hasInteracted: boolean;
@@ -43,9 +55,13 @@ export declare abstract class PkFormAssociatedElement extends PkElement {
43
55
  get willValidate(): boolean;
44
56
  get validationMessage(): string;
45
57
  getForm(): HTMLFormElement | null;
58
+ /** Runs constraint validation without showing the browser UI. */
46
59
  checkValidity(): boolean;
60
+ /** Runs constraint validation and shows the browser UI when invalid. */
47
61
  reportValidity(): boolean;
62
+ /** Clears custom errors and re-syncs validity state. */
48
63
  resetValidity(): void;
64
+ /** Sets or clears a custom validation message. */
49
65
  setCustomValidity(message: string): void;
50
66
  protected get validationTarget(): HTMLElement | undefined;
51
67
  protected get allValidators(): PkValidator[];
@@ -1 +1 @@
1
- {"version":3,"file":"pk-form-associated-element.d.ts","sourceRoot":"","sources":["../../src/base/pk-form-associated-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1C,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,8BAAsB,uBAAwB,SAAQ,SAAS;IAC3D,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,KAAK,UAAU,IAAI,WAAW,EAAE,CAErC;IAED,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAUxC;IAED,SAAS,CAAC,QAAQ,CAAC,SAAS,mBAA0B;IAEtD,mDAAmD;IACnD,KAAK,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;IAEnE,yFAAyF;IACzF,mBAAmB,EAAE,MAAM,EAAE,CAAa;IAE1C,UAAU,EAAE,WAAW,EAAE,CAAM;IAG/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG3B,QAAQ,UAAS;IAGjB,QAAQ,UAAS;IAGjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGlC,eAAe,UAAS;IAGxB,aAAa,UAAS;IAEtB,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,cAAc,CAAC,CAAiB;;IAO/B,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;IAY5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAuBtC,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKrD,wEAAwE;IACxE,SAAS,CAAC,mBAAmB,IAAI,WAAW,GAAG,IAAI;IAInD,oFAAoF;IACpF,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAEpC,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAUvC,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAIpC,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAK/C,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,IAAI;IAM5G,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAMrB;IAED,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,IAAI,MAAM,IAAI,QAAQ,CAErB;IAED,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,OAAO,IAAI,eAAe,GAAG,IAAI;IAIjC,aAAa,IAAI,OAAO;IAKxB,cAAc,IAAI,OAAO;IAMzB,aAAa,IAAI,IAAI;IAMrB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAoBxC,SAAS,KAAK,gBAAgB,IAAI,WAAW,GAAG,SAAS,CAExD;IAED,SAAS,KAAK,aAAa,IAAI,WAAW,EAAE,CAG3C;IAED,SAAS,CAAC,YAAY,CAClB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,EACtC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GACxC,IAAI;IAIP,SAAS,CAAC,QAAQ,CACd,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,EACtC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GACxC,IAAI;IAIP,SAAS,CAAC,cAAc,IAAI,IAAI;IAiDhC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAWlC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAcvD,SAAS,CAAC,aAAa,IAAI,IAAI;IAE/B,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAErC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI;IAEzE,OAAO,CAAC,WAAW,CAOjB;IAEF,OAAO,CAAC,iBAAiB,CASvB;CACL"}
1
+ {"version":3,"file":"pk-form-associated-element.d.ts","sourceRoot":"","sources":["../../src/base/pk-form-associated-element.ts"],"names":[],"mappings":"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"}
@@ -39,4 +39,4 @@ function animateWithClass(el, className, timeoutMs = 500) {
39
39
  //#endregion
40
40
  export { animateWithClass as t };
41
41
 
42
- //# sourceMappingURL=animate-with-class-ZJeCOKB3.js.map
42
+ //# sourceMappingURL=animate-with-class-CsDwYnXL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"animate-with-class-ZJeCOKB3.js","names":[],"sources":["../../src/utils/animate-with-class.ts"],"sourcesContent":["/**\n * Run a CSS animation class on an element and resolve when it finishes.\n * Resolves on animationend/cancel, immediately when no CSS animation runs, or on timeout\n * so overlay hide can never hang forever (stuck `active` / missing `after-hide`).\n */\nexport function animateWithClass(el: HTMLElement, className: string, timeoutMs = 500): Promise<void> {\n return new Promise((resolve) => {\n const controller = new AbortController();\n const { signal } = controller;\n\n if (el.classList.contains(className)) {\n resolve();\n return;\n }\n\n el.classList.add(className);\n\n let resolved = false;\n\n const onEnd = (): void => {\n if (resolved) {\n return;\n }\n\n resolved = true;\n el.classList.remove(className);\n window.clearTimeout(timeoutId);\n resolve();\n controller.abort();\n };\n\n el.addEventListener('animationend', onEnd, { once: true, signal });\n el.addEventListener('animationcancel', onEnd, { once: true, signal });\n\n // If the browser reports running animations that never end (interrupted reverse\n // animations, display:none mid-flight), still settle so overlays can demote.\n const timeoutId = window.setTimeout(onEnd, timeoutMs);\n\n requestAnimationFrame(() => {\n if (!resolved && el.getAnimations().length === 0) {\n onEnd();\n }\n });\n });\n}\n"],"mappings":";;;;;;AAKA,SAAgB,iBAAiB,IAAiB,WAAmB,YAAY,KAAoB;AACjG,QAAO,IAAI,SAAS,YAAY;EAC5B,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,EAAE,WAAW;AAEnB,MAAI,GAAG,UAAU,SAAS,UAAU,EAAE;AAClC,YAAS;AACT;;AAGJ,KAAG,UAAU,IAAI,UAAU;EAE3B,IAAI,WAAW;EAEf,MAAM,cAAoB;AACtB,OAAI,SACA;AAGJ,cAAW;AACX,MAAG,UAAU,OAAO,UAAU;AAC9B,UAAO,aAAa,UAAU;AAC9B,YAAS;AACT,cAAW,OAAO;;AAGtB,KAAG,iBAAiB,gBAAgB,OAAO;GAAE,MAAM;GAAM;GAAQ,CAAC;AAClE,KAAG,iBAAiB,mBAAmB,OAAO;GAAE,MAAM;GAAM;GAAQ,CAAC;EAIrE,MAAM,YAAY,OAAO,WAAW,OAAO,UAAU;AAErD,8BAA4B;AACxB,OAAI,CAAC,YAAY,GAAG,eAAe,CAAC,WAAW,EAC3C,QAAO;IAEb;GACJ"}
1
+ {"version":3,"file":"animate-with-class-CsDwYnXL.js","names":[],"sources":["../../src/utils/animate-with-class.ts"],"sourcesContent":["/**\n * Run a CSS animation class on an element and resolve when it finishes.\n * Resolves on animationend/cancel, immediately when no CSS animation runs, or on timeout\n * so overlay hide can never hang forever (stuck `active` / missing `after-hide`).\n */\nexport function animateWithClass(el: HTMLElement, className: string, timeoutMs = 500): Promise<void> {\n return new Promise((resolve) => {\n const controller = new AbortController();\n const { signal } = controller;\n\n if (el.classList.contains(className)) {\n resolve();\n return;\n }\n\n el.classList.add(className);\n\n let resolved = false;\n\n const onEnd = (): void => {\n if (resolved) {\n return;\n }\n\n resolved = true;\n el.classList.remove(className);\n window.clearTimeout(timeoutId);\n resolve();\n controller.abort();\n };\n\n el.addEventListener('animationend', onEnd, { once: true, signal });\n el.addEventListener('animationcancel', onEnd, { once: true, signal });\n\n // If the browser reports running animations that never end (interrupted reverse\n // animations, display:none mid-flight), still settle so overlays can demote.\n const timeoutId = window.setTimeout(onEnd, timeoutMs);\n\n requestAnimationFrame(() => {\n if (!resolved && el.getAnimations().length === 0) {\n onEnd();\n }\n });\n });\n}\n"],"mappings":";;;;;;AAKA,SAAgB,iBAAiB,IAAiB,WAAmB,YAAY,KAAoB;AACjG,QAAO,IAAI,SAAS,YAAY;EAC5B,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,EAAE,WAAW;AAEnB,MAAI,GAAG,UAAU,SAAS,UAAU,EAAE;AAClC,YAAS;AACT;;AAGJ,KAAG,UAAU,IAAI,UAAU;EAE3B,IAAI,WAAW;EAEf,MAAM,cAAoB;AACtB,OAAI,SACA;AAGJ,cAAW;AACX,MAAG,UAAU,OAAO,UAAU;AAC9B,UAAO,aAAa,UAAU;AAC9B,YAAS;AACT,cAAW,OAAO;;AAGtB,KAAG,iBAAiB,gBAAgB,OAAO;GAAE,MAAM;GAAM;GAAQ,CAAC;AAClE,KAAG,iBAAiB,mBAAmB,OAAO;GAAE,MAAM;GAAM;GAAQ,CAAC;EAIrE,MAAM,YAAY,OAAO,WAAW,OAAO,UAAU;AAErD,8BAA4B;AACxB,OAAI,CAAC,YAAY,GAAG,eAAe,CAAC,WAAW,EAC3C,QAAO;IAEb;GACJ"}
@@ -1,5 +1,5 @@
1
1
  import { t as SUPPORTS_POPOVER } from "./supports-popover-CUBsbHpS.js";
2
- import { n as COMPONENT_MODULE_PATHS } from "./component-registry-CNB8PbP_.js";
2
+ import { n as COMPONENT_MODULE_PATHS } from "./component-registry-D34fm8xW.js";
3
3
  //#endregion
4
4
  //#region src/utils/portal.ts
5
5
  var defaultPortalClassName;
@@ -155,4 +155,4 @@ var DISCOVERY_COMPLETE_EVENT = DISCOVERY_EVENT;
155
155
  //#endregion
156
156
  export { setPortalClassName as _, startLoader as a, setBasePath as c, getPortalClassName as d, getPortalContainer as f, resolvePositionMethod as g, getShadowRootSelectors as h, preventTurboFouce as i, allDefined as l, getPortalTargetForAppend as m, FOUCE_TIMEOUT_MS as n, stopLoader as o, getPortalMountElement as p, discover as r, getBasePath as s, DISCOVERY_COMPLETE_EVENT as t, configurePluginKitWeb as u, setPortalContainer as v, setShadowRootSelectors as y };
157
157
 
158
- //# sourceMappingURL=autoloader-DPX9YYZs.js.map
158
+ //# sourceMappingURL=autoloader-dJO3tYOX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autoloader-DPX9YYZs.js","names":[],"sources":["../../src/utils/documentScrollStability.ts","../../src/utils/portal.ts","../../src/utils/config.ts","../../src/utilities/defined.ts","../../src/utilities/base-path.ts","../../src/utilities/autoloader.ts"],"sourcesContent":["/**\n * @deprecated No-op. Permanent `html { scrollbar-gutter: stable }` was removed —\n * it reserved an empty scrollbar strip on every Craft CP page. Overlay scroll lock\n * compensates only while locked (see a11y/scroll-lock.ts).\n */\nexport const ensureDocumentScrollStability = (): void => {\n // Intentionally empty — kept so older configurePluginKitWeb call sites stay safe.\n};\n","import { SUPPORTS_POPOVER } from './supports-popover.js';\n\nexport type PortalContainer = HTMLElement | ShadowRoot | null;\n\nlet defaultPortalClassName: string | undefined;\nlet defaultPortalContainer: PortalContainer | undefined;\nlet defaultShadowRootSelectors: string[] = ['[data-plugin-kit-shadow-root]'];\n\nexport const setPortalClassName = (className: string): void => {\n defaultPortalClassName = className.trim() || undefined;\n};\n\nexport const getPortalClassName = (className?: string): string | undefined => {\n return (className ?? defaultPortalClassName)?.trim() || undefined;\n};\n\nexport const setPortalContainer = (container: PortalContainer): void => {\n defaultPortalContainer = container;\n};\n\nexport const getPortalContainer = (container?: PortalContainer): PortalContainer | undefined => {\n return container ?? defaultPortalContainer;\n};\n\nexport const setShadowRootSelectors = (selectors: string[]): void => {\n const normalizedSelectors = (selectors || [])\n .map((selector) => selector.trim())\n .filter(Boolean);\n\n defaultShadowRootSelectors = normalizedSelectors.length > 0\n ? normalizedSelectors\n : ['[data-plugin-kit-shadow-root]'];\n};\n\nexport const getShadowRootSelectors = (): string[] => {\n return defaultShadowRootSelectors;\n};\n\n/**\n * Returns an HTMLElement suitable for appendChild — mirrors React `getPortalTargetForAppend`.\n * When the portal container is a ShadowRoot, prefers a dedicated mount node inside it.\n */\nexport function getPortalTargetForAppend(container?: PortalContainer): HTMLElement | undefined {\n const resolved = getPortalContainer(container);\n\n if (!resolved) {\n return undefined;\n }\n\n if (resolved instanceof HTMLElement) {\n return resolved;\n }\n\n const shadowRoot = resolved;\n\n const target = getShadowRootSelectors()\n .map((selector) => shadowRoot.querySelector<HTMLElement>(selector))\n .find((node) => Boolean(node));\n\n if (target) {\n return target;\n }\n\n return shadowRoot.host instanceof HTMLElement ? shadowRoot.host : undefined;\n}\n\n/** Resolves where floating popup layers should mount. Falls back to `document.body`. */\nexport function getPortalMountElement(container?: PortalContainer): HTMLElement {\n return getPortalTargetForAppend(container) ?? document.body;\n}\n\nexport function resolvePositionMethod(\n positionMethod: 'fixed' | 'absolute' | undefined,\n container?: PortalContainer,\n): 'fixed' | 'absolute' {\n if (positionMethod) {\n return positionMethod;\n }\n\n if (SUPPORTS_POPOVER) {\n return 'absolute';\n }\n\n const resolved = getPortalContainer(container);\n\n if (resolved instanceof ShadowRoot) {\n return 'fixed';\n }\n\n return 'absolute';\n}\n","import { ensureDocumentScrollStability } from './documentScrollStability.js';\nimport {\n setShadowRootSelectors,\n type PortalContainer,\n} from './portal.js';\n\nexport type PluginKitWebConfig = {\n /**\n * @deprecated Popups use the Popover API top layer — not DOM reparenting. Ignored if set.\n */\n portalClassName?: string;\n /**\n * When a `ShadowRoot`, used as a React portal target for Base UI compat.\n * No longer injects document scroll-gutter CSS (see scroll-lock.ts).\n */\n portalContainer?: PortalContainer;\n shadowRootSelectors?: string[];\n};\n\nexport const configurePluginKitWeb = (config: PluginKitWebConfig): void => {\n if (config.portalContainer instanceof ShadowRoot) {\n // Historically forced `html { scrollbar-gutter: stable }`; that is a no-op now.\n ensureDocumentScrollStability();\n }\n\n if (config.shadowRootSelectors) {\n setShadowRootSelectors(config.shadowRootSelectors);\n }\n};\n","export type AllDefinedOptions = {\n /**\n * Accepts a custom element tag name and returns `true` if the element should be awaited.\n * Tag names are always lowercase.\n */\n match?: (tagName: string) => boolean;\n /** Additional tag names to await that may not be in the DOM yet. */\n additionalElements?: string | string[];\n /** Root to search within. Defaults to `document`. Shadow roots are not traversed. */\n root?: Document | ShadowRoot;\n};\n\n/**\n * Waits for custom elements on the page to be registered before resolving.\n * By default, waits for all undefined `pk-*` elements.\n */\nexport async function allDefined(options: AllDefinedOptions = {}): Promise<void> {\n const opts = {\n match: (tagName: string) => tagName.startsWith('pk-'),\n additionalElements: [] as string[],\n root: document,\n ...options,\n };\n\n const additionalElements = Array.isArray(opts.additionalElements)\n ? opts.additionalElements\n : [opts.additionalElements];\n\n const undefinedElements = [...opts.root.querySelectorAll(':not(:defined)')]\n .map((el) => el.localName)\n .filter((tag, index, arr) => arr.indexOf(tag) === index)\n .filter((tag) => opts.match(tag));\n\n const tagsToAwait = [...undefinedElements, ...additionalElements];\n await Promise.all(tagsToAwait.map((tag) => customElements.whenDefined(tag)));\n await new Promise(requestAnimationFrame);\n}\n","let basePath = '';\n\nexport function setBasePath(path: string): void {\n basePath = path;\n}\n\nexport function getBasePath(subpath = ''): string {\n if (!basePath) {\n const el = document.querySelector('[data-plugin-kit]');\n\n if (el?.hasAttribute('data-plugin-kit')) {\n const rootRelativeUrl = new URL(el.getAttribute('data-plugin-kit') ?? '', window.location.href).pathname;\n setBasePath(rootRelativeUrl);\n } else {\n const scripts = [...document.getElementsByTagName('script')];\n const pkScript = scripts.find(\n (script) =>\n script.src.endsWith('plugin-kit.js') || script.src.endsWith('plugin-kit.loader.js'),\n );\n\n if (pkScript) {\n const path = String(pkScript.getAttribute('src'));\n setBasePath(path.split('/').slice(0, -1).join('/'));\n }\n }\n }\n\n return basePath.replace(/\\/$/, '') + (subpath ? `/${subpath.replace(/^\\//, '')}` : '');\n}\n","import { COMPONENT_MODULE_PATHS } from '../component-registry.js';\nimport { getBasePath } from './base-path.js';\n\nconst PK_PREFIX = 'pk-';\nconst DISCOVERY_EVENT = 'pk-discovery-complete';\n\nconst observer = new MutationObserver((mutations) => {\n for (const { addedNodes } of mutations) {\n for (const node of addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n void discover(node as Element);\n }\n }\n }\n});\n\nexport function startLoader(): void {\n void discover(document.documentElement);\n observer.observe(document.documentElement, { subtree: true, childList: true });\n}\n\nexport function stopLoader(): void {\n observer.disconnect();\n}\n\nexport async function discover(root: Document | Element = document): Promise<void> {\n const rootTagName = root instanceof Element ? root.tagName.toLowerCase() : '';\n const rootIsPluginKitComponent = rootTagName.startsWith(PK_PREFIX);\n const tags = [...root.querySelectorAll(':not(:defined)')]\n .map((el) => el.tagName.toLowerCase())\n .filter((tag) => tag.startsWith(PK_PREFIX));\n\n if (rootIsPluginKitComponent && !customElements.get(rootTagName)) {\n tags.push(rootTagName);\n }\n\n const preloadSelectors = root.querySelectorAll('[data-pk-preload]');\n const preloadRoots =\n root instanceof Element && root.hasAttribute('data-pk-preload')\n ? [root, ...preloadSelectors]\n : preloadSelectors;\n\n for (const el of preloadRoots) {\n tags.push(\n ...el\n .getAttribute('data-pk-preload')!\n .split(/\\s+/)\n .filter((tag) => tag.startsWith(PK_PREFIX)),\n );\n }\n\n const tagsToRegister = [...new Set(tags)];\n const imports = await Promise.allSettled(tagsToRegister.map((tagName) => register(tagName)));\n\n for (const imp of imports) {\n if (imp.status === 'rejected') {\n console.warn(imp.reason);\n }\n }\n\n await new Promise(requestAnimationFrame);\n\n root.dispatchEvent(\n new CustomEvent(DISCOVERY_EVENT, {\n bubbles: false,\n cancelable: false,\n composed: true,\n }),\n );\n}\n\nfunction register(tagName: string): Promise<void> {\n if (customElements.get(tagName)) {\n return Promise.resolve();\n }\n\n const modulePath = COMPONENT_MODULE_PATHS[tagName];\n\n if (!modulePath) {\n return Promise.reject(new Error(`Unable to autoload <${tagName}> — no module path registered`));\n }\n\n const path = getBasePath(modulePath);\n\n return import(/* @vite-ignore */ path).then(() => undefined);\n}\n\nlet turboTimeout = 2000;\n\n/** Prevent FOUCE when navigating with Turbo (Hotwire). */\nexport function preventTurboFouce(timeout = 2000): void {\n turboTimeout = timeout;\n document.addEventListener('turbo:before-render', handleTurboRender);\n}\n\nasync function handleTurboRender(event: Event): Promise<void> {\n const turboEvent = event as CustomEvent<{ newBody: Element; resume: () => void }>;\n const newBody = turboEvent.detail.newBody;\n\n turboEvent.preventDefault();\n\n try {\n await Promise.race([\n discover(newBody),\n new Promise<void>((resolve) => setTimeout(resolve, turboTimeout)),\n ]);\n } finally {\n turboEvent.detail.resume();\n }\n}\n\nexport const FOUCE_TIMEOUT_MS = 2000;\nexport const DISCOVERY_COMPLETE_EVENT = DISCOVERY_EVENT;\n"],"mappings":"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"}
1
+ {"version":3,"file":"autoloader-dJO3tYOX.js","names":[],"sources":["../../src/utils/documentScrollStability.ts","../../src/utils/portal.ts","../../src/utils/config.ts","../../src/utilities/defined.ts","../../src/utilities/base-path.ts","../../src/utilities/autoloader.ts"],"sourcesContent":["/**\n * @deprecated No-op. Permanent `html { scrollbar-gutter: stable }` was removed —\n * it reserved an empty scrollbar strip on every Craft CP page. Overlay scroll lock\n * compensates only while locked (see a11y/scroll-lock.ts).\n */\nexport const ensureDocumentScrollStability = (): void => {\n // Intentionally empty — kept so older configurePluginKitWeb call sites stay safe.\n};\n","import { SUPPORTS_POPOVER } from './supports-popover.js';\n\nexport type PortalContainer = HTMLElement | ShadowRoot | null;\n\nlet defaultPortalClassName: string | undefined;\nlet defaultPortalContainer: PortalContainer | undefined;\nlet defaultShadowRootSelectors: string[] = ['[data-plugin-kit-shadow-root]'];\n\nexport const setPortalClassName = (className: string): void => {\n defaultPortalClassName = className.trim() || undefined;\n};\n\nexport const getPortalClassName = (className?: string): string | undefined => {\n return (className ?? defaultPortalClassName)?.trim() || undefined;\n};\n\nexport const setPortalContainer = (container: PortalContainer): void => {\n defaultPortalContainer = container;\n};\n\nexport const getPortalContainer = (container?: PortalContainer): PortalContainer | undefined => {\n return container ?? defaultPortalContainer;\n};\n\nexport const setShadowRootSelectors = (selectors: string[]): void => {\n const normalizedSelectors = (selectors || [])\n .map((selector) => selector.trim())\n .filter(Boolean);\n\n defaultShadowRootSelectors = normalizedSelectors.length > 0\n ? normalizedSelectors\n : ['[data-plugin-kit-shadow-root]'];\n};\n\nexport const getShadowRootSelectors = (): string[] => {\n return defaultShadowRootSelectors;\n};\n\n/**\n * Returns an HTMLElement suitable for appendChild — mirrors React `getPortalTargetForAppend`.\n * When the portal container is a ShadowRoot, prefers a dedicated mount node inside it.\n */\nexport function getPortalTargetForAppend(container?: PortalContainer): HTMLElement | undefined {\n const resolved = getPortalContainer(container);\n\n if (!resolved) {\n return undefined;\n }\n\n if (resolved instanceof HTMLElement) {\n return resolved;\n }\n\n const shadowRoot = resolved;\n\n const target = getShadowRootSelectors()\n .map((selector) => shadowRoot.querySelector<HTMLElement>(selector))\n .find((node) => Boolean(node));\n\n if (target) {\n return target;\n }\n\n return shadowRoot.host instanceof HTMLElement ? shadowRoot.host : undefined;\n}\n\n/** Resolves where floating popup layers should mount. Falls back to `document.body`. */\nexport function getPortalMountElement(container?: PortalContainer): HTMLElement {\n return getPortalTargetForAppend(container) ?? document.body;\n}\n\nexport function resolvePositionMethod(\n positionMethod: 'fixed' | 'absolute' | undefined,\n container?: PortalContainer,\n): 'fixed' | 'absolute' {\n if (positionMethod) {\n return positionMethod;\n }\n\n if (SUPPORTS_POPOVER) {\n return 'absolute';\n }\n\n const resolved = getPortalContainer(container);\n\n if (resolved instanceof ShadowRoot) {\n return 'fixed';\n }\n\n return 'absolute';\n}\n","import { ensureDocumentScrollStability } from './documentScrollStability.js';\nimport {\n setShadowRootSelectors,\n type PortalContainer,\n} from './portal.js';\n\nexport type PluginKitWebConfig = {\n /**\n * @deprecated Popups use the Popover API top layer — not DOM reparenting. Ignored if set.\n */\n portalClassName?: string;\n /**\n * When a `ShadowRoot`, used as a React portal target for Base UI compat.\n * No longer injects document scroll-gutter CSS (see scroll-lock.ts).\n */\n portalContainer?: PortalContainer;\n shadowRootSelectors?: string[];\n};\n\nexport const configurePluginKitWeb = (config: PluginKitWebConfig): void => {\n if (config.portalContainer instanceof ShadowRoot) {\n // Historically forced `html { scrollbar-gutter: stable }`; that is a no-op now.\n ensureDocumentScrollStability();\n }\n\n if (config.shadowRootSelectors) {\n setShadowRootSelectors(config.shadowRootSelectors);\n }\n};\n","export type AllDefinedOptions = {\n /**\n * Accepts a custom element tag name and returns `true` if the element should be awaited.\n * Tag names are always lowercase.\n */\n match?: (tagName: string) => boolean;\n /** Additional tag names to await that may not be in the DOM yet. */\n additionalElements?: string | string[];\n /** Root to search within. Defaults to `document`. Shadow roots are not traversed. */\n root?: Document | ShadowRoot;\n};\n\n/**\n * Waits for custom elements on the page to be registered before resolving.\n * By default, waits for all undefined `pk-*` elements.\n */\nexport async function allDefined(options: AllDefinedOptions = {}): Promise<void> {\n const opts = {\n match: (tagName: string) => tagName.startsWith('pk-'),\n additionalElements: [] as string[],\n root: document,\n ...options,\n };\n\n const additionalElements = Array.isArray(opts.additionalElements)\n ? opts.additionalElements\n : [opts.additionalElements];\n\n const undefinedElements = [...opts.root.querySelectorAll(':not(:defined)')]\n .map((el) => el.localName)\n .filter((tag, index, arr) => arr.indexOf(tag) === index)\n .filter((tag) => opts.match(tag));\n\n const tagsToAwait = [...undefinedElements, ...additionalElements];\n await Promise.all(tagsToAwait.map((tag) => customElements.whenDefined(tag)));\n await new Promise(requestAnimationFrame);\n}\n","let basePath = '';\n\nexport function setBasePath(path: string): void {\n basePath = path;\n}\n\nexport function getBasePath(subpath = ''): string {\n if (!basePath) {\n const el = document.querySelector('[data-plugin-kit]');\n\n if (el?.hasAttribute('data-plugin-kit')) {\n const rootRelativeUrl = new URL(el.getAttribute('data-plugin-kit') ?? '', window.location.href).pathname;\n setBasePath(rootRelativeUrl);\n } else {\n const scripts = [...document.getElementsByTagName('script')];\n const pkScript = scripts.find(\n (script) =>\n script.src.endsWith('plugin-kit.js') || script.src.endsWith('plugin-kit.loader.js'),\n );\n\n if (pkScript) {\n const path = String(pkScript.getAttribute('src'));\n setBasePath(path.split('/').slice(0, -1).join('/'));\n }\n }\n }\n\n return basePath.replace(/\\/$/, '') + (subpath ? `/${subpath.replace(/^\\//, '')}` : '');\n}\n","import { COMPONENT_MODULE_PATHS } from '../component-registry.js';\nimport { getBasePath } from './base-path.js';\n\nconst PK_PREFIX = 'pk-';\nconst DISCOVERY_EVENT = 'pk-discovery-complete';\n\nconst observer = new MutationObserver((mutations) => {\n for (const { addedNodes } of mutations) {\n for (const node of addedNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n void discover(node as Element);\n }\n }\n }\n});\n\nexport function startLoader(): void {\n void discover(document.documentElement);\n observer.observe(document.documentElement, { subtree: true, childList: true });\n}\n\nexport function stopLoader(): void {\n observer.disconnect();\n}\n\nexport async function discover(root: Document | Element = document): Promise<void> {\n const rootTagName = root instanceof Element ? root.tagName.toLowerCase() : '';\n const rootIsPluginKitComponent = rootTagName.startsWith(PK_PREFIX);\n const tags = [...root.querySelectorAll(':not(:defined)')]\n .map((el) => el.tagName.toLowerCase())\n .filter((tag) => tag.startsWith(PK_PREFIX));\n\n if (rootIsPluginKitComponent && !customElements.get(rootTagName)) {\n tags.push(rootTagName);\n }\n\n const preloadSelectors = root.querySelectorAll('[data-pk-preload]');\n const preloadRoots =\n root instanceof Element && root.hasAttribute('data-pk-preload')\n ? [root, ...preloadSelectors]\n : preloadSelectors;\n\n for (const el of preloadRoots) {\n tags.push(\n ...el\n .getAttribute('data-pk-preload')!\n .split(/\\s+/)\n .filter((tag) => tag.startsWith(PK_PREFIX)),\n );\n }\n\n const tagsToRegister = [...new Set(tags)];\n const imports = await Promise.allSettled(tagsToRegister.map((tagName) => register(tagName)));\n\n for (const imp of imports) {\n if (imp.status === 'rejected') {\n console.warn(imp.reason);\n }\n }\n\n await new Promise(requestAnimationFrame);\n\n root.dispatchEvent(\n new CustomEvent(DISCOVERY_EVENT, {\n bubbles: false,\n cancelable: false,\n composed: true,\n }),\n );\n}\n\nfunction register(tagName: string): Promise<void> {\n if (customElements.get(tagName)) {\n return Promise.resolve();\n }\n\n const modulePath = COMPONENT_MODULE_PATHS[tagName];\n\n if (!modulePath) {\n return Promise.reject(new Error(`Unable to autoload <${tagName}> — no module path registered`));\n }\n\n const path = getBasePath(modulePath);\n\n return import(/* @vite-ignore */ path).then(() => undefined);\n}\n\nlet turboTimeout = 2000;\n\n/** Prevent FOUCE when navigating with Turbo (Hotwire). */\nexport function preventTurboFouce(timeout = 2000): void {\n turboTimeout = timeout;\n document.addEventListener('turbo:before-render', handleTurboRender);\n}\n\nasync function handleTurboRender(event: Event): Promise<void> {\n const turboEvent = event as CustomEvent<{ newBody: Element; resume: () => void }>;\n const newBody = turboEvent.detail.newBody;\n\n turboEvent.preventDefault();\n\n try {\n await Promise.race([\n discover(newBody),\n new Promise<void>((resolve) => setTimeout(resolve, turboTimeout)),\n ]);\n } finally {\n turboEvent.detail.resume();\n }\n}\n\nexport const FOUCE_TIMEOUT_MS = 2000;\nexport const DISCOVERY_COMPLETE_EVENT = DISCOVERY_EVENT;\n"],"mappings":"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"}
@@ -52,6 +52,8 @@ var COMPONENT_MODULE_PATHS = {
52
52
  "pk-calendar": "components/calendar/calendar.js",
53
53
  "pk-date-picker": "components/date-picker/date-picker.js",
54
54
  "pk-combobox": "components/combobox/combobox.js",
55
+ "pk-autocomplete": "components/autocomplete/autocomplete.js",
56
+ "pk-image-browser": "components/image-browser/image-browser.js",
55
57
  "pk-time-picker": "components/time-picker/time-picker.js",
56
58
  "pk-copy-button": "components/copy-button/copy-button.js",
57
59
  "pk-connect": "components/connect/connect.js",
@@ -108,6 +110,8 @@ var LOADER_COMPONENT_ENTRIES = {
108
110
  "components/calendar/calendar": "src/components/calendar/pk-calendar.ts",
109
111
  "components/date-picker/date-picker": "src/components/date-picker/pk-date-picker.ts",
110
112
  "components/combobox/combobox": "src/components/combobox/pk-combobox.ts",
113
+ "components/autocomplete/autocomplete": "src/components/autocomplete/pk-autocomplete.ts",
114
+ "components/image-browser/image-browser": "src/components/image-browser/pk-image-browser.ts",
111
115
  "components/time-picker/time-picker": "src/components/time-picker/pk-time-picker.ts",
112
116
  "components/copy-button/copy-button": "src/components/copy-button/pk-copy-button.ts",
113
117
  "components/connect/connect": "src/components/connect/pk-connect.ts",
@@ -131,4 +135,4 @@ var BUNDLER_TAG_IMPORT_PATHS = Object.fromEntries(Object.keys(BUNDLER_COMPONENT_
131
135
  //#endregion
132
136
  export { COMPONENT_MODULE_PATHS as n, BUNDLER_TAG_IMPORT_PATHS as t };
133
137
 
134
- //# sourceMappingURL=component-registry-CNB8PbP_.js.map
138
+ //# sourceMappingURL=component-registry-D34fm8xW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-registry-D34fm8xW.js","names":[],"sources":["../../src/component-registry.ts"],"sourcesContent":["/**\n * Canonical tag → loader module path mapping for the autoloader.\n * Module paths are relative to the directory that contains plugin-kit.loader.js.\n */\nexport const COMPONENT_MODULE_PATHS: Record<string, string> = {\n 'pk-spinner': 'components/spinner/spinner.js',\n 'pk-icon': 'components/icon/icon.js',\n 'pk-button': 'components/button/button.js',\n 'pk-checkbox': 'components/checkbox/checkbox.js',\n 'pk-checkbox-select': 'components/checkbox-select/checkbox-select.js',\n 'pk-color-input': 'components/color-input/color-input.js',\n 'pk-code-editor': 'components/code-editor/code-editor.js',\n 'pk-input': 'components/input/input.js',\n 'pk-input-group': 'components/input-group/input-group.js',\n 'pk-input-group-addon': 'components/input-group/input-group-addon.js',\n 'pk-input-group-button': 'components/input-group/input-group-button.js',\n 'pk-input-group-input': 'components/input-group/input-group-input.js',\n 'pk-input-group-text': 'components/input-group/input-group-text.js',\n 'pk-input-group-textarea': 'components/input-group/input-group-textarea.js',\n 'pk-textarea': 'components/textarea/textarea.js',\n 'pk-tiptap-editor': 'components/tiptap/tiptap-editor.js',\n 'pk-tiptap-input': 'components/tiptap/tiptap-input.js',\n 'pk-tiptap-content': 'components/tiptap/tiptap-content.js',\n 'pk-field': 'components/field/field.js',\n 'pk-separator': 'components/separator/separator.js',\n 'pk-status': 'components/status/status.js',\n 'pk-toggle': 'components/toggle/toggle.js',\n 'pk-toggle-group': 'components/toggle-group/toggle-group.js',\n 'pk-lightswitch': 'components/lightswitch/lightswitch.js',\n 'pk-button-group': 'components/button-group/button-group.js',\n 'pk-button-group-separator': 'components/button-group/button-group-separator.js',\n 'pk-button-group-text': 'components/button-group/button-group-text.js',\n 'pk-dialog': 'components/dialog/dialog.js',\n 'pk-popup': 'components/popup/popup.js',\n 'pk-dropdown-label': 'components/dropdown-menu/dropdown-label.js',\n 'pk-dropdown-item': 'components/dropdown-menu/dropdown-item.js',\n 'pk-dropdown-separator': 'components/dropdown-menu/dropdown-separator.js',\n 'pk-dropdown-menu': 'components/dropdown-menu/dropdown-menu.js',\n 'pk-popover': 'components/popover/popover.js',\n 'pk-tooltip': 'components/tooltip/tooltip.js',\n 'pk-radio': 'components/radio-group/radio.js',\n 'pk-radio-group': 'components/radio-group/radio-group.js',\n 'pk-tab': 'components/tabs/tab.js',\n 'pk-tab-heading': 'components/tabs/tab-heading.js',\n 'pk-tab-panel': 'components/tabs/tab-panel.js',\n 'pk-tabs': 'components/tabs/tabs.js',\n 'pk-scroll-area': 'components/scroll-area/scroll-area.js',\n 'pk-option': 'components/select/option.js',\n 'pk-option-group': 'components/select/option-group.js',\n 'pk-select': 'components/select/select.js',\n 'pk-calendar': 'components/calendar/calendar.js',\n 'pk-date-picker': 'components/date-picker/date-picker.js',\n 'pk-combobox': 'components/combobox/combobox.js',\n 'pk-autocomplete': 'components/autocomplete/autocomplete.js',\n 'pk-image-browser': 'components/image-browser/image-browser.js',\n 'pk-time-picker': 'components/time-picker/time-picker.js',\n 'pk-copy-button': 'components/copy-button/copy-button.js',\n 'pk-connect': 'components/connect/connect.js',\n 'pk-connect-oauth': 'components/connect/connect-oauth.js',\n 'pk-editable-table': 'components/editable-table/editable-table.js',\n};\n\n/**\n * Canonical list of every `pk-*` custom element tag.\n * Single source of truth for FOUCE CSS generation and any tag enumeration.\n */\nexport const PK_COMPONENT_TAGS: readonly string[] = Object.keys(COMPONENT_MODULE_PATHS);\n\n/** Vite loader-build entries: output key → source module. */\nexport const LOADER_COMPONENT_ENTRIES: Record<string, string> = {\n 'components/spinner/spinner': 'src/components/spinner/pk-spinner.ts',\n // Loader ships the full icon set; bundler family `components/icon.js` stays opt-in.\n 'components/icon/icon': 'src/components/icon/pk-icon-loader.ts',\n 'components/button/button': 'src/components/button/pk-button.ts',\n 'components/checkbox/checkbox': 'src/components/checkbox/pk-checkbox.ts',\n 'components/checkbox-select/checkbox-select': 'src/components/checkbox-select/pk-checkbox-select.ts',\n 'components/color-input/color-input': 'src/components/color-input/pk-color-input.ts',\n 'components/code-editor/code-editor': 'src/components/code-editor/pk-code-editor.ts',\n 'components/input/input': 'src/components/input/pk-input.ts',\n 'components/input-group/input-group': 'src/components/input-group/pk-input-group.ts',\n 'components/input-group/input-group-addon': 'src/components/input-group/pk-input-group-addon.ts',\n 'components/input-group/input-group-button': 'src/components/input-group/pk-input-group-button.ts',\n 'components/input-group/input-group-input': 'src/components/input-group/pk-input-group-input.ts',\n 'components/input-group/input-group-text': 'src/components/input-group/pk-input-group-text.ts',\n 'components/input-group/input-group-textarea': 'src/components/input-group/pk-input-group-textarea.ts',\n 'components/textarea/textarea': 'src/components/textarea/pk-textarea.ts',\n 'components/tiptap/tiptap-editor': 'src/components/tiptap/pk-tiptap-editor.ts',\n 'components/tiptap/tiptap-input': 'src/components/tiptap/pk-tiptap-input.ts',\n 'components/tiptap/tiptap-content': 'src/components/tiptap/pk-tiptap-content.ts',\n 'components/field/field': 'src/components/field/pk-field.ts',\n 'components/separator/separator': 'src/components/separator/pk-separator.ts',\n 'components/status/status': 'src/components/status/pk-status.ts',\n 'components/toggle/toggle': 'src/components/toggle/pk-toggle.ts',\n 'components/toggle-group/toggle-group': 'src/components/toggle-group/pk-toggle-group.ts',\n 'components/lightswitch/lightswitch': 'src/components/lightswitch/pk-lightswitch.ts',\n 'components/button-group/button-group': 'src/components/button-group/pk-button-group.ts',\n 'components/button-group/button-group-separator': 'src/components/button-group/pk-button-group-separator.ts',\n 'components/button-group/button-group-text': 'src/components/button-group/pk-button-group-text.ts',\n 'components/dialog/dialog': 'src/components/dialog/pk-dialog.ts',\n 'components/popup/popup': 'src/components/popup/pk-popup.ts',\n 'components/dropdown-menu/dropdown-label': 'src/components/dropdown-menu/pk-dropdown-label.ts',\n 'components/dropdown-menu/dropdown-item': 'src/components/dropdown-menu/pk-dropdown-item.ts',\n 'components/dropdown-menu/dropdown-separator': 'src/components/dropdown-menu/pk-dropdown-separator.ts',\n 'components/dropdown-menu/dropdown-menu': 'src/components/dropdown-menu/pk-dropdown-menu.ts',\n 'components/popover/popover': 'src/components/popover/pk-popover.ts',\n 'components/tooltip/tooltip': 'src/components/tooltip/pk-tooltip.ts',\n 'components/radio-group/radio': 'src/components/radio-group/pk-radio.ts',\n 'components/radio-group/radio-group': 'src/components/radio-group/pk-radio-group.ts',\n 'components/tabs/tab': 'src/components/tabs/pk-tab.ts',\n 'components/tabs/tab-heading': 'src/components/tabs/pk-tab-heading.ts',\n 'components/tabs/tab-panel': 'src/components/tabs/pk-tab-panel.ts',\n 'components/tabs/tabs': 'src/components/tabs/pk-tabs.ts',\n 'components/scroll-area/scroll-area': 'src/components/scroll-area/pk-scroll-area.ts',\n 'components/select/option': 'src/components/select/pk-option.ts',\n 'components/select/option-group': 'src/components/select/pk-option-group.ts',\n 'components/select/select': 'src/components/select/pk-select.ts',\n 'components/calendar/calendar': 'src/components/calendar/pk-calendar.ts',\n 'components/date-picker/date-picker': 'src/components/date-picker/pk-date-picker.ts',\n 'components/combobox/combobox': 'src/components/combobox/pk-combobox.ts',\n 'components/autocomplete/autocomplete': 'src/components/autocomplete/pk-autocomplete.ts',\n 'components/image-browser/image-browser': 'src/components/image-browser/pk-image-browser.ts',\n 'components/time-picker/time-picker': 'src/components/time-picker/pk-time-picker.ts',\n 'components/copy-button/copy-button': 'src/components/copy-button/pk-copy-button.ts',\n 'components/connect/connect': 'src/components/connect/pk-connect.ts',\n 'components/connect/connect-oauth': 'src/components/connect/pk-connect-oauth.ts',\n 'components/editable-table/editable-table': 'src/components/editable-table/pk-editable-table.ts',\n};\n\n/** Loader-only shims → real element modules for the bundler dist graph. */\nconst BUNDLER_SRC_OVERRIDES: Record<string, string> = {\n 'src/components/icon/pk-icon-loader.ts': 'src/components/icon/pk-icon.ts',\n};\n\n/**\n * Vite `dist/` build entries for bundler cherry-picking.\n * Output paths mirror source layout, e.g. `dist/components/button/pk-button.js`.\n */\nexport const BUNDLER_COMPONENT_ENTRIES: Record<string, string> = Object.fromEntries(\n Object.values(LOADER_COMPONENT_ENTRIES).map((srcRel) => {\n const bundlerSrc = BUNDLER_SRC_OVERRIDES[srcRel] ?? srcRel;\n const key = bundlerSrc.replace(/^src\\//, '').replace(/\\.ts$/, '');\n return [key, bundlerSrc];\n }),\n);\n\n/** Tag → bundler dist subpath (relative to package root, no `./` prefix). */\nexport const BUNDLER_TAG_IMPORT_PATHS: Record<string, string> = Object.fromEntries(\n Object.keys(BUNDLER_COMPONENT_ENTRIES).map((key) => {\n const tag = key.split('/').pop()!;\n return [tag, `${key}.js`];\n }),\n);\n\nexport type PkComponentTag = keyof typeof BUNDLER_TAG_IMPORT_PATHS;\n\n/**\n * Short consumer entries published as `@verbb/plugin-kit-web/components/{key}.js`.\n * Each module side-effect-registers its family (compound folders register every tag).\n *\n * TipTap stays split — importing one surface must not pull the other two.\n */\nexport const COMPONENT_FAMILY_ENTRIES: Record<string, string> = {\n 'button': 'src/components/button/index.ts',\n 'button-group': 'src/components/button-group/index.ts',\n 'calendar': 'src/components/calendar/index.ts',\n 'checkbox': 'src/components/checkbox/index.ts',\n 'checkbox-select': 'src/components/checkbox-select/index.ts',\n 'code-editor': 'src/components/code-editor/index.ts',\n 'color-input': 'src/components/color-input/index.ts',\n 'autocomplete': 'src/components/autocomplete/index.ts',\n 'combobox': 'src/components/combobox/index.ts',\n 'copy-button': 'src/components/copy-button/index.ts',\n 'connect': 'src/components/connect/index.ts',\n 'date-picker': 'src/components/date-picker/index.ts',\n 'dialog': 'src/components/dialog/index.ts',\n 'dropdown-menu': 'src/components/dropdown-menu/index.ts',\n 'editable-table': 'src/components/editable-table/index.ts',\n 'field': 'src/components/field/index.ts',\n 'icon': 'src/components/icon/index.ts',\n 'image-browser': 'src/components/image-browser/index.ts',\n 'input': 'src/components/input/index.ts',\n 'input-group': 'src/components/input-group/index.ts',\n 'lightswitch': 'src/components/lightswitch/index.ts',\n 'popover': 'src/components/popover/index.ts',\n 'popup': 'src/components/popup/index.ts',\n 'radio-group': 'src/components/radio-group/index.ts',\n 'scroll-area': 'src/components/scroll-area/index.ts',\n 'select': 'src/components/select/index.ts',\n 'separator': 'src/components/separator/index.ts',\n 'spinner': 'src/components/spinner/index.ts',\n 'status': 'src/components/status/index.ts',\n 'tabs': 'src/components/tabs/index.ts',\n 'textarea': 'src/components/textarea/index.ts',\n 'time-picker': 'src/components/time-picker/index.ts',\n 'tiptap-content': 'src/components/tiptap/pk-tiptap-content.ts',\n 'tiptap-editor': 'src/components/tiptap/pk-tiptap-editor.ts',\n 'tiptap-input': 'src/components/tiptap/pk-tiptap-input.ts',\n 'toggle': 'src/components/toggle/index.ts',\n 'toggle-group': 'src/components/toggle-group/index.ts',\n 'tooltip': 'src/components/tooltip/index.ts',\n};\n"],"mappings":";;;;;AAIA,IAAa,yBAAiD;CAC1D,cAAc;CACd,WAAW;CACX,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,kBAAkB;CAClB,YAAY;CACZ,kBAAkB;CAClB,wBAAwB;CACxB,yBAAyB;CACzB,wBAAwB;CACxB,uBAAuB;CACvB,2BAA2B;CAC3B,eAAe;CACf,oBAAoB;CACpB,mBAAmB;CACnB,qBAAqB;CACrB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,kBAAkB;CAClB,mBAAmB;CACnB,6BAA6B;CAC7B,wBAAwB;CACxB,aAAa;CACb,YAAY;CACZ,qBAAqB;CACrB,oBAAoB;CACpB,yBAAyB;CACzB,oBAAoB;CACpB,cAAc;CACd,cAAc;CACd,YAAY;CACZ,kBAAkB;CAClB,UAAU;CACV,kBAAkB;CAClB,gBAAgB;CAChB,WAAW;CACX,kBAAkB;CAClB,aAAa;CACb,mBAAmB;CACnB,aAAa;CACb,eAAe;CACf,kBAAkB;CAClB,eAAe;CACf,mBAAmB;CACnB,oBAAoB;CACpB,kBAAkB;CAClB,kBAAkB;CAClB,cAAc;CACd,oBAAoB;CACpB,qBAAqB;CACxB;;AASD,IAAa,2BAAmD;CAC5D,8BAA8B;CAE9B,wBAAwB;CACxB,4BAA4B;CAC5B,gCAAgC;CAChC,8CAA8C;CAC9C,sCAAsC;CACtC,sCAAsC;CACtC,0BAA0B;CAC1B,sCAAsC;CACtC,4CAA4C;CAC5C,6CAA6C;CAC7C,4CAA4C;CAC5C,2CAA2C;CAC3C,+CAA+C;CAC/C,gCAAgC;CAChC,mCAAmC;CACnC,kCAAkC;CAClC,oCAAoC;CACpC,0BAA0B;CAC1B,kCAAkC;CAClC,4BAA4B;CAC5B,4BAA4B;CAC5B,wCAAwC;CACxC,sCAAsC;CACtC,wCAAwC;CACxC,kDAAkD;CAClD,6CAA6C;CAC7C,4BAA4B;CAC5B,0BAA0B;CAC1B,2CAA2C;CAC3C,0CAA0C;CAC1C,+CAA+C;CAC/C,0CAA0C;CAC1C,8BAA8B;CAC9B,8BAA8B;CAC9B,gCAAgC;CAChC,sCAAsC;CACtC,uBAAuB;CACvB,+BAA+B;CAC/B,6BAA6B;CAC7B,wBAAwB;CACxB,sCAAsC;CACtC,4BAA4B;CAC5B,kCAAkC;CAClC,4BAA4B;CAC5B,gCAAgC;CAChC,sCAAsC;CACtC,gCAAgC;CAChC,wCAAwC;CACxC,0CAA0C;CAC1C,sCAAsC;CACtC,sCAAsC;CACtC,8BAA8B;CAC9B,oCAAoC;CACpC,4CAA4C;CAC/C;;AAGD,IAAM,wBAAgD,EAClD,yCAAyC,kCAC5C;;;;;AAMD,IAAa,4BAAoD,OAAO,YACpE,OAAO,OAAO,yBAAyB,CAAC,KAAK,WAAW;CACpD,MAAM,aAAa,sBAAsB,WAAW;AAEpD,QAAO,CADK,WAAW,QAAQ,UAAU,GAAG,CAAC,QAAQ,SAAS,GACtD,EAAK,WAAW;EAC1B,CACL;;AAGD,IAAa,2BAAmD,OAAO,YACnE,OAAO,KAAK,0BAA0B,CAAC,KAAK,QAAQ;AAEhD,QAAO,CADK,IAAI,MAAM,IAAI,CAAC,KACnB,EAAK,GAAG,IAAI,KAAK;EAC3B,CACL"}
@@ -11,4 +11,4 @@ function hasInstructionContent(hasSlot, instructions, withInstructions = false)
11
11
  //#endregion
12
12
  export { readLegacyInstructions as n, hasInstructionContent as t };
13
13
 
14
- //# sourceMappingURL=field-labels-CoU9dnNq.js.map
14
+ //# sourceMappingURL=field-labels-CmuAW8Cl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-labels-CoU9dnNq.js","names":[],"sources":["../../src/internal/field-labels.ts"],"sourcesContent":["/** Reads the legacy `hint` attribute when `instructions` is empty. */\nexport function readLegacyInstructions(element: HTMLElement, instructions: string): string {\n if (instructions) {\n return instructions;\n }\n\n return element.getAttribute('hint') ?? '';\n}\n\n/** Whether a named slot (or legacy alias) has content. */\nexport function hasInstructionContent(\n hasSlot: (name: string, flag?: boolean) => boolean,\n instructions: string,\n withInstructions = false,\n): boolean {\n return Boolean(instructions)\n || hasSlot('instructions', withInstructions)\n || hasSlot('hint');\n}\n"],"mappings":";;AACA,SAAgB,uBAAuB,SAAsB,cAA8B;AACvF,KAAI,aACA,QAAO;AAGX,QAAO,QAAQ,aAAa,OAAO,IAAI;;;AAI3C,SAAgB,sBACZ,SACA,cACA,mBAAmB,OACZ;AACP,QAAO,QAAQ,aAAa,IACrB,QAAQ,gBAAgB,iBAAiB,IACzC,QAAQ,OAAO"}
1
+ {"version":3,"file":"field-labels-CmuAW8Cl.js","names":[],"sources":["../../src/internal/field-labels.ts"],"sourcesContent":["/** Reads the legacy `hint` attribute when `instructions` is empty. */\nexport function readLegacyInstructions(element: HTMLElement, instructions: string): string {\n if (instructions) {\n return instructions;\n }\n\n return element.getAttribute('hint') ?? '';\n}\n\n/** Whether a named slot (or legacy alias) has content. */\nexport function hasInstructionContent(\n hasSlot: (name: string, flag?: boolean) => boolean,\n instructions: string,\n withInstructions = false,\n): boolean {\n return Boolean(instructions)\n || hasSlot('instructions', withInstructions)\n || hasSlot('hint');\n}\n"],"mappings":";;AACA,SAAgB,uBAAuB,SAAsB,cAA8B;AACvF,KAAI,aACA,QAAO;AAGX,QAAO,QAAQ,aAAa,OAAO,IAAI;;;AAI3C,SAAgB,sBACZ,SACA,cACA,mBAAmB,OACZ;AACP,QAAO,QAAQ,aAAa,IACrB,QAAQ,gBAAgB,iBAAiB,IACzC,QAAQ,OAAO"}
@@ -0,0 +1,121 @@
1
+ import { t as syncListboxSeparators } from "./sync-listbox-separators-B1-V0oJi.js";
2
+ //#region src/utils/popup-content-exit.ts
3
+ /**
4
+ * Wait for `pk-popup-content-out` on a listbox panel, then clear the `closing` class.
5
+ * Shared by Combobox and Autocomplete so exit motion stays one implementation.
6
+ */
7
+ function waitForPopupContentExitAnimation(panel, fallbackMs = 150) {
8
+ if (!panel) return Promise.resolve();
9
+ return new Promise((resolve) => {
10
+ let settled = false;
11
+ const finish = () => {
12
+ if (settled) return;
13
+ settled = true;
14
+ panel.removeEventListener("animationend", onAnimationEnd);
15
+ window.clearTimeout(fallback);
16
+ panel.classList.remove("closing");
17
+ resolve();
18
+ };
19
+ const onAnimationEnd = (event) => {
20
+ if (event.target === panel && event.animationName.startsWith("pk-popup-content-out")) finish();
21
+ };
22
+ panel.classList.add("closing");
23
+ panel.addEventListener("animationend", onAnimationEnd);
24
+ const fallback = window.setTimeout(finish, fallbackMs);
25
+ });
26
+ }
27
+ //#endregion
28
+ //#region src/internal/sync-filtered-options.ts
29
+ /**
30
+ * Apply filter visibility, match highlight, option ids, and group empty markers.
31
+ * Shared by Combobox and Autocomplete — not a full listbox controller.
32
+ */
33
+ function syncFilteredOptions(config) {
34
+ const { host, options, visible, listboxId, filterQuery, isSelected } = config;
35
+ for (const option of options) {
36
+ option.selected = isSelected(option.value);
37
+ option.hidden = !visible.includes(option);
38
+ option.optionId = `${listboxId}-option-${option.value}`;
39
+ option.matchQuery = filterQuery;
40
+ }
41
+ for (const group of host.querySelectorAll("pk-option-group")) {
42
+ const groupOptions = [...group.querySelectorAll("pk-option")];
43
+ const filterEmpty = groupOptions.length > 0 && groupOptions.every((option) => option.hidden);
44
+ group.toggleAttribute("data-pk-filter-empty", filterEmpty);
45
+ }
46
+ syncListboxSeparators(host);
47
+ }
48
+ //#endregion
49
+ //#region src/utils/async-option-fetch.ts
50
+ var AsyncOptionFetcher = class {
51
+ constructor(getHandler, callbacks) {
52
+ this.getHandler = getHandler;
53
+ this.timer = null;
54
+ this.requestId = 0;
55
+ this.abortController = null;
56
+ this.callbacks = callbacks;
57
+ this.debounceMs = callbacks.debounceMs ?? 200;
58
+ this.errorLabel = callbacks.errorLabel ?? "options";
59
+ }
60
+ schedule(query) {
61
+ if (this.timer !== null) window.clearTimeout(this.timer);
62
+ this.timer = window.setTimeout(() => {
63
+ this.timer = null;
64
+ this.run(query);
65
+ }, this.debounceMs);
66
+ }
67
+ cancel() {
68
+ if (this.timer !== null) {
69
+ window.clearTimeout(this.timer);
70
+ this.timer = null;
71
+ }
72
+ this.abortController?.abort();
73
+ this.abortController = null;
74
+ }
75
+ async run(query) {
76
+ const handler = this.getHandler();
77
+ if (!handler) return;
78
+ const requestId = ++this.requestId;
79
+ this.abortController?.abort();
80
+ this.abortController = new AbortController();
81
+ if (!query) {
82
+ this.callbacks.onEmptyQuery?.();
83
+ return;
84
+ }
85
+ this.callbacks.onLoading?.();
86
+ try {
87
+ const results = await handler(query, this.abortController.signal);
88
+ if (requestId !== this.requestId) return;
89
+ this.callbacks.onResults(results);
90
+ } catch (error) {
91
+ if (this.abortController?.signal.aborted || requestId !== this.requestId) return;
92
+ if (error instanceof DOMException && error.name === "AbortError") return;
93
+ console.error(`Failed to load ${this.errorLabel}:`, error);
94
+ this.callbacks.onError?.("Failed to load options. Please try again.");
95
+ this.callbacks.onResults([]);
96
+ } finally {
97
+ if (requestId === this.requestId) this.callbacks.onSettled?.();
98
+ }
99
+ }
100
+ };
101
+ //#endregion
102
+ //#region src/utils/option-filter.ts
103
+ /**
104
+ * Default Combobox / Autocomplete filter: label, value, or full search text substring.
105
+ * Rich options may set a short `label` for the closed input — still match subtitle text.
106
+ */
107
+ function defaultOptionFilter(option, query) {
108
+ const label = option.getLabel().toLowerCase();
109
+ const value = option.value.toLowerCase();
110
+ const searchText = (option.getSearchText?.() ?? label).toLowerCase();
111
+ return label.includes(query) || value.includes(query) || searchText.includes(query);
112
+ }
113
+ /** Resolve a custom filter or the default substring match. */
114
+ function matchesOptionFilter(option, query, filter) {
115
+ if (filter) return filter(option, query);
116
+ return defaultOptionFilter(option, query);
117
+ }
118
+ //#endregion
119
+ export { waitForPopupContentExitAnimation as i, AsyncOptionFetcher as n, syncFilteredOptions as r, matchesOptionFilter as t };
120
+
121
+ //# sourceMappingURL=option-filter-BQqr8Z21.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-filter-BQqr8Z21.js","names":[],"sources":["../../src/utils/popup-content-exit.ts","../../src/internal/sync-filtered-options.ts","../../src/utils/async-option-fetch.ts","../../src/utils/option-filter.ts"],"sourcesContent":["/**\n * Wait for `pk-popup-content-out` on a listbox panel, then clear the `closing` class.\n * Shared by Combobox and Autocomplete so exit motion stays one implementation.\n */\nexport function waitForPopupContentExitAnimation(\n panel: HTMLElement | null | undefined,\n fallbackMs = 150,\n): Promise<void> {\n if (!panel) {\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n let settled = false;\n\n const finish = (): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n panel.removeEventListener('animationend', onAnimationEnd);\n window.clearTimeout(fallback);\n panel.classList.remove('closing');\n resolve();\n };\n\n const onAnimationEnd = (event: AnimationEvent): void => {\n if (event.target === panel && event.animationName.startsWith('pk-popup-content-out')) {\n finish();\n }\n };\n\n panel.classList.add('closing');\n panel.addEventListener('animationend', onAnimationEnd);\n const fallback = window.setTimeout(finish, fallbackMs);\n });\n}\n","import type { PkOption } from '../components/select/pk-option.js';\nimport { syncListboxSeparators } from './sync-listbox-separators.js';\n\nexport type SyncFilteredOptionsConfig = {\n /** Host that owns `pk-option` / `pk-option-group` / `pk-separator` children. */\n host: HTMLElement;\n options: PkOption[];\n /** Options that should remain visible (already filtered). */\n visible: PkOption[];\n /** Prefix for `optionId` values (e.g. listbox id). */\n listboxId: string;\n /** Lowercased query for `matchQuery` highlight; empty when closed / unfiltered. */\n filterQuery: string;\n /**\n * Whether each option is “selected” for checkmarks.\n * Autocomplete always returns false — the freeform text is the value.\n */\n isSelected: (value: string) => boolean;\n};\n\n/**\n * Apply filter visibility, match highlight, option ids, and group empty markers.\n * Shared by Combobox and Autocomplete — not a full listbox controller.\n */\nexport function syncFilteredOptions(config: SyncFilteredOptionsConfig): void {\n const {\n host, options, visible, listboxId, filterQuery, isSelected,\n } = config;\n\n for (const option of options) {\n option.selected = isSelected(option.value);\n option.hidden = !visible.includes(option);\n option.optionId = `${listboxId}-option-${option.value}`;\n option.matchQuery = filterQuery;\n }\n\n for (const group of host.querySelectorAll('pk-option-group')) {\n const groupOptions = [...group.querySelectorAll('pk-option')];\n // Use data-pk-filter-empty — not `hidden` — so clearing the query can\n // resurrect options. `hidden` is reserved for intentional author hide.\n const filterEmpty = groupOptions.length > 0\n && groupOptions.every((option) => option.hidden);\n\n group.toggleAttribute('data-pk-filter-empty', filterEmpty);\n }\n\n syncListboxSeparators(host);\n}\n","/**\n * Debounced async option fetch with abort + stale-request guards.\n * Used by Combobox and Autocomplete so both share one loading lifecycle.\n */\nexport type PkAsyncOptionItem = {\n value: string;\n label: string;\n};\n\nexport type PkAsyncOptionFetchHandler = (\n query: string,\n signal: AbortSignal,\n) => Promise<PkAsyncOptionItem[]>;\n\nexport type PkAsyncOptionFetchCallbacks = {\n /** Called when a fetch starts (non-empty query). */\n onLoading?: () => void;\n /** Apply results for the latest request (may be empty). */\n onResults: (items: PkAsyncOptionItem[]) => void;\n /** Called when a non-abort failure occurs for the latest request. */\n onError?: (message: string) => void;\n /** Called when loading ends for the latest request (success or error). */\n onSettled?: () => void;\n /** Empty query — typically show selected meta or clear. */\n onEmptyQuery?: () => void;\n /** Log context when a fetch throws (defaults to \"options\"). */\n errorLabel?: string;\n debounceMs?: number;\n};\n\nexport class AsyncOptionFetcher {\n private timer: number | null = null;\n private requestId = 0;\n private abortController: AbortController | null = null;\n private readonly debounceMs: number;\n private readonly errorLabel: string;\n private readonly callbacks: PkAsyncOptionFetchCallbacks;\n\n constructor(\n private readonly getHandler: () => PkAsyncOptionFetchHandler | null,\n callbacks: PkAsyncOptionFetchCallbacks,\n ) {\n this.callbacks = callbacks;\n this.debounceMs = callbacks.debounceMs ?? 200;\n this.errorLabel = callbacks.errorLabel ?? 'options';\n }\n\n schedule(query: string): void {\n if (this.timer !== null) {\n window.clearTimeout(this.timer);\n }\n\n this.timer = window.setTimeout(() => {\n this.timer = null;\n void this.run(query);\n }, this.debounceMs);\n }\n\n cancel(): void {\n if (this.timer !== null) {\n window.clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.abortController?.abort();\n this.abortController = null;\n }\n\n private async run(query: string): Promise<void> {\n const handler = this.getHandler();\n\n if (!handler) {\n return;\n }\n\n const requestId = ++this.requestId;\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n if (!query) {\n this.callbacks.onEmptyQuery?.();\n return;\n }\n\n this.callbacks.onLoading?.();\n\n try {\n const results = await handler(query, this.abortController.signal);\n\n if (requestId !== this.requestId) {\n return;\n }\n\n this.callbacks.onResults(results);\n } catch (error) {\n if (this.abortController?.signal.aborted || requestId !== this.requestId) {\n return;\n }\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n\n console.error(`Failed to load ${this.errorLabel}:`, error);\n this.callbacks.onError?.('Failed to load options. Please try again.');\n this.callbacks.onResults([]);\n } finally {\n if (requestId === this.requestId) {\n this.callbacks.onSettled?.();\n }\n }\n }\n}\n","import type { PkOption } from '../components/select/pk-option.js';\n\n/** Custom option filter — `(option, query) => boolean`. Query is already lowercased. */\nexport type PkOptionFilter = (option: PkOption, query: string) => boolean;\n\n/**\n * Default Combobox / Autocomplete filter: label, value, or full search text substring.\n * Rich options may set a short `label` for the closed input — still match subtitle text.\n */\nexport function defaultOptionFilter(option: PkOption, query: string): boolean {\n const label = option.getLabel().toLowerCase();\n const value = option.value.toLowerCase();\n const searchText = (option.getSearchText?.() ?? label).toLowerCase();\n\n return label.includes(query) || value.includes(query) || searchText.includes(query);\n}\n\n/** Resolve a custom filter or the default substring match. */\nexport function matchesOptionFilter(\n option: PkOption,\n query: string,\n filter: PkOptionFilter | null | undefined,\n): boolean {\n if (filter) {\n return filter(option, query);\n }\n\n return defaultOptionFilter(option, query);\n}\n"],"mappings":"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"}