@verbb/plugin-kit-web 2.0.15 → 2.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +3 -3
  3. package/custom-elements.json +39781 -0
  4. package/dist/base/pk-form-associated-element.d.ts +17 -1
  5. package/dist/base/pk-form-associated-element.d.ts.map +1 -1
  6. package/dist/chunks/{animate-with-class-ZJeCOKB3.js → animate-with-class-CsDwYnXL.js} +1 -1
  7. package/dist/chunks/{animate-with-class-ZJeCOKB3.js.map → animate-with-class-CsDwYnXL.js.map} +1 -1
  8. package/dist/chunks/{autoloader-DPX9YYZs.js → autoloader-dJO3tYOX.js} +2 -2
  9. package/dist/chunks/{autoloader-DPX9YYZs.js.map → autoloader-dJO3tYOX.js.map} +1 -1
  10. package/dist/chunks/{component-registry-CNB8PbP_.js → component-registry-D34fm8xW.js} +5 -1
  11. package/dist/chunks/component-registry-D34fm8xW.js.map +1 -0
  12. package/dist/chunks/{field-labels-CoU9dnNq.js → field-labels-CmuAW8Cl.js} +1 -1
  13. package/dist/chunks/{field-labels-CoU9dnNq.js.map → field-labels-CmuAW8Cl.js.map} +1 -1
  14. package/dist/chunks/option-filter-BQqr8Z21.js +121 -0
  15. package/dist/chunks/option-filter-BQqr8Z21.js.map +1 -0
  16. package/dist/chunks/pk-autocomplete-IFL-u-RF.js +992 -0
  17. package/dist/chunks/pk-autocomplete-IFL-u-RF.js.map +1 -0
  18. package/dist/chunks/{pk-button-BWGDkuzc.js → pk-button-BrH4u4Qr.js} +8 -4
  19. package/dist/chunks/{pk-button-BWGDkuzc.js.map → pk-button-BrH4u4Qr.js.map} +1 -1
  20. package/dist/chunks/{pk-calendar-enTOUCRD.js → pk-calendar-Z7Y0PjeY.js} +1 -1
  21. package/dist/chunks/{pk-calendar-enTOUCRD.js.map → pk-calendar-Z7Y0PjeY.js.map} +1 -1
  22. package/dist/chunks/{pk-checkbox-CvZwJZn_.js → pk-checkbox-CfV1uDdC.js} +2 -2
  23. package/dist/chunks/{pk-checkbox-CvZwJZn_.js.map → pk-checkbox-CfV1uDdC.js.map} +1 -1
  24. package/dist/chunks/{pk-checkbox-select-DclPoyDM.js → pk-checkbox-select-DeCaI3a0.js} +2 -2
  25. package/dist/chunks/{pk-checkbox-select-DclPoyDM.js.map → pk-checkbox-select-DeCaI3a0.js.map} +1 -1
  26. package/dist/chunks/{pk-code-editor-CrKnJUyi.js → pk-code-editor-BG9sG_Fy.js} +2 -2
  27. package/dist/chunks/{pk-code-editor-CrKnJUyi.js.map → pk-code-editor-BG9sG_Fy.js.map} +1 -1
  28. package/dist/chunks/{pk-color-input-DXdqNCK7.js → pk-color-input-CncNce1C.js} +2 -2
  29. package/dist/chunks/{pk-color-input-DXdqNCK7.js.map → pk-color-input-CncNce1C.js.map} +1 -1
  30. package/dist/chunks/{pk-combobox-BLft8AXy.js → pk-combobox-CL9En0J-.js} +49 -92
  31. package/dist/chunks/pk-combobox-CL9En0J-.js.map +1 -0
  32. package/dist/chunks/{pk-connect.styles-DshgIW2n.js → pk-connect.styles-BhW406jt.js} +1 -1
  33. package/dist/chunks/{pk-connect.styles-DshgIW2n.js.map → pk-connect.styles-BhW406jt.js.map} +1 -1
  34. package/dist/chunks/{pk-copy-button-asOLQkqk.js → pk-copy-button-BVaOLtYG.js} +46 -5
  35. package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +1 -0
  36. package/dist/chunks/{pk-date-picker-Bri3kZ6x.js → pk-date-picker-BEAd4Ngl.js} +6 -6
  37. package/dist/chunks/{pk-date-picker-Bri3kZ6x.js.map → pk-date-picker-BEAd4Ngl.js.map} +1 -1
  38. package/dist/chunks/{pk-dialog-BbEfvb0g.js → pk-dialog-VMQqLW1f.js} +2 -2
  39. package/dist/chunks/{pk-dialog-BbEfvb0g.js.map → pk-dialog-VMQqLW1f.js.map} +1 -1
  40. package/dist/chunks/{pk-dropdown-item-BoZTGWMU.js → pk-dropdown-item-D9OaG5o-.js} +9 -5
  41. package/dist/chunks/pk-dropdown-item-D9OaG5o-.js.map +1 -0
  42. package/dist/chunks/{pk-dropdown-label-Da28F917.js → pk-dropdown-label-CRNWMWQd.js} +1 -1
  43. package/dist/chunks/{pk-dropdown-label-Da28F917.js.map → pk-dropdown-label-CRNWMWQd.js.map} +1 -1
  44. package/dist/chunks/{pk-dropdown-menu-CfZc7dIz.js → pk-dropdown-menu-DW1wI8xQ.js} +6 -4
  45. package/dist/chunks/pk-dropdown-menu-DW1wI8xQ.js.map +1 -0
  46. package/dist/chunks/{pk-editable-table-Cn4WXqAo.js → pk-editable-table-BoqfveXO.js} +17 -19
  47. package/dist/chunks/pk-editable-table-BoqfveXO.js.map +1 -0
  48. package/dist/chunks/{pk-field-NL4KdFZC.js → pk-field-UAlMq6mQ.js} +2 -2
  49. package/dist/chunks/{pk-field-NL4KdFZC.js.map → pk-field-UAlMq6mQ.js.map} +1 -1
  50. package/dist/chunks/{pk-form-associated-element-9M2NzOE2.js → pk-form-associated-element-CCQALRGB.js} +14 -2
  51. package/dist/chunks/pk-form-associated-element-CCQALRGB.js.map +1 -0
  52. package/dist/chunks/pk-image-browser-DwiCFOIG.js +1364 -0
  53. package/dist/chunks/pk-image-browser-DwiCFOIG.js.map +1 -0
  54. package/dist/chunks/{pk-input-DDkIXOkt.js → pk-input-CF_icEtR.js} +76 -30
  55. package/dist/chunks/pk-input-CF_icEtR.js.map +1 -0
  56. package/dist/chunks/{pk-input-group-CRPSBFhX.js → pk-input-group-BLqKPnfc.js} +2 -2
  57. package/dist/chunks/{pk-input-group-CRPSBFhX.js.map → pk-input-group-BLqKPnfc.js.map} +1 -1
  58. package/dist/chunks/{pk-input-group-addon-B0StOmTJ.js → pk-input-group-addon-ClBkGmAw.js} +1 -1
  59. package/dist/chunks/{pk-input-group-addon-B0StOmTJ.js.map → pk-input-group-addon-ClBkGmAw.js.map} +1 -1
  60. package/dist/chunks/{pk-input-group-button-CnKajvsP.js → pk-input-group-button-CHQHsWd4.js} +1 -1
  61. package/dist/chunks/{pk-input-group-button-CnKajvsP.js.map → pk-input-group-button-CHQHsWd4.js.map} +1 -1
  62. package/dist/chunks/{pk-input-group-input-mllffsjQ.js → pk-input-group-input-oNnqMBGU.js} +1 -1
  63. package/dist/chunks/{pk-input-group-input-mllffsjQ.js.map → pk-input-group-input-oNnqMBGU.js.map} +1 -1
  64. package/dist/chunks/{pk-input-group-text-DvaPJvh2.js → pk-input-group-text-HUxlXROB.js} +1 -1
  65. package/dist/chunks/{pk-input-group-text-DvaPJvh2.js.map → pk-input-group-text-HUxlXROB.js.map} +1 -1
  66. package/dist/chunks/{pk-input-group-textarea-CqYv8tUQ.js → pk-input-group-textarea-Cl2FNuw-.js} +1 -1
  67. package/dist/chunks/{pk-input-group-textarea-CqYv8tUQ.js.map → pk-input-group-textarea-Cl2FNuw-.js.map} +1 -1
  68. package/dist/chunks/{pk-lightswitch-DI1BeCmA.js → pk-lightswitch-D1qEFRxK.js} +3 -3
  69. package/dist/chunks/{pk-lightswitch-DI1BeCmA.js.map → pk-lightswitch-D1qEFRxK.js.map} +1 -1
  70. package/dist/chunks/{pk-option-MGj9SKOK.js → pk-option-DQZHV9jL.js} +3 -2
  71. package/dist/chunks/pk-option-DQZHV9jL.js.map +1 -0
  72. package/dist/chunks/{pk-option-group-Cs6N7mlP.js → pk-option-group-CCzJkBFp.js} +1 -1
  73. package/dist/chunks/{pk-option-group-Cs6N7mlP.js.map → pk-option-group-CCzJkBFp.js.map} +1 -1
  74. package/dist/chunks/{pk-popover-duyNosk2.js → pk-popover-D3jkHfwB.js} +4 -4
  75. package/dist/chunks/pk-popover-D3jkHfwB.js.map +1 -0
  76. package/dist/chunks/{pk-popup-B9AgBC2V.js → pk-popup-B65tZMQH.js} +23 -1
  77. package/dist/chunks/pk-popup-B65tZMQH.js.map +1 -0
  78. package/dist/chunks/{pk-radio-BK4D2Htu.js → pk-radio-B5XkMHy3.js} +1 -1
  79. package/dist/chunks/{pk-radio-BK4D2Htu.js.map → pk-radio-B5XkMHy3.js.map} +1 -1
  80. package/dist/chunks/{pk-radio-group-BRJIjOsR.js → pk-radio-group-ByrxGLdX.js} +3 -3
  81. package/dist/chunks/{pk-radio-group-BRJIjOsR.js.map → pk-radio-group-ByrxGLdX.js.map} +1 -1
  82. package/dist/chunks/{pk-scroll-area-BR6ckorh.js → pk-scroll-area-CdfNxYz8.js} +1 -1
  83. package/dist/chunks/{pk-scroll-area-BR6ckorh.js.map → pk-scroll-area-CdfNxYz8.js.map} +1 -1
  84. package/dist/chunks/{pk-select-C1s0OJr0.js → pk-select-CdQdhnZN.js} +7 -5
  85. package/dist/chunks/pk-select-CdQdhnZN.js.map +1 -0
  86. package/dist/chunks/{pk-separator-CHij3vEG.js → pk-separator-N-VyjYE6.js} +1 -1
  87. package/dist/chunks/{pk-separator-CHij3vEG.js.map → pk-separator-N-VyjYE6.js.map} +1 -1
  88. package/dist/chunks/{pk-status-D1IzTSI2.js → pk-status-BehQARDv.js} +1 -1
  89. package/dist/chunks/{pk-status-D1IzTSI2.js.map → pk-status-BehQARDv.js.map} +1 -1
  90. package/dist/chunks/{pk-tab-2MHunhlF.js → pk-tab-CTloD18e.js} +1 -1
  91. package/dist/chunks/{pk-tab-2MHunhlF.js.map → pk-tab-CTloD18e.js.map} +1 -1
  92. package/dist/chunks/{pk-tab-heading-BV6m_sT-.js → pk-tab-heading-Cjcgebxn.js} +1 -1
  93. package/dist/chunks/{pk-tab-heading-BV6m_sT-.js.map → pk-tab-heading-Cjcgebxn.js.map} +1 -1
  94. package/dist/chunks/{pk-tab-panel-C6FxQw9q.js → pk-tab-panel-CkKU5-Ah.js} +1 -1
  95. package/dist/chunks/{pk-tab-panel-C6FxQw9q.js.map → pk-tab-panel-CkKU5-Ah.js.map} +1 -1
  96. package/dist/chunks/{pk-tabs-BTE63uK9.js → pk-tabs-BgEBki1q.js} +1 -1
  97. package/dist/chunks/{pk-tabs-BTE63uK9.js.map → pk-tabs-BgEBki1q.js.map} +1 -1
  98. package/dist/chunks/{pk-textarea-BcAyZYC-.js → pk-textarea-CYM2tK88.js} +3 -3
  99. package/dist/chunks/{pk-textarea-BcAyZYC-.js.map → pk-textarea-CYM2tK88.js.map} +1 -1
  100. package/dist/chunks/{pk-time-picker-5D4nmig2.js → pk-time-picker-CebRqydV.js} +3 -3
  101. package/dist/chunks/{pk-time-picker-5D4nmig2.js.map → pk-time-picker-CebRqydV.js.map} +1 -1
  102. package/dist/chunks/{pk-tiptap-content-BPd4GO6c.js → pk-tiptap-content-CL8smjGi.js} +6 -3
  103. package/dist/chunks/{pk-tiptap-content-BPd4GO6c.js.map → pk-tiptap-content-CL8smjGi.js.map} +1 -1
  104. package/dist/chunks/{pk-tiptap-editor-tG67Vegc.js → pk-tiptap-editor-CTz-yfHL.js} +335 -19
  105. package/dist/chunks/pk-tiptap-editor-CTz-yfHL.js.map +1 -0
  106. package/dist/chunks/{pk-tiptap-input-CtefNnaK.js → pk-tiptap-input-Y9eog9Zn.js} +3 -3
  107. package/dist/chunks/{pk-tiptap-input-CtefNnaK.js.map → pk-tiptap-input-Y9eog9Zn.js.map} +1 -1
  108. package/dist/chunks/{pk-toggle-CW-lflrh.js → pk-toggle-BthhH7vl.js} +1 -1
  109. package/dist/chunks/{pk-toggle-CW-lflrh.js.map → pk-toggle-BthhH7vl.js.map} +1 -1
  110. package/dist/chunks/{pk-toggle-group-BKymefo3.js → pk-toggle-group-D2Quux8D.js} +1 -1
  111. package/dist/chunks/{pk-toggle-group-BKymefo3.js.map → pk-toggle-group-D2Quux8D.js.map} +1 -1
  112. package/dist/chunks/{pk-tooltip-BoDq8YVe.js → pk-tooltip--QBV6puX.js} +2 -2
  113. package/dist/chunks/{pk-tooltip-BoDq8YVe.js.map → pk-tooltip--QBV6puX.js.map} +1 -1
  114. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js → popup-content-animation.styles-BnNiguJo.js} +1 -1
  115. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js.map → popup-content-animation.styles-BnNiguJo.js.map} +1 -1
  116. package/dist/chunks/{popup-pointer-DMnuZDQl.js → popup-pointer-CuLjk1th.js} +1 -1
  117. package/dist/chunks/{popup-pointer-DMnuZDQl.js.map → popup-pointer-CuLjk1th.js.map} +1 -1
  118. package/dist/chunks/{register-CQodpTWT.js → register-aJw-9RWi.js} +46 -46
  119. package/dist/chunks/{register-CQodpTWT.js.map → register-aJw-9RWi.js.map} +1 -1
  120. package/dist/chunks/{register-components-B-qCPFFh.js → register-components-BT9THgdh.js} +1 -1
  121. package/dist/chunks/{register-components-B-qCPFFh.js.map → register-components-BT9THgdh.js.map} +1 -1
  122. package/dist/chunks/{tiptap.styles-ChAfyVi9.js → tiptap.styles-CPRows--.js} +4 -3
  123. package/dist/chunks/tiptap.styles-CPRows--.js.map +1 -0
  124. package/dist/component-registry.d.ts.map +1 -1
  125. package/dist/components/autocomplete/index.d.ts +2 -0
  126. package/dist/components/autocomplete/index.d.ts.map +1 -0
  127. package/dist/components/autocomplete/pk-autocomplete.d.ts +150 -0
  128. package/dist/components/autocomplete/pk-autocomplete.d.ts.map +1 -0
  129. package/dist/components/autocomplete/pk-autocomplete.js +2 -0
  130. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts +7 -0
  131. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts.map +1 -0
  132. package/dist/components/autocomplete.d.ts +2 -0
  133. package/dist/components/autocomplete.js +2 -0
  134. package/dist/components/button/pk-button.d.ts +37 -1
  135. package/dist/components/button/pk-button.d.ts.map +1 -1
  136. package/dist/components/button/pk-button.js +1 -1
  137. package/dist/components/button.js +1 -1
  138. package/dist/components/calendar/pk-calendar.js +1 -1
  139. package/dist/components/calendar.js +1 -1
  140. package/dist/components/checkbox/pk-checkbox.js +1 -1
  141. package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
  142. package/dist/components/checkbox-select.js +1 -1
  143. package/dist/components/checkbox.js +1 -1
  144. package/dist/components/code-editor/pk-code-editor.js +1 -1
  145. package/dist/components/code-editor.js +1 -1
  146. package/dist/components/color-input/pk-color-input.js +1 -1
  147. package/dist/components/color-input.js +1 -1
  148. package/dist/components/combobox/pk-combobox.d.ts +8 -14
  149. package/dist/components/combobox/pk-combobox.d.ts.map +1 -1
  150. package/dist/components/combobox/pk-combobox.js +1 -1
  151. package/dist/components/combobox/pk-combobox.styles.d.ts.map +1 -1
  152. package/dist/components/combobox.js +1 -1
  153. package/dist/components/connect/pk-connect-oauth.d.ts +1 -1
  154. package/dist/components/connect/pk-connect-oauth.js +3 -3
  155. package/dist/components/connect/pk-connect-oauth.js.map +1 -1
  156. package/dist/components/connect/pk-connect.js +4 -4
  157. package/dist/components/copy-button/pk-copy-button.d.ts +3 -0
  158. package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
  159. package/dist/components/copy-button/pk-copy-button.js +1 -1
  160. package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
  161. package/dist/components/copy-button.js +1 -1
  162. package/dist/components/date-picker/pk-date-picker.js +1 -1
  163. package/dist/components/date-picker.js +1 -1
  164. package/dist/components/dialog/pk-dialog.d.ts +1 -1
  165. package/dist/components/dialog/pk-dialog.js +1 -1
  166. package/dist/components/dialog.js +1 -1
  167. package/dist/components/dropdown-menu/pk-dropdown-item.d.ts +3 -1
  168. package/dist/components/dropdown-menu/pk-dropdown-item.d.ts.map +1 -1
  169. package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
  170. package/dist/components/dropdown-menu/pk-dropdown-item.styles.d.ts.map +1 -1
  171. package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
  172. package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
  173. package/dist/components/dropdown-menu/pk-dropdown-menu.styles.d.ts.map +1 -1
  174. package/dist/components/dropdown-menu.js +3 -3
  175. package/dist/components/editable-table/editable-table-model.d.ts +4 -1
  176. package/dist/components/editable-table/editable-table-model.d.ts.map +1 -1
  177. package/dist/components/editable-table/pk-editable-table.d.ts +1 -1
  178. package/dist/components/editable-table/pk-editable-table.d.ts.map +1 -1
  179. package/dist/components/editable-table/pk-editable-table.js +1 -1
  180. package/dist/components/editable-table.js +1 -1
  181. package/dist/components/field/pk-field.js +1 -1
  182. package/dist/components/field.js +1 -1
  183. package/dist/components/icon/pk-icon.d.ts +3 -2
  184. package/dist/components/icon/pk-icon.d.ts.map +1 -1
  185. package/dist/components/icon/pk-icon.js.map +1 -1
  186. package/dist/components/image-browser/index.d.ts +2 -0
  187. package/dist/components/image-browser/index.d.ts.map +1 -0
  188. package/dist/components/image-browser/pk-image-browser.d.ts +190 -0
  189. package/dist/components/image-browser/pk-image-browser.d.ts.map +1 -0
  190. package/dist/components/image-browser/pk-image-browser.js +2 -0
  191. package/dist/components/image-browser/pk-image-browser.styles.d.ts +6 -0
  192. package/dist/components/image-browser/pk-image-browser.styles.d.ts.map +1 -0
  193. package/dist/components/image-browser.d.ts +2 -0
  194. package/dist/components/image-browser.js +2 -0
  195. package/dist/components/input/pk-input.d.ts +3 -2
  196. package/dist/components/input/pk-input.d.ts.map +1 -1
  197. package/dist/components/input/pk-input.js +1 -1
  198. package/dist/components/input/pk-input.styles.d.ts.map +1 -1
  199. package/dist/components/input-group/pk-input-group-addon.js +1 -1
  200. package/dist/components/input-group/pk-input-group-button.js +1 -1
  201. package/dist/components/input-group/pk-input-group-input.js +1 -1
  202. package/dist/components/input-group/pk-input-group-text.js +1 -1
  203. package/dist/components/input-group/pk-input-group-textarea.js +1 -1
  204. package/dist/components/input-group/pk-input-group.d.ts +2 -2
  205. package/dist/components/input-group/pk-input-group.d.ts.map +1 -1
  206. package/dist/components/input-group/pk-input-group.js +1 -1
  207. package/dist/components/input-group.js +6 -6
  208. package/dist/components/input.js +1 -1
  209. package/dist/components/lightswitch/pk-lightswitch.js +1 -1
  210. package/dist/components/lightswitch.js +1 -1
  211. package/dist/components/popover/pk-popover.d.ts +2 -2
  212. package/dist/components/popover/pk-popover.js +1 -1
  213. package/dist/components/popover.js +1 -1
  214. package/dist/components/popup/pk-popup.d.ts +4 -0
  215. package/dist/components/popup/pk-popup.d.ts.map +1 -1
  216. package/dist/components/popup/pk-popup.js +1 -1
  217. package/dist/components/popup.js +1 -1
  218. package/dist/components/radio-group/pk-radio-group.js +1 -1
  219. package/dist/components/radio-group/pk-radio.js +1 -1
  220. package/dist/components/radio-group.js +2 -2
  221. package/dist/components/scroll-area/pk-scroll-area.js +1 -1
  222. package/dist/components/scroll-area.js +1 -1
  223. package/dist/components/select/pk-option-group.d.ts +3 -1
  224. package/dist/components/select/pk-option-group.d.ts.map +1 -1
  225. package/dist/components/select/pk-option-group.js +1 -1
  226. package/dist/components/select/pk-option.d.ts +10 -1
  227. package/dist/components/select/pk-option.d.ts.map +1 -1
  228. package/dist/components/select/pk-option.js +1 -1
  229. package/dist/components/select/pk-select.d.ts +42 -3
  230. package/dist/components/select/pk-select.d.ts.map +1 -1
  231. package/dist/components/select/pk-select.js +1 -1
  232. package/dist/components/select.js +3 -3
  233. package/dist/components/separator/pk-separator.js +1 -1
  234. package/dist/components/separator.js +1 -1
  235. package/dist/components/status/pk-status.js +1 -1
  236. package/dist/components/status.js +1 -1
  237. package/dist/components/tabs/pk-tab-heading.js +1 -1
  238. package/dist/components/tabs/pk-tab-panel.js +1 -1
  239. package/dist/components/tabs/pk-tab.js +1 -1
  240. package/dist/components/tabs/pk-tabs.js +1 -1
  241. package/dist/components/tabs.js +4 -4
  242. package/dist/components/textarea/pk-textarea.js +1 -1
  243. package/dist/components/textarea.js +1 -1
  244. package/dist/components/time-picker/pk-time-picker.js +1 -1
  245. package/dist/components/time-picker.js +1 -1
  246. package/dist/components/tiptap/pk-tiptap-content.d.ts.map +1 -1
  247. package/dist/components/tiptap/pk-tiptap-content.js +1 -1
  248. package/dist/components/tiptap/pk-tiptap-editor.d.ts +11 -1
  249. package/dist/components/tiptap/pk-tiptap-editor.d.ts.map +1 -1
  250. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  251. package/dist/components/tiptap/pk-tiptap-editor.styles.d.ts.map +1 -1
  252. package/dist/components/tiptap/pk-tiptap-input.js +1 -1
  253. package/dist/components/tiptap/tiptap-toolbar.d.ts +1 -0
  254. package/dist/components/tiptap/tiptap-toolbar.d.ts.map +1 -1
  255. package/dist/components/tiptap/variable-tag-node-view.d.ts.map +1 -1
  256. package/dist/components/tiptap-content.js +1 -1
  257. package/dist/components/tiptap-editor.js +1 -1
  258. package/dist/components/tiptap-input.js +1 -1
  259. package/dist/components/toggle/pk-toggle.js +1 -1
  260. package/dist/components/toggle-group/pk-toggle-group.js +1 -1
  261. package/dist/components/toggle-group.js +1 -1
  262. package/dist/components/toggle.js +1 -1
  263. package/dist/components/tooltip/pk-tooltip.js +1 -1
  264. package/dist/components/tooltip.js +1 -1
  265. package/dist/connect/register-cp-connect.js +3 -3
  266. package/dist/index.js +50 -50
  267. package/dist/internal/sync-filtered-options.d.ts +23 -0
  268. package/dist/internal/sync-filtered-options.d.ts.map +1 -0
  269. package/dist/plugin-kit.css +2 -0
  270. package/dist/plugin-kit.js +2 -2
  271. package/dist/register-components.js +1 -1
  272. package/dist/register-pk.generated.d.ts +4 -0
  273. package/dist/register-pk.generated.d.ts.map +1 -1
  274. package/dist/register.js +48 -48
  275. package/dist/utilities/fouce.css +2 -0
  276. package/dist/utils/async-option-fetch.d.ts +38 -0
  277. package/dist/utils/async-option-fetch.d.ts.map +1 -0
  278. package/dist/utils/option-filter.d.ts +11 -0
  279. package/dist/utils/option-filter.d.ts.map +1 -0
  280. package/dist/utils/popup-content-exit.d.ts +6 -0
  281. package/dist/utils/popup-content-exit.d.ts.map +1 -0
  282. package/dist-loader/chunks/option-filter-Bc5aNNT0.js +119 -0
  283. package/dist-loader/chunks/{pk-base-B21zXxSo.js → pk-base-CyzwylQ7.js} +13 -1
  284. package/dist-loader/chunks/{pk-button-Dh4gjLHw.js → pk-button-saBDszJV.js} +10 -6
  285. package/dist-loader/chunks/{pk-calendar-n1bwSO7X.js → pk-calendar-BrF8i3dW.js} +3 -3
  286. package/dist-loader/chunks/{pk-checkbox-BrZQB816.js → pk-checkbox-B3d4nkBx.js} +1 -1
  287. package/dist-loader/chunks/{pk-color-input-sS05YOwT.js → pk-color-input-CD-r_sfG.js} +1 -1
  288. package/dist-loader/chunks/{pk-combobox-B7q6alzE.js → pk-combobox-Cpx0w1KV.js} +49 -92
  289. package/dist-loader/chunks/{pk-date-picker-Dni5ty79.js → pk-date-picker-DEoiTOxN.js} +6 -6
  290. package/dist-loader/chunks/{pk-dialog-BpPRqFMm.js → pk-dialog-C6aaPokv.js} +3 -3
  291. package/dist-loader/chunks/{pk-dropdown-item-CHkFNlA9.js → pk-dropdown-item-D8RrwjxL.js} +10 -6
  292. package/dist-loader/chunks/pk-dropdown-label-Cg32UgRe.js +51 -0
  293. package/dist-loader/chunks/{pk-dropdown-menu-BHVOMNV1.js → pk-dropdown-menu-CAHCltlX.js} +5 -3
  294. package/dist-loader/chunks/{pk-field-CJ09ll1S.js → pk-field-V7JOy26T.js} +4 -4
  295. package/dist-loader/chunks/{pk-icon-WHUu7wxk.js → pk-icon-Bph-EBqp.js} +2 -2
  296. package/dist-loader/chunks/{pk-input-CEw3AdYt.js → pk-input-BhU0PiCk.js} +74 -28
  297. package/dist-loader/chunks/{pk-lightswitch-DJEUScgo.js → pk-lightswitch-m23Cy3_D.js} +1 -1
  298. package/dist-loader/chunks/{pk-option-CunPIei0.js → pk-option-BrDMERSl.js} +5 -4
  299. package/dist-loader/chunks/{pk-popup-FDdBxb4k.js → pk-popup-CrxxR-Hb.js} +24 -2
  300. package/dist-loader/chunks/{pk-select-CbAaQ7uE.js → pk-select-Dok-JdSe.js} +8 -6
  301. package/dist-loader/chunks/{pk-spinner-CIbXjDnp.js → pk-spinner-BKU9Rf2R.js} +1 -1
  302. package/dist-loader/chunks/{pk-status-BRIVW7EH.js → pk-status-D2g_77m_.js} +1 -1
  303. package/dist-loader/chunks/{pk-textarea-C_rOUtFS.js → pk-textarea-CC7rA5A7.js} +1 -1
  304. package/dist-loader/chunks/{pk-time-picker-Dr3uvbvc.js → pk-time-picker-h5Wgd4a_.js} +5 -5
  305. package/dist-loader/chunks/{pk-tooltip-HwZ0zRd2.js → pk-tooltip-Dd_Q0Bn5.js} +2 -2
  306. package/dist-loader/chunks/{render-Niz5wYRa.js → render-Bnzcxfss.js} +1 -1
  307. package/dist-loader/chunks/{svg-_Mtb7CHx.js → svg-Bz-bXZn7.js} +12 -4
  308. package/dist-loader/chunks/{tiptap-Db7MTUH1.js → tiptap-CgXkiK8d.js} +283 -13
  309. package/dist-loader/chunks/{tiptap.styles-BIRIMP7I.js → tiptap.styles-C0E1NpSx.js} +225 -5
  310. package/dist-loader/components/autocomplete/autocomplete.js +984 -0
  311. package/dist-loader/components/button/button.js +1 -1
  312. package/dist-loader/components/button-group/button-group-separator.js +1 -1
  313. package/dist-loader/components/button-group/button-group-text.js +1 -1
  314. package/dist-loader/components/button-group/button-group.js +1 -1
  315. package/dist-loader/components/calendar/calendar.js +1 -1
  316. package/dist-loader/components/checkbox/checkbox.js +1 -1
  317. package/dist-loader/components/checkbox-select/checkbox-select.js +2 -2
  318. package/dist-loader/components/code-editor/code-editor.js +6 -6
  319. package/dist-loader/components/color-input/color-input.js +1 -1
  320. package/dist-loader/components/combobox/combobox.js +1 -1
  321. package/dist-loader/components/connect/connect-oauth.js +4 -4
  322. package/dist-loader/components/connect/connect.js +6 -6
  323. package/dist-loader/components/copy-button/copy-button.js +48 -7
  324. package/dist-loader/components/date-picker/date-picker.js +1 -1
  325. package/dist-loader/components/dialog/dialog.js +1 -1
  326. package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
  327. package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -50
  328. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  329. package/dist-loader/components/dropdown-menu/dropdown-separator.js +1 -1
  330. package/dist-loader/components/editable-table/editable-table.js +18 -20
  331. package/dist-loader/components/field/field.js +1 -1
  332. package/dist-loader/components/icon/icon.js +2 -2
  333. package/dist-loader/components/image-browser/image-browser.js +1356 -0
  334. package/dist-loader/components/input/input.js +1 -1
  335. package/dist-loader/components/input-group/input-group-addon.js +1 -1
  336. package/dist-loader/components/input-group/input-group-button.js +1 -1
  337. package/dist-loader/components/input-group/input-group-input.js +1 -1
  338. package/dist-loader/components/input-group/input-group-text.js +1 -1
  339. package/dist-loader/components/input-group/input-group-textarea.js +1 -1
  340. package/dist-loader/components/input-group/input-group.js +2 -2
  341. package/dist-loader/components/lightswitch/lightswitch.js +1 -1
  342. package/dist-loader/components/popover/popover.js +3 -3
  343. package/dist-loader/components/popup/popup.js +1 -1
  344. package/dist-loader/components/radio-group/radio-group.js +1 -1
  345. package/dist-loader/components/radio-group/radio.js +1 -1
  346. package/dist-loader/components/scroll-area/scroll-area.js +1 -1
  347. package/dist-loader/components/select/option-group.js +1 -1
  348. package/dist-loader/components/select/option.js +1 -1
  349. package/dist-loader/components/select/select.js +1 -1
  350. package/dist-loader/components/separator/separator.js +1 -1
  351. package/dist-loader/components/spinner/spinner.js +1 -1
  352. package/dist-loader/components/status/status.js +1 -1
  353. package/dist-loader/components/tabs/tab-heading.js +1 -1
  354. package/dist-loader/components/tabs/tab-panel.js +1 -1
  355. package/dist-loader/components/tabs/tab.js +1 -1
  356. package/dist-loader/components/tabs/tabs.js +1 -1
  357. package/dist-loader/components/textarea/textarea.js +1 -1
  358. package/dist-loader/components/time-picker/time-picker.js +1 -1
  359. package/dist-loader/components/tiptap/tiptap-content.js +7 -4
  360. package/dist-loader/components/tiptap/tiptap-editor.js +336 -20
  361. package/dist-loader/components/tiptap/tiptap-input.js +3 -3
  362. package/dist-loader/components/toggle/toggle.js +1 -1
  363. package/dist-loader/components/toggle-group/toggle-group.js +1 -1
  364. package/dist-loader/components/tooltip/tooltip.js +1 -1
  365. package/dist-loader/plugin-kit.css +2 -0
  366. package/dist-loader/plugin-kit.loader.js +4 -0
  367. package/dist-loader/utilities/fouce.css +2 -0
  368. package/package.json +57 -10
  369. package/dist/chunks/component-registry-CNB8PbP_.js.map +0 -1
  370. package/dist/chunks/pk-combobox-BLft8AXy.js.map +0 -1
  371. package/dist/chunks/pk-copy-button-asOLQkqk.js.map +0 -1
  372. package/dist/chunks/pk-dropdown-item-BoZTGWMU.js.map +0 -1
  373. package/dist/chunks/pk-dropdown-menu-CfZc7dIz.js.map +0 -1
  374. package/dist/chunks/pk-editable-table-Cn4WXqAo.js.map +0 -1
  375. package/dist/chunks/pk-form-associated-element-9M2NzOE2.js.map +0 -1
  376. package/dist/chunks/pk-input-DDkIXOkt.js.map +0 -1
  377. package/dist/chunks/pk-option-MGj9SKOK.js.map +0 -1
  378. package/dist/chunks/pk-popover-duyNosk2.js.map +0 -1
  379. package/dist/chunks/pk-popup-B9AgBC2V.js.map +0 -1
  380. package/dist/chunks/pk-select-C1s0OJr0.js.map +0 -1
  381. package/dist/chunks/pk-tiptap-editor-tG67Vegc.js.map +0 -1
  382. package/dist/chunks/tiptap.styles-ChAfyVi9.js.map +0 -1
  383. /package/dist-loader/chunks/{floating-ui-DU6GNott.js → floating-ui-Cj0imr6d.js} +0 -0
  384. /package/dist-loader/chunks/{pk-connect.styles-Bfgwu0VH.js → pk-connect.styles-k61snd3X.js} +0 -0
  385. /package/dist-loader/chunks/{popup-pointer-caPc8kwB.js → popup-pointer-Ck28WdVP.js} +0 -0
  386. /package/dist-loader/chunks/{sync-listbox-separators-Dk_E_IVa.js → sync-listbox-separators-Ch5krDUs.js} +0 -0
@@ -0,0 +1,1356 @@
1
+ import { d as registerDismissible, f as unregisterDismissible, n as uniqueId, s as scrollIntoView, t as LiveRegion, u as isTopDismissible } from "../../chunks/pk-a11y-CjB4-U-R.js";
2
+ import { a as o, c as r, f as A, i as e, l as n, m as i, p as b, s as e$1, u as customElement } from "../../chunks/lit-DpLik9Rf.js";
3
+ import { c as __decorate, i as PkFormAssociatedElement, s as iconStyles } from "../../chunks/pk-base-CyzwylQ7.js";
4
+ import "../../chunks/pk-spinner-BKU9Rf2R.js";
5
+ import { X as xmark, h as chevronDown } from "../../chunks/svg-Bz-bXZn7.js";
6
+ import { t as MirrorValidator } from "../../chunks/mirror-validator-C5XrXPaq.js";
7
+ import { t as RequiredValidator } from "../../chunks/required-validator-0XwZtX9k.js";
8
+ import { t as PkClearEvent } from "../../chunks/pk-clear-BMZUzwDt.js";
9
+ import { n as renderIconHtml } from "../../chunks/render-Bnzcxfss.js";
10
+ import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "../../chunks/overlay-lifecycle-C3tSQ3UR.js";
11
+ import { i as waitForPopupReposition, r as syncPopupPlacementAnimation } from "../../chunks/popup-placement-animation-WlEXnS85.js";
12
+ import { t as popupContentAnimationStyles } from "../../chunks/popup-content-animation.styles-duCg9-CH.js";
13
+ import "../../chunks/pk-popup-CrxxR-Hb.js";
14
+ import "../../chunks/pk-tooltip-Dd_Q0Bn5.js";
15
+ import { n as isPointerInsideOverlay } from "../../chunks/popup-pointer-Ck28WdVP.js";
16
+ //#region src/components/image-browser/pk-image-browser.styles.ts
17
+ /**
18
+ * Presentational static image / icon browser.
19
+ * Trigger chrome mirrors combobox popup-mode; panel grid mirrors Vizy icon picker.
20
+ */
21
+ var pkImageBrowserStyles = [popupContentAnimationStyles, i`
22
+ ${iconStyles}
23
+ @layer pk-component {
24
+ :host {
25
+ display: inline-block;
26
+ position: relative;
27
+ width: fit-content;
28
+ max-width: 100%;
29
+ vertical-align: top;
30
+ color: var(--pk-color-gray-700);
31
+ font-family: var(--pk-font-family);
32
+ font-size: var(--pk-font-size-base);
33
+ line-height: var(--pk-line-height);
34
+ --pk-image-browser-trigger-min-height: var(--pk-btn-height-default);
35
+ --pk-image-browser-padding-block: 6px;
36
+ --pk-image-browser-padding-inline: 10px;
37
+ --pk-image-browser-font-size: var(--pk-font-size-base);
38
+ --pk-image-browser-line-height: var(--pk-input-control-line-height, 1.25rem);
39
+ --pk-image-browser-glyph-size: 1rem;
40
+ --pk-image-browser-panel-width: 26.25rem;
41
+ /* Hit target larger than the glyph so the select ring has breathing room. */
42
+ --pk-image-browser-cell-min: 2.25rem;
43
+ --pk-image-browser-glyph-tile: 1.375rem;
44
+ --pk-image-browser-fill: var(--pk-color-slate-250);
45
+ --pk-image-browser-fill-hover: var(--pk-color-slate-300);
46
+ }
47
+
48
+ /* Caption under each cell — wider tracks; glyph size stays put. */
49
+ :host([label-mode='inline']) {
50
+ --pk-image-browser-cell-min: 3.75rem;
51
+ }
52
+
53
+ :host([size='xs']) {
54
+ --pk-image-browser-trigger-min-height: var(--pk-btn-height-xs);
55
+ --pk-image-browser-padding-block: 2px;
56
+ --pk-image-browser-padding-inline: 6px;
57
+ --pk-image-browser-font-size: var(--pk-font-size-xs, 0.75rem);
58
+ --pk-image-browser-glyph-size: 0.875rem;
59
+ }
60
+
61
+ :host([size='sm']) {
62
+ --pk-image-browser-trigger-min-height: var(--pk-btn-height-sm);
63
+ --pk-image-browser-padding-block: 4px;
64
+ --pk-image-browser-padding-inline: 8px;
65
+ --pk-image-browser-font-size: var(--pk-font-size-sm, 0.8125rem);
66
+ --pk-image-browser-glyph-size: 0.875rem;
67
+ }
68
+
69
+ :host([size='lg']),
70
+ :host([size='xl']) {
71
+ --pk-image-browser-trigger-min-height: var(--pk-btn-height-lg);
72
+ --pk-image-browser-padding-block: 8px;
73
+ --pk-image-browser-padding-inline: 12px;
74
+ --pk-image-browser-font-size: var(--pk-font-size-lg, 1rem);
75
+ --pk-image-browser-glyph-size: 1.125rem;
76
+ }
77
+
78
+ /* Image mode — roomier photo tiles; captions still opt-in via label-mode="inline". */
79
+ :host([mode='image']) {
80
+ --pk-image-browser-panel-width: 34rem;
81
+ --pk-image-browser-cell-min: 7.5rem;
82
+ }
83
+
84
+ :host([mode='image'][label-mode='inline']) {
85
+ /* Captions reclaim a little width; preview stays the hero. */
86
+ --pk-image-browser-cell-min: 6.5rem;
87
+ }
88
+
89
+ :host([width='full']) {
90
+ display: block;
91
+ width: 100%;
92
+ }
93
+
94
+ :host([width='full']) .control {
95
+ width: 100%;
96
+ }
97
+
98
+ .value-input {
99
+ position: absolute;
100
+ width: 1px;
101
+ height: 1px;
102
+ margin: -1px;
103
+ padding: 0;
104
+ overflow: hidden;
105
+ clip: rect(0, 0, 0, 0);
106
+ white-space: nowrap;
107
+ border: 0;
108
+ opacity: 0;
109
+ pointer-events: none;
110
+ }
111
+
112
+ /* Combobox-style chrome: label + clear + chevron share one filled control.
113
+ * 0.5rem gap keeps ellipsized filenames from kissing the clear glyph. */
114
+ .control {
115
+ display: inline-flex;
116
+ align-items: stretch;
117
+ gap: 0.5rem;
118
+ min-width: 12.5rem;
119
+ max-width: 100%;
120
+ height: var(--pk-image-browser-trigger-min-height);
121
+ min-height: var(--pk-image-browser-trigger-min-height);
122
+ margin: 0;
123
+ padding: 0 0 0 var(--pk-image-browser-padding-inline);
124
+ border: 1px solid transparent;
125
+ border-radius: var(--pk-input-border-radius, var(--pk-radius-lg));
126
+ background: var(--pk-image-browser-fill);
127
+ color: inherit;
128
+ box-sizing: border-box;
129
+ overflow: hidden;
130
+ transition: border-color 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;
131
+ }
132
+
133
+ .control:hover:not(.is-disabled) {
134
+ background: var(--pk-image-browser-fill-hover);
135
+ }
136
+
137
+ .control.is-open:not(.is-disabled) {
138
+ background: var(--pk-image-browser-fill-hover);
139
+ }
140
+
141
+ .control:focus-within:not(.is-disabled) {
142
+ border-color: var(--pk-color-sky-600);
143
+ box-shadow: var(--pk-input-focus-shadow);
144
+ background: var(--pk-color-white);
145
+ }
146
+
147
+ :host([invalid]) .control,
148
+ :host(:state(user-invalid)) .control {
149
+ border-color: var(--pk-color-rose-500, #f43f5e);
150
+ }
151
+
152
+ .control.is-disabled {
153
+ cursor: not-allowed;
154
+ opacity: 0.5;
155
+ }
156
+
157
+ .trigger {
158
+ display: inline-flex;
159
+ align-items: center;
160
+ flex: 1 1 auto;
161
+ min-width: 0;
162
+ margin: 0;
163
+ padding: var(--pk-image-browser-padding-block) 0;
164
+ border: 0;
165
+ border-radius: 0;
166
+ background: transparent;
167
+ color: inherit;
168
+ font: inherit;
169
+ font-size: var(--pk-image-browser-font-size);
170
+ font-weight: 400;
171
+ line-height: var(--pk-image-browser-line-height);
172
+ text-align: left;
173
+ white-space: nowrap;
174
+ cursor: pointer;
175
+ outline: none;
176
+ box-sizing: border-box;
177
+ }
178
+
179
+ .trigger:disabled {
180
+ cursor: not-allowed;
181
+ }
182
+
183
+ .trigger-main {
184
+ display: inline-flex;
185
+ align-items: center;
186
+ gap: 0.5rem;
187
+ flex: 1 1 auto;
188
+ min-width: 0;
189
+ overflow: hidden;
190
+ }
191
+
192
+ .trigger-preview {
193
+ display: inline-flex;
194
+ flex-shrink: 0;
195
+ align-items: center;
196
+ justify-content: center;
197
+ width: var(--pk-image-browser-glyph-size);
198
+ height: var(--pk-image-browser-glyph-size);
199
+ overflow: hidden;
200
+ }
201
+
202
+ .trigger-preview svg,
203
+ .trigger-preview img {
204
+ display: block;
205
+ width: 100%;
206
+ height: 100%;
207
+ object-fit: contain;
208
+ }
209
+
210
+ .trigger-preview svg {
211
+ fill: currentColor;
212
+ }
213
+
214
+ .trigger-label {
215
+ flex: 1 1 auto;
216
+ min-width: 0;
217
+ overflow: hidden;
218
+ text-overflow: ellipsis;
219
+ }
220
+
221
+ .trigger-label.is-placeholder {
222
+ color: var(--pk-color-gray-500);
223
+ }
224
+
225
+ .clear-button,
226
+ .expand-button {
227
+ display: inline-flex;
228
+ flex-shrink: 0;
229
+ align-items: center;
230
+ justify-content: center;
231
+ align-self: stretch;
232
+ box-sizing: border-box;
233
+ width: calc(0.75rem + 0.5rem);
234
+ margin: 0;
235
+ padding: 0;
236
+ border: 0;
237
+ border-radius: 0;
238
+ background: transparent;
239
+ color: var(--pk-color-gray-600);
240
+ cursor: pointer;
241
+ outline: none;
242
+ }
243
+
244
+ .expand-button {
245
+ width: calc(0.75rem + 0.5rem + var(--pk-image-browser-padding-inline));
246
+ padding-inline-end: var(--pk-image-browser-padding-inline);
247
+ }
248
+
249
+ .clear-button:hover:not(:disabled),
250
+ .expand-button:hover:not(:disabled) {
251
+ color: var(--pk-color-gray-800);
252
+ }
253
+
254
+ .clear-button:disabled,
255
+ .expand-button:disabled {
256
+ cursor: not-allowed;
257
+ }
258
+
259
+ .clear-button-icon,
260
+ .expand-button-icon {
261
+ display: inline-flex;
262
+ align-items: center;
263
+ justify-content: center;
264
+ line-height: 0;
265
+ pointer-events: none;
266
+ }
267
+
268
+ .clear-button-icon svg,
269
+ .expand-button-icon svg {
270
+ display: block;
271
+ width: 0.75rem;
272
+ height: 0.75rem;
273
+ }
274
+
275
+ .panel {
276
+ position: relative;
277
+ box-sizing: border-box;
278
+ display: flex;
279
+ flex-direction: column;
280
+ width: var(--pk-image-browser-panel-width);
281
+ max-width: min(100vw - 1.5rem, var(--pk-image-browser-panel-width));
282
+ max-height: min(28.75rem, 60vh);
283
+ border-radius: var(--pk-radius-lg);
284
+ background: var(--pk-color-white);
285
+ box-shadow:
286
+ 0 0 0 1px rgba(31, 41, 51, 0.1),
287
+ 0 5px 20px rgba(31, 41, 51, 0.25);
288
+ overflow: hidden;
289
+ }
290
+
291
+ .panel[hidden] {
292
+ display: none !important;
293
+ }
294
+
295
+ .panel-search {
296
+ flex: none;
297
+ /* Same inline inset as panel-body so search + grid share one vertical edge. */
298
+ padding: 0.625rem 0.625rem 0.5rem;
299
+ border-bottom: 1px solid var(--pk-color-gray-150, rgba(51, 64, 77, 0.1));
300
+ }
301
+
302
+ .panel-input {
303
+ display: block;
304
+ width: 100%;
305
+ box-sizing: border-box;
306
+ margin: 0;
307
+ padding: 0.375rem 0.625rem;
308
+ border: 1px solid var(--pk-color-gray-200, #d4dce4);
309
+ border-radius: var(--pk-input-border-radius, var(--pk-radius-md));
310
+ background: var(--pk-color-white);
311
+ color: var(--pk-color-gray-700);
312
+ font: inherit;
313
+ font-size: var(--pk-font-size-sm, 0.8125rem);
314
+ line-height: 1.25rem;
315
+ outline: none;
316
+ }
317
+
318
+ .panel-input:focus {
319
+ border-color: var(--pk-color-sky-600);
320
+ box-shadow: var(--pk-input-focus-shadow);
321
+ }
322
+
323
+ .panel-body {
324
+ flex: 1 1 auto;
325
+ min-height: 0;
326
+ overflow-y: auto;
327
+ /* Match search field inset so the grid lines up with the input. */
328
+ padding: 0.5rem 0.625rem 0.625rem;
329
+ }
330
+
331
+ :host([mode='image']) .panel-body {
332
+ padding: 0.5rem 0.625rem 0.625rem;
333
+ }
334
+
335
+ .group + .group {
336
+ margin-top: 0.875rem;
337
+ }
338
+
339
+ .group-heading {
340
+ display: flex;
341
+ justify-content: space-between;
342
+ gap: 0.5rem;
343
+ margin: 0 0 0.375rem;
344
+ color: var(--pk-color-gray-500);
345
+ font-size: 0.6875rem;
346
+ font-weight: 600;
347
+ letter-spacing: 0.04em;
348
+ line-height: 1.25;
349
+ text-transform: uppercase;
350
+ }
351
+
352
+ .group-heading-count {
353
+ font-weight: 400;
354
+ letter-spacing: 0;
355
+ text-transform: none;
356
+ }
357
+
358
+ /* Fixed column width (not 1fr) so sparse catalogs stay dense instead of stretching. */
359
+ .grid {
360
+ display: grid;
361
+ grid-template-columns: repeat(auto-fill, var(--pk-image-browser-cell-min));
362
+ gap: 0.375rem;
363
+ justify-content: start;
364
+ /* Don’t stretch short single-line cells to match taller wrapped neighbors in the row. */
365
+ align-items: start;
366
+ }
367
+
368
+ :host([mode='image']) .grid {
369
+ grid-template-columns: repeat(auto-fill, minmax(var(--pk-image-browser-cell-min), 1fr));
370
+ gap: 0.375rem;
371
+ }
372
+
373
+ .option {
374
+ box-sizing: border-box;
375
+ display: flex;
376
+ flex-direction: column;
377
+ align-items: center;
378
+ justify-content: center;
379
+ gap: 0;
380
+ width: var(--pk-image-browser-cell-min);
381
+ height: var(--pk-image-browser-cell-min);
382
+ margin: 0;
383
+ /* Square hit target; glyph is smaller so the ring doesn’t clip tips. */
384
+ padding: 0;
385
+ border: 1px solid transparent;
386
+ border-radius: var(--pk-radius-sm);
387
+ background: none;
388
+ color: inherit;
389
+ cursor: pointer;
390
+ outline: none;
391
+ overflow: hidden;
392
+ }
393
+
394
+ /* With captions, height hugs glyph + label instead of a fixed square. */
395
+ :host([label-mode='inline']) .option {
396
+ justify-content: flex-start;
397
+ gap: 0.125rem;
398
+ height: auto;
399
+ /* Keep glyph + caption inside the inset highlight ring. */
400
+ padding: 0.25rem 0.125rem 0.3125rem;
401
+ }
402
+
403
+ :host([mode='image']) .option {
404
+ position: relative;
405
+ width: auto;
406
+ height: auto;
407
+ min-height: 0;
408
+ gap: 0;
409
+ padding: 0;
410
+ overflow: hidden;
411
+ border-radius: var(--pk-radius-md);
412
+ }
413
+
414
+ :host([mode='image'][label-mode='inline']) .option {
415
+ gap: 0.375rem;
416
+ padding: 0.375rem 0.375rem 0.5rem;
417
+ overflow: visible;
418
+ }
419
+
420
+ .option:hover,
421
+ .option:focus-visible,
422
+ .option.is-highlighted {
423
+ background: var(--pk-color-gray-050, #f3f7fc);
424
+ }
425
+
426
+ /* Selected is the durable chrome; highlight/hover share the same ring for keyboard parity. */
427
+ .option.is-selected,
428
+ .option.is-highlighted,
429
+ .option:hover {
430
+ box-shadow: inset 0 0 0 2px var(--pk-color-sky-600);
431
+ }
432
+
433
+ /*
434
+ * Flush photo tiles paint over inset box-shadow (descendants sit above it).
435
+ * Overlay the same ring so tooltip/none match inline chrome.
436
+ */
437
+ :host([mode='image']) .option.is-selected,
438
+ :host([mode='image']) .option.is-highlighted,
439
+ :host([mode='image']) .option:hover {
440
+ box-shadow: none;
441
+ }
442
+
443
+ :host([mode='image']) .option.is-selected::after,
444
+ :host([mode='image']) .option.is-highlighted::after,
445
+ :host([mode='image']) .option:hover::after {
446
+ content: '';
447
+ position: absolute;
448
+ inset: 0;
449
+ z-index: 1;
450
+ border-radius: inherit;
451
+ box-shadow: inset 0 0 0 2px var(--pk-color-sky-600);
452
+ pointer-events: none;
453
+ }
454
+
455
+ .option:focus-visible {
456
+ outline: none;
457
+ }
458
+
459
+ .option-preview {
460
+ display: flex;
461
+ align-items: center;
462
+ justify-content: center;
463
+ flex: 0 0 auto;
464
+ width: var(--pk-image-browser-glyph-tile);
465
+ height: var(--pk-image-browser-glyph-tile);
466
+ margin: 0;
467
+ overflow: hidden;
468
+ }
469
+
470
+ :host([mode='image']) .option-preview {
471
+ width: 100%;
472
+ height: auto;
473
+ aspect-ratio: 4 / 3;
474
+ margin: 0;
475
+ border-radius: inherit;
476
+ }
477
+
478
+ .option-preview svg,
479
+ .option-preview img {
480
+ display: block;
481
+ width: 100%;
482
+ height: 100%;
483
+ object-fit: contain;
484
+ }
485
+
486
+ /* Photo tiles crop to fill — previews, not faithful aspect viewers. */
487
+ :host([mode='image']) .option-preview svg,
488
+ :host([mode='image']) .option-preview img {
489
+ object-fit: cover;
490
+ }
491
+
492
+ .option-preview svg {
493
+ fill: currentColor;
494
+ }
495
+
496
+ .option-label {
497
+ display: -webkit-box;
498
+ box-sizing: border-box;
499
+ width: 100%;
500
+ max-width: 100%;
501
+ padding-inline: 2px;
502
+ overflow: hidden;
503
+ color: var(--pk-color-gray-700);
504
+ font-size: 0.625rem;
505
+ line-height: 0.75rem;
506
+ text-align: center;
507
+ overflow-wrap: anywhere;
508
+ word-break: break-word;
509
+ -webkit-box-orient: vertical;
510
+ -webkit-line-clamp: 3;
511
+ line-clamp: 3;
512
+ }
513
+
514
+ :host([mode='image']) .option-label {
515
+ display: block;
516
+ color: var(--pk-color-gray-600);
517
+ font-size: 0.6875rem;
518
+ line-height: 1.2;
519
+ text-overflow: ellipsis;
520
+ white-space: nowrap;
521
+ overflow-wrap: normal;
522
+ word-break: normal;
523
+ -webkit-line-clamp: unset;
524
+ line-clamp: unset;
525
+ }
526
+
527
+ .notice {
528
+ margin: 0.375rem 0;
529
+ color: var(--pk-color-gray-500);
530
+ font-size: var(--pk-font-size-sm, 0.8125rem);
531
+ }
532
+
533
+ .notice.is-error {
534
+ color: var(--pk-color-rose-600, #e11d48);
535
+ }
536
+
537
+ /* Host-driven catalog warm — spinner only (no loading copy). */
538
+ .loading {
539
+ display: flex;
540
+ align-items: center;
541
+ justify-content: center;
542
+ box-sizing: border-box;
543
+ min-height: 6rem;
544
+ padding: 1.25rem 0.75rem;
545
+ color: var(--pk-color-gray-500);
546
+ }
547
+
548
+ .panel-input:disabled {
549
+ cursor: not-allowed;
550
+ opacity: 0.6;
551
+ }
552
+
553
+ /* Host is inert layout chrome; the floating tip lives in pk-popup. */
554
+ .option-tooltip {
555
+ position: absolute;
556
+ width: 0;
557
+ height: 0;
558
+ margin: 0;
559
+ padding: 0;
560
+ overflow: hidden;
561
+ pointer-events: none;
562
+ }
563
+ }
564
+ `];
565
+ //#endregion
566
+ //#region src/components/image-browser/pk-image-browser.ts
567
+ var CHEVRON_ICON = renderIconHtml(chevronDown);
568
+ var XMARK_ICON = renderIconHtml(xmark);
569
+ /** How many matched items per group are painted before scroll reveals more. */
570
+ var DEFAULT_PAGE_SIZE = 96;
571
+ function isInlineSvg(preview) {
572
+ return /^\s*<svg[\s>]/i.test(preview);
573
+ }
574
+ var PkImageBrowser = class PkImageBrowser extends PkFormAssociatedElement {
575
+ constructor(..._args) {
576
+ super(..._args);
577
+ this.assumeInteractionOn = ["pk-change"];
578
+ this.size = "default";
579
+ this.mode = "icon";
580
+ this.width = "auto";
581
+ this.labelMode = "tooltip";
582
+ this.invalid = false;
583
+ this.readonly = false;
584
+ this.value = "";
585
+ this.defaultValue = "";
586
+ this.placeholder = "Choose…";
587
+ this.searchPlaceholder = "Search…";
588
+ this.emptyMessage = "No items match your query.";
589
+ this.ariaLabel = null;
590
+ this.loading = false;
591
+ this.withClear = true;
592
+ this.items = [];
593
+ this.groups = [];
594
+ this.selectedLabel = "";
595
+ this.selectedPreview = "";
596
+ this.placement = "bottom-start";
597
+ this.sideOffset = 4;
598
+ this.pageSize = DEFAULT_PAGE_SIZE;
599
+ this.open = false;
600
+ this.query = "";
601
+ this.limit = DEFAULT_PAGE_SIZE;
602
+ this.closing = false;
603
+ this.panelAnimated = false;
604
+ this.highlightedIndex = -1;
605
+ this.tooltipFor = "";
606
+ this.tooltipContent = "";
607
+ this.listboxId = uniqueId("pk-image-browser-listbox");
608
+ this.searchId = uniqueId("pk-image-browser-search");
609
+ this.closeTimer = null;
610
+ this.tooltipOpenTimer = null;
611
+ this.liveRegion = null;
612
+ this.handleClear = (event) => {
613
+ event.preventDefault();
614
+ event.stopPropagation();
615
+ if (this.disabled || this.readonly || this.value === "") return;
616
+ this.emitChange("");
617
+ this.dispatchEvent(new PkClearEvent());
618
+ this.triggerElement?.focus({ preventScroll: true });
619
+ };
620
+ this.togglePanel = (event) => {
621
+ event?.preventDefault();
622
+ event?.stopPropagation();
623
+ if (this.disabled || this.readonly) return;
624
+ if (this.open || this.closing) this.closePanel("api");
625
+ else this.openPanel();
626
+ };
627
+ this.handleTriggerKeyDown = (event) => {
628
+ if (this.disabled || this.readonly) return;
629
+ if (event.key === "ArrowDown" || event.key === "ArrowUp" || event.key === "Enter" || event.key === " ") {
630
+ event.preventDefault();
631
+ if (!this.open && !this.closing) this.openPanel();
632
+ }
633
+ };
634
+ this.onDocumentPointerDown = (event) => {
635
+ if (!this.open || this.closing || !isTopDismissible(this)) return;
636
+ if (isPointerInsideOverlay(event, {
637
+ host: this,
638
+ anchor: this.controlElement ?? this.triggerElement,
639
+ panel: this.panelElement
640
+ })) return;
641
+ this.closePanel("pointer-dismiss");
642
+ };
643
+ this.onDocumentKeyDown = (event) => {
644
+ if (!this.open || this.closing || !isTopDismissible(this)) return;
645
+ if (event.key === "Escape") {
646
+ event.preventDefault();
647
+ event.stopPropagation();
648
+ this.closePanel("escape");
649
+ }
650
+ };
651
+ this.handleSearchInput = (event) => {
652
+ if (this.loading) return;
653
+ this.query = event.target.value;
654
+ this.limit = this.normalizedPageSize();
655
+ this.resetHighlightForOpenCatalog();
656
+ this.announceResults();
657
+ };
658
+ this.handleSearchKeyDown = (event) => {
659
+ if (!this.open || this.closing || this.loading) return;
660
+ switch (event.key) {
661
+ case "ArrowDown":
662
+ case "ArrowUp":
663
+ case "ArrowLeft":
664
+ case "ArrowRight":
665
+ case "Home":
666
+ case "End":
667
+ event.preventDefault();
668
+ event.stopPropagation();
669
+ this.moveHighlight(event.key);
670
+ return;
671
+ case "Enter": {
672
+ event.preventDefault();
673
+ event.stopPropagation();
674
+ const item = this.flatVisibleItems()[this.highlightedIndex];
675
+ if (item) this.selectValue(item.value);
676
+ return;
677
+ }
678
+ default: break;
679
+ }
680
+ };
681
+ this.handleResultsScroll = () => {
682
+ this.clearOptionTooltip();
683
+ const results = this.panelBody;
684
+ if (!results || !this.isTruncated()) return;
685
+ if (results.scrollTop + results.clientHeight < results.scrollHeight - 200) return;
686
+ const anchor = results.scrollTop;
687
+ this.limit += this.normalizedPageSize();
688
+ this.updateComplete.then(() => {
689
+ if (this.panelBody) this.panelBody.scrollTop = anchor;
690
+ });
691
+ };
692
+ this.handleOptionPointerLeave = (event) => {
693
+ const next = event.relatedTarget;
694
+ if (next instanceof Node && this.panelBody?.contains(next) && Boolean(next instanceof Element ? next.closest(".option") : next.parentElement?.closest(".option"))) return;
695
+ this.resetHighlightToSelected();
696
+ this.clearOptionTooltip();
697
+ };
698
+ }
699
+ static {
700
+ this.styles = pkImageBrowserStyles;
701
+ }
702
+ static get validators() {
703
+ return [
704
+ ...super.validators,
705
+ MirrorValidator(),
706
+ RequiredValidator()
707
+ ];
708
+ }
709
+ connectedCallback() {
710
+ super.connectedCallback();
711
+ this.limit = this.normalizedPageSize();
712
+ }
713
+ disconnectedCallback() {
714
+ this.teardownDismissListeners();
715
+ this.clearCloseTimer();
716
+ this.clearTooltipOpenTimer();
717
+ this.liveRegion?.destroy();
718
+ this.liveRegion = null;
719
+ super.disconnectedCallback();
720
+ }
721
+ willUpdate(changed) {
722
+ if (changed.has("pageSize") && !this.open) this.limit = this.normalizedPageSize();
723
+ super.willUpdate(changed);
724
+ }
725
+ updated(changed) {
726
+ super.updated(changed);
727
+ if (changed.has("open")) {
728
+ if (this.open) this.attachDismissListeners();
729
+ else if (!this.closing) this.teardownDismissListeners();
730
+ }
731
+ if ((changed.has("open") || changed.has("closing")) && (this.open || this.closing)) this.syncPanelPlacement();
732
+ if (this.open && (changed.has("highlightedIndex") || changed.has("query") || changed.has("limit"))) this.scrollHighlightedIntoView();
733
+ if (this.open && changed.has("loading") && !this.loading) this.resetHighlightForOpenCatalog();
734
+ }
735
+ get validationTarget() {
736
+ return this.triggerElement ?? this;
737
+ }
738
+ syncFormValue() {
739
+ this.setFormValue(this.value, this.value);
740
+ }
741
+ resetToDefaultValue() {
742
+ this.value = this.defaultValue;
743
+ }
744
+ restoreFormState(state) {
745
+ if (typeof state === "string") this.value = state;
746
+ }
747
+ async show() {
748
+ if (this.open || this.closing || this.disabled || this.readonly) return;
749
+ await this.openPanel();
750
+ }
751
+ async hide(source = "api") {
752
+ if (!this.open || this.closing) return;
753
+ await this.closePanel(source);
754
+ }
755
+ optionId(index) {
756
+ return `${this.listboxId}-opt-${index}`;
757
+ }
758
+ groupHeadingId(groupIndex) {
759
+ return `${this.listboxId}-group-${groupIndex}`;
760
+ }
761
+ normalizedPageSize() {
762
+ return this.pageSize > 0 ? this.pageSize : DEFAULT_PAGE_SIZE;
763
+ }
764
+ resolveGroups() {
765
+ if (this.groups.length > 0) return this.groups;
766
+ if (this.items.length > 0) return [{
767
+ name: "",
768
+ items: this.items
769
+ }];
770
+ return [];
771
+ }
772
+ findItem(value) {
773
+ if (value === "") return null;
774
+ for (const group of this.resolveGroups()) {
775
+ const found = group.items.find((item) => item.value === value);
776
+ if (found) return found;
777
+ }
778
+ return null;
779
+ }
780
+ selectedItem() {
781
+ return this.findItem(this.value);
782
+ }
783
+ triggerDisplay() {
784
+ const selected = this.selectedItem();
785
+ if (selected) return {
786
+ label: selected.label,
787
+ preview: selected.preview,
788
+ isPlaceholder: false
789
+ };
790
+ if (this.value !== "") return {
791
+ label: this.selectedLabel || this.value,
792
+ preview: this.selectedPreview || void 0,
793
+ isPlaceholder: false
794
+ };
795
+ return {
796
+ label: this.placeholder,
797
+ isPlaceholder: true
798
+ };
799
+ }
800
+ /** Groups matching the query, each truncated to the current render budget. */
801
+ visibleGroups() {
802
+ const query = this.query.trim().toLowerCase();
803
+ return this.resolveGroups().reduce((acc, group) => {
804
+ const matched = query === "" ? group.items : group.items.filter((item) => item.label.toLowerCase().includes(query) || item.value.toLowerCase().includes(query));
805
+ if (matched.length === 0) return acc;
806
+ acc.push({
807
+ name: group.name,
808
+ total: matched.length,
809
+ items: matched.slice(0, this.limit)
810
+ });
811
+ return acc;
812
+ }, []);
813
+ }
814
+ flatVisibleItems() {
815
+ return this.visibleGroups().flatMap((group) => group.items);
816
+ }
817
+ isTruncated() {
818
+ return this.visibleGroups().some((group) => group.items.length < group.total);
819
+ }
820
+ activeDescendantId() {
821
+ if (!this.open || this.highlightedIndex < 0) return null;
822
+ return this.optionId(this.highlightedIndex);
823
+ }
824
+ triggerAccessibleName() {
825
+ if (this.ariaLabel) {
826
+ const display = this.triggerDisplay();
827
+ if (display.isPlaceholder) return this.ariaLabel;
828
+ return `${this.ariaLabel}, ${display.label}`;
829
+ }
830
+ return this.triggerDisplay().label;
831
+ }
832
+ announceResults() {
833
+ if (this.loading) return;
834
+ const items = this.flatVisibleItems();
835
+ if (!this.query.trim()) return;
836
+ if (!this.liveRegion) this.liveRegion = new LiveRegion("polite");
837
+ this.liveRegion.announce(items.length === 0 ? this.emptyMessage : `${items.length} ${items.length === 1 ? "result" : "results"} available`);
838
+ }
839
+ resetHighlightForOpenCatalog() {
840
+ const items = this.flatVisibleItems();
841
+ if (items.length === 0) {
842
+ this.highlightedIndex = -1;
843
+ return;
844
+ }
845
+ const selectedIdx = items.findIndex((item) => item.value === this.value);
846
+ this.highlightedIndex = selectedIdx >= 0 ? selectedIdx : 0;
847
+ }
848
+ setHighlightedIndex(index) {
849
+ const items = this.flatVisibleItems();
850
+ if (items.length === 0) {
851
+ this.highlightedIndex = -1;
852
+ return;
853
+ }
854
+ const next = Math.max(0, Math.min(index, items.length - 1));
855
+ this.highlightedIndex = next;
856
+ if (next >= items.length - 4 && this.isTruncated()) this.limit += this.normalizedPageSize();
857
+ }
858
+ scrollHighlightedIntoView() {
859
+ if (this.highlightedIndex < 0 || !this.panelBody) return;
860
+ const option = this.renderRoot.querySelector(`#${CSS.escape(this.optionId(this.highlightedIndex))}`);
861
+ if (!option) return;
862
+ scrollIntoView(option, this.panelBody, "vertical", "auto");
863
+ }
864
+ /** Column count of the CSS grid that owns the highlighted option (for 2D arrows). */
865
+ columnCountNear(index) {
866
+ const grid = this.renderRoot.querySelector(`#${CSS.escape(this.optionId(index))}`)?.closest(".grid");
867
+ if (!grid) return 1;
868
+ const options = [...grid.querySelectorAll(".option")];
869
+ if (options.length === 0) return 1;
870
+ const firstTop = options[0].offsetTop;
871
+ let cols = 0;
872
+ for (const candidate of options) {
873
+ if (candidate.offsetTop !== firstTop) break;
874
+ cols += 1;
875
+ }
876
+ return Math.max(1, cols);
877
+ }
878
+ moveHighlight(key) {
879
+ const items = this.flatVisibleItems();
880
+ if (items.length === 0) {
881
+ this.highlightedIndex = -1;
882
+ return;
883
+ }
884
+ let next = this.highlightedIndex;
885
+ if (next < 0) {
886
+ next = key === "ArrowUp" || key === "ArrowLeft" || key === "End" ? items.length - 1 : 0;
887
+ this.setHighlightedIndex(next);
888
+ return;
889
+ }
890
+ const cols = this.columnCountNear(next);
891
+ switch (key) {
892
+ case "ArrowRight":
893
+ next = Math.min(next + 1, items.length - 1);
894
+ break;
895
+ case "ArrowLeft":
896
+ next = Math.max(next - 1, 0);
897
+ break;
898
+ case "ArrowDown":
899
+ next = Math.min(next + cols, items.length - 1);
900
+ break;
901
+ case "ArrowUp":
902
+ next = Math.max(next - cols, 0);
903
+ break;
904
+ case "Home":
905
+ next = 0;
906
+ break;
907
+ case "End":
908
+ next = items.length - 1;
909
+ break;
910
+ default: return;
911
+ }
912
+ this.setHighlightedIndex(next);
913
+ }
914
+ emitChange(next) {
915
+ this.value = next;
916
+ this.syncFormValue();
917
+ this.updateValidity();
918
+ this.dispatchEvent(new CustomEvent("pk-change", {
919
+ detail: { value: next },
920
+ bubbles: true,
921
+ composed: true
922
+ }));
923
+ this.dispatchEvent(new Event("input", {
924
+ bubbles: true,
925
+ composed: true
926
+ }));
927
+ this.dispatchEvent(new Event("change", {
928
+ bubbles: true,
929
+ composed: true
930
+ }));
931
+ }
932
+ selectValue(next) {
933
+ if (this.disabled || this.readonly) return;
934
+ const previous = this.value;
935
+ this.closePanel("api");
936
+ this.query = "";
937
+ this.limit = this.normalizedPageSize();
938
+ this.highlightedIndex = -1;
939
+ if (previous === next) {
940
+ if (this.withClear && previous !== "") {
941
+ this.emitChange("");
942
+ this.dispatchEvent(new PkClearEvent());
943
+ }
944
+ return;
945
+ }
946
+ this.emitChange(next);
947
+ }
948
+ async openPanel() {
949
+ if (this.open || this.closing || this.disabled || this.readonly) return;
950
+ this.dispatchEvent(new PkShowEvent());
951
+ this.closing = false;
952
+ this.panelAnimated = false;
953
+ this.query = "";
954
+ this.limit = this.normalizedPageSize();
955
+ this.open = true;
956
+ this.resetHighlightForOpenCatalog();
957
+ await this.updateComplete;
958
+ await this.syncPanelPlacement();
959
+ this.panelAnimated = true;
960
+ this.dispatchEvent(new PkAfterShowEvent());
961
+ await this.focusSearchWhenReady();
962
+ this.scrollHighlightedIntoView();
963
+ }
964
+ async closePanel(source) {
965
+ if (!this.open || this.closing) return;
966
+ const hideEvent = new PkHideEvent(source);
967
+ this.dispatchEvent(hideEvent);
968
+ if (hideEvent.defaultPrevented) return;
969
+ this.closing = true;
970
+ this.open = false;
971
+ this.highlightedIndex = -1;
972
+ this.clearOptionTooltip();
973
+ this.teardownDismissListeners();
974
+ this.triggerElement?.focus({ preventScroll: true });
975
+ this.clearCloseTimer();
976
+ this.closeTimer = window.setTimeout(() => {
977
+ this.closing = false;
978
+ this.panelAnimated = false;
979
+ this.query = "";
980
+ this.limit = this.normalizedPageSize();
981
+ this.closeTimer = null;
982
+ this.dispatchEvent(new PkAfterHideEvent());
983
+ }, 100);
984
+ }
985
+ clearCloseTimer() {
986
+ if (this.closeTimer != null) {
987
+ window.clearTimeout(this.closeTimer);
988
+ this.closeTimer = null;
989
+ }
990
+ }
991
+ async syncPanelPlacement() {
992
+ if (!this.popupElement || !this.panelElement) return;
993
+ syncPopupPlacementAnimation(this.panelElement, this.placement);
994
+ const placement = await waitForPopupReposition(this.popupElement, this.placement, 300, { requireEvent: true });
995
+ syncPopupPlacementAnimation(this.panelElement, placement);
996
+ }
997
+ attachDismissListeners() {
998
+ registerDismissible(this);
999
+ document.addEventListener("pointerdown", this.onDocumentPointerDown, true);
1000
+ document.addEventListener("keydown", this.onDocumentKeyDown, true);
1001
+ }
1002
+ teardownDismissListeners() {
1003
+ unregisterDismissible(this);
1004
+ document.removeEventListener("pointerdown", this.onDocumentPointerDown, true);
1005
+ document.removeEventListener("keydown", this.onDocumentKeyDown, true);
1006
+ }
1007
+ async focusSearchWhenReady() {
1008
+ const started = performance.now();
1009
+ while (this.open && performance.now() - started < 2e3) {
1010
+ const input = this.searchInput;
1011
+ if (input && getComputedStyle(input).visibility !== "hidden") {
1012
+ input.focus({ preventScroll: true });
1013
+ if (document.activeElement === input) return;
1014
+ }
1015
+ await new Promise((resolve) => requestAnimationFrame(() => resolve()));
1016
+ }
1017
+ }
1018
+ renderPreview(preview, className) {
1019
+ if (!preview) return A;
1020
+ if (isInlineSvg(preview)) return b`<span class=${className} aria-hidden="true">${o(preview)}</span>`;
1021
+ return b`<img class=${className} src=${preview} alt="" />`;
1022
+ }
1023
+ usesInlineLabels() {
1024
+ return this.labelMode === "inline";
1025
+ }
1026
+ usesTooltipLabels() {
1027
+ return this.labelMode === "tooltip";
1028
+ }
1029
+ /** Hover caption via one shared tooltip — avoids N×pk-tooltip in large catalogs. */
1030
+ showOptionTooltip(optionId, label) {
1031
+ if (!this.usesTooltipLabels()) return;
1032
+ const alreadyTracking = this.tooltipFor !== "";
1033
+ this.tooltipFor = optionId;
1034
+ this.tooltipContent = label;
1035
+ this.clearTooltipOpenTimer();
1036
+ const openNow = () => {
1037
+ this.tooltipOpenTimer = null;
1038
+ this.updateComplete.then(() => {
1039
+ this.optionTooltip?.show();
1040
+ });
1041
+ };
1042
+ if (alreadyTracking) {
1043
+ openNow();
1044
+ return;
1045
+ }
1046
+ this.tooltipOpenTimer = window.setTimeout(openNow, 280);
1047
+ }
1048
+ clearOptionTooltip() {
1049
+ this.clearTooltipOpenTimer();
1050
+ this.tooltipFor = "";
1051
+ this.tooltipContent = "";
1052
+ this.optionTooltip?.hide();
1053
+ }
1054
+ clearTooltipOpenTimer() {
1055
+ if (this.tooltipOpenTimer != null) {
1056
+ window.clearTimeout(this.tooltipOpenTimer);
1057
+ this.tooltipOpenTimer = null;
1058
+ }
1059
+ }
1060
+ handleOptionPointerEnter(index, label) {
1061
+ this.highlightedIndex = index;
1062
+ this.showOptionTooltip(this.optionId(index), label);
1063
+ }
1064
+ resetHighlightToSelected() {
1065
+ const items = this.flatVisibleItems();
1066
+ if (items.length === 0) {
1067
+ this.highlightedIndex = -1;
1068
+ return;
1069
+ }
1070
+ const selectedIdx = items.findIndex((item) => item.value === this.value);
1071
+ this.highlightedIndex = selectedIdx;
1072
+ }
1073
+ renderTriggerContents() {
1074
+ const display = this.triggerDisplay();
1075
+ return b`
1076
+ <span class="trigger-main">
1077
+ ${this.renderPreview(display.preview, "trigger-preview")}
1078
+ <span
1079
+ class=${e({
1080
+ "trigger-label": true,
1081
+ "is-placeholder": display.isPlaceholder
1082
+ })}
1083
+ aria-hidden="true"
1084
+ >${display.label}</span>
1085
+ </span>
1086
+ `;
1087
+ }
1088
+ renderResults() {
1089
+ if (this.loading) return b`
1090
+ <div
1091
+ id=${this.listboxId}
1092
+ role="listbox"
1093
+ aria-label=${this.ariaLabel || "Options"}
1094
+ aria-busy="true"
1095
+ >
1096
+ <div part="loading" class="loading" role="status" aria-label="Loading">
1097
+ <pk-spinner size="sm" centered></pk-spinner>
1098
+ </div>
1099
+ </div>
1100
+ `;
1101
+ const groups = this.visibleGroups();
1102
+ if (groups.length === 0) return b`
1103
+ <div
1104
+ id=${this.listboxId}
1105
+ role="listbox"
1106
+ aria-label=${this.ariaLabel || "Options"}
1107
+ >
1108
+ <p class="notice" part="empty" role="status">${this.emptyMessage}</p>
1109
+ </div>
1110
+ `;
1111
+ let flatIndex = 0;
1112
+ return b`
1113
+ <div
1114
+ id=${this.listboxId}
1115
+ role="listbox"
1116
+ aria-label=${this.ariaLabel || "Options"}
1117
+ >
1118
+ ${groups.map((group, groupIndex) => {
1119
+ const headingId = this.groupHeadingId(groupIndex);
1120
+ const groupStart = flatIndex;
1121
+ const options = group.items.map((item, itemIndex) => {
1122
+ const index = groupStart + itemIndex;
1123
+ flatIndex = index + 1;
1124
+ const selected = item.value === this.value;
1125
+ const highlighted = index === this.highlightedIndex;
1126
+ return b`
1127
+ <button
1128
+ type="button"
1129
+ part="option"
1130
+ id=${this.optionId(index)}
1131
+ class=${e({
1132
+ option: true,
1133
+ "is-highlighted": highlighted,
1134
+ "is-selected": selected
1135
+ })}
1136
+ role="option"
1137
+ tabindex="-1"
1138
+ aria-label=${item.label}
1139
+ aria-selected=${selected ? "true" : "false"}
1140
+ @click=${() => this.selectValue(item.value)}
1141
+ @mouseenter=${() => this.handleOptionPointerEnter(index, item.label)}
1142
+ @mouseleave=${this.handleOptionPointerLeave}
1143
+ >
1144
+ ${this.renderPreview(item.preview, "option-preview")}
1145
+ ${this.usesInlineLabels() ? b`<span class="option-label" aria-hidden="true">${item.label}</span>` : A}
1146
+ </button>
1147
+ `;
1148
+ });
1149
+ return b`
1150
+ <div
1151
+ class="group"
1152
+ role=${group.name ? "group" : A}
1153
+ aria-labelledby=${group.name ? headingId : A}
1154
+ >
1155
+ ${group.name ? b`
1156
+ <h6 class="group-heading" id=${headingId}>
1157
+ <span>${group.name}</span>
1158
+ ${group.items.length < group.total ? b`
1159
+ <span class="group-heading-count">
1160
+ Showing ${group.items.length} of ${group.total}
1161
+ </span>
1162
+ ` : A}
1163
+ </h6>
1164
+ ` : A}
1165
+ <div class="grid">
1166
+ ${options}
1167
+ </div>
1168
+ </div>
1169
+ `;
1170
+ })}
1171
+ </div>
1172
+ `;
1173
+ }
1174
+ render() {
1175
+ const showClear = this.withClear && this.value !== "" && !this.disabled && !this.readonly;
1176
+ const panelActive = this.open || this.closing;
1177
+ const activeDescendant = this.activeDescendantId();
1178
+ return b`
1179
+ <input
1180
+ class="value-input"
1181
+ part="value-input"
1182
+ tabindex="-1"
1183
+ aria-hidden="true"
1184
+ .value=${this.value}
1185
+ ?required=${this.required}
1186
+ @input=${() => this.updateValidity()}
1187
+ />
1188
+ <div
1189
+ part="root"
1190
+ class=${e({
1191
+ control: true,
1192
+ "is-disabled": this.disabled || this.readonly,
1193
+ "is-open": this.open
1194
+ })}
1195
+ >
1196
+ <button
1197
+ type="button"
1198
+ part="trigger"
1199
+ class="trigger"
1200
+ ?disabled=${this.disabled || this.readonly}
1201
+ aria-label=${this.triggerAccessibleName()}
1202
+ aria-haspopup="listbox"
1203
+ aria-expanded=${this.open ? "true" : "false"}
1204
+ aria-controls=${this.listboxId}
1205
+ @click=${this.togglePanel}
1206
+ @keydown=${this.handleTriggerKeyDown}
1207
+ >
1208
+ ${this.renderTriggerContents()}
1209
+ </button>
1210
+ ${showClear ? b`
1211
+ <button
1212
+ type="button"
1213
+ part="clear-button"
1214
+ class="clear-button"
1215
+ aria-label="Clear selection"
1216
+ ?disabled=${this.disabled}
1217
+ @click=${this.handleClear}
1218
+ >
1219
+ <span class="clear-button-icon" aria-hidden="true">${o(XMARK_ICON)}</span>
1220
+ </button>
1221
+ ` : A}
1222
+ <button
1223
+ type="button"
1224
+ class="expand-button"
1225
+ tabindex="-1"
1226
+ aria-hidden="true"
1227
+ ?disabled=${this.disabled || this.readonly}
1228
+ @click=${this.togglePanel}
1229
+ >
1230
+ <span class="expand-button-icon">${o(CHEVRON_ICON)}</span>
1231
+ </button>
1232
+ </div>
1233
+ <pk-popup
1234
+ .active=${panelActive}
1235
+ .anchor=${this.controlElement ?? this.triggerElement ?? ""}
1236
+ .placement=${this.placement}
1237
+ .distance=${this.sideOffset}
1238
+ flip
1239
+ shift
1240
+ >
1241
+ <div
1242
+ part="panel"
1243
+ class=${e({
1244
+ panel: true,
1245
+ "pk-popup-content": true,
1246
+ closing: this.closing
1247
+ })}
1248
+ tabindex="-1"
1249
+ ?hidden=${!panelActive}
1250
+ data-open=${this.panelAnimated && !this.closing ? "" : A}
1251
+ >
1252
+ <div part="panel-search" class="panel-search">
1253
+ <input
1254
+ part="panel-input"
1255
+ class="panel-input"
1256
+ id=${this.searchId}
1257
+ type="text"
1258
+ role="combobox"
1259
+ .value=${this.query}
1260
+ placeholder=${this.searchPlaceholder}
1261
+ aria-label=${this.searchPlaceholder}
1262
+ aria-autocomplete="list"
1263
+ aria-expanded=${this.open ? "true" : "false"}
1264
+ aria-controls=${this.listboxId}
1265
+ aria-activedescendant=${activeDescendant ?? A}
1266
+ ?disabled=${this.loading}
1267
+ @input=${this.handleSearchInput}
1268
+ @keydown=${this.handleSearchKeyDown}
1269
+ />
1270
+ </div>
1271
+ <div
1272
+ part="panel-body"
1273
+ class="panel-body"
1274
+ @scroll=${this.handleResultsScroll}
1275
+ >
1276
+ ${this.renderResults()}
1277
+ </div>
1278
+ ${this.usesTooltipLabels() && panelActive ? b`
1279
+ <pk-tooltip
1280
+ class="option-tooltip"
1281
+ for=${this.tooltipFor}
1282
+ content=${this.tooltipContent}
1283
+ placement="top"
1284
+ trigger="manual"
1285
+ ></pk-tooltip>
1286
+ ` : A}
1287
+ </div>
1288
+ </pk-popup>
1289
+ `;
1290
+ }
1291
+ };
1292
+ __decorate([n({ reflect: true })], PkImageBrowser.prototype, "size", void 0);
1293
+ __decorate([n({ reflect: true })], PkImageBrowser.prototype, "mode", void 0);
1294
+ __decorate([n({ reflect: true })], PkImageBrowser.prototype, "width", void 0);
1295
+ __decorate([n({
1296
+ reflect: true,
1297
+ attribute: "label-mode"
1298
+ })], PkImageBrowser.prototype, "labelMode", void 0);
1299
+ __decorate([n({
1300
+ type: Boolean,
1301
+ reflect: true
1302
+ })], PkImageBrowser.prototype, "invalid", void 0);
1303
+ __decorate([n({
1304
+ type: Boolean,
1305
+ reflect: true
1306
+ })], PkImageBrowser.prototype, "readonly", void 0);
1307
+ __decorate([n()], PkImageBrowser.prototype, "value", void 0);
1308
+ __decorate([n({ attribute: "default-value" })], PkImageBrowser.prototype, "defaultValue", void 0);
1309
+ __decorate([n()], PkImageBrowser.prototype, "placeholder", void 0);
1310
+ __decorate([n({ attribute: "search-placeholder" })], PkImageBrowser.prototype, "searchPlaceholder", void 0);
1311
+ __decorate([n({ attribute: "empty-message" })], PkImageBrowser.prototype, "emptyMessage", void 0);
1312
+ __decorate([n({ attribute: "aria-label" })], PkImageBrowser.prototype, "ariaLabel", void 0);
1313
+ __decorate([n({
1314
+ type: Boolean,
1315
+ reflect: true
1316
+ })], PkImageBrowser.prototype, "loading", void 0);
1317
+ __decorate([n({
1318
+ type: Boolean,
1319
+ reflect: true,
1320
+ attribute: "with-clear"
1321
+ })], PkImageBrowser.prototype, "withClear", void 0);
1322
+ __decorate([n({ attribute: false })], PkImageBrowser.prototype, "items", void 0);
1323
+ __decorate([n({ attribute: false })], PkImageBrowser.prototype, "groups", void 0);
1324
+ __decorate([n({ attribute: "selected-label" })], PkImageBrowser.prototype, "selectedLabel", void 0);
1325
+ __decorate([n({ attribute: "selected-preview" })], PkImageBrowser.prototype, "selectedPreview", void 0);
1326
+ __decorate([n({ reflect: true })], PkImageBrowser.prototype, "placement", void 0);
1327
+ __decorate([n({
1328
+ type: Number,
1329
+ attribute: "side-offset"
1330
+ })], PkImageBrowser.prototype, "sideOffset", void 0);
1331
+ __decorate([n({
1332
+ type: Number,
1333
+ attribute: "page-size"
1334
+ })], PkImageBrowser.prototype, "pageSize", void 0);
1335
+ __decorate([n({
1336
+ type: Boolean,
1337
+ reflect: true
1338
+ })], PkImageBrowser.prototype, "open", void 0);
1339
+ __decorate([r()], PkImageBrowser.prototype, "query", void 0);
1340
+ __decorate([r()], PkImageBrowser.prototype, "limit", void 0);
1341
+ __decorate([r()], PkImageBrowser.prototype, "closing", void 0);
1342
+ __decorate([r()], PkImageBrowser.prototype, "panelAnimated", void 0);
1343
+ __decorate([r()], PkImageBrowser.prototype, "highlightedIndex", void 0);
1344
+ __decorate([r()], PkImageBrowser.prototype, "tooltipFor", void 0);
1345
+ __decorate([r()], PkImageBrowser.prototype, "tooltipContent", void 0);
1346
+ __decorate([e$1(".value-input")], PkImageBrowser.prototype, "input", void 0);
1347
+ __decorate([e$1(".trigger")], PkImageBrowser.prototype, "triggerElement", void 0);
1348
+ __decorate([e$1(".control")], PkImageBrowser.prototype, "controlElement", void 0);
1349
+ __decorate([e$1("pk-popup")], PkImageBrowser.prototype, "popupElement", void 0);
1350
+ __decorate([e$1(".panel")], PkImageBrowser.prototype, "panelElement", void 0);
1351
+ __decorate([e$1(".panel-input")], PkImageBrowser.prototype, "searchInput", void 0);
1352
+ __decorate([e$1(".panel-body")], PkImageBrowser.prototype, "panelBody", void 0);
1353
+ __decorate([e$1(".option-tooltip")], PkImageBrowser.prototype, "optionTooltip", void 0);
1354
+ PkImageBrowser = __decorate([customElement("pk-image-browser")], PkImageBrowser);
1355
+ //#endregion
1356
+ export { PkImageBrowser };