@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
@@ -1 +1 @@
1
- {"version":3,"file":"pk-field-NL4KdFZC.js","names":[],"sources":["../../src/base/markdown.styles.ts","../../src/internal/field-aria.ts","../../src/utils/inline-markdown.ts","../../src/components/field/pk-field.styles.ts","../../src/components/field/pk-field.ts"],"sourcesContent":["import { css } from 'lit';\n\n/** Shared inline markdown styling for field instructions, errors, and warnings. */\nexport const inlineMarkdownStyles = css`\n @layer pk-component {\n .pk-inline-markdown a {\n color: var(--pk-color-blue-500);\n text-decoration: none;\n }\n\n .pk-inline-markdown a:hover {\n text-decoration: underline;\n }\n\n /* Craft p code — gray chip; tip/warning/error override bg/border on pk-field. */\n .pk-inline-markdown code {\n /* Craft --border-hairline ≈ gray-800 @ 10%. */\n border: 1px solid color-mix(in srgb, var(--pk-color-gray-800) 10%, transparent);\n border-radius: var(--pk-radius-sm);\n background: var(--pk-color-gray-100);\n padding-block: 0.0625em;\n padding-inline: 0.25em;\n font-family: var(--pk-font-family-mono, ui-monospace, monospace);\n /* v1 field help/errors used [&_code]:text-[0.85em] — tighter than --pk-font-size-mono (0.9em). */\n font-size: var(--pk-inline-markdown-code-font-size, 0.85em);\n line-height: var(--pk-line-height-mono, 1.5);\n /* Inherit tip/warning/error/instructions text color (Craft parity). */\n color: inherit;\n }\n }\n`;\n","export type SyncFieldAriaOptions = {\n control: HTMLElement;\n labelId: string;\n instructionsId: string;\n errorsId: string;\n warningId: string;\n tipId: string;\n controlId: string;\n hasLabel: boolean;\n hasInstructions: boolean;\n hasErrors: boolean;\n hasWarning: boolean;\n hasTip: boolean;\n hasRequired?: boolean;\n invalid?: boolean;\n};\n\n/** Wires label/instructions/errors/warning/tip ids to a slotted field control. */\nexport function syncFieldAria({\n control,\n labelId,\n instructionsId,\n errorsId,\n warningId,\n tipId,\n controlId,\n hasLabel,\n hasInstructions,\n hasErrors,\n hasWarning,\n hasTip,\n hasRequired = false,\n invalid = false,\n}: SyncFieldAriaOptions): void {\n if (!control.id) {\n control.id = controlId;\n }\n\n if (hasLabel) {\n control.setAttribute('aria-labelledby', labelId);\n } else {\n control.removeAttribute('aria-labelledby');\n }\n\n const describedBy = [\n hasInstructions ? instructionsId : '',\n hasErrors ? errorsId : '',\n hasWarning ? warningId : '',\n hasTip ? tipId : '',\n ].filter(Boolean);\n\n if (describedBy.length > 0) {\n control.setAttribute('aria-describedby', describedBy.join(' '));\n } else {\n control.removeAttribute('aria-describedby');\n }\n\n if (hasRequired) {\n control.setAttribute('aria-required', 'true');\n } else {\n control.removeAttribute('aria-required');\n }\n\n // Kit controls (pk-input, etc.) paint error chrome from reflected `invalid`.\n // v1 Input used Tailwind `aria-invalid:border-*` — aria alone is not enough now.\n const isInvalid = Boolean(invalid || hasErrors);\n\n if (isInvalid) {\n control.setAttribute('aria-invalid', 'true');\n control.setAttribute('aria-errormessage', errorsId);\n } else {\n control.removeAttribute('aria-invalid');\n control.removeAttribute('aria-errormessage');\n }\n\n syncControlInvalidState(control, isInvalid);\n}\n\n/** Prefer the Lit `invalid` property when present; otherwise toggle the attribute. */\nfunction syncControlInvalidState(control: HTMLElement, isInvalid: boolean): void {\n if ('invalid' in control) {\n (control as HTMLElement & { invalid: boolean }).invalid = isInvalid;\n return;\n }\n\n control.toggleAttribute('invalid', isInvalid);\n}\n","import { renderInlineMarkdown } from '@verbb/plugin-kit-core';\nimport { nothing } from 'lit';\nimport { unsafeHTML, type UnsafeHTMLDirective } from 'lit/directives/unsafe-html.js';\nimport type { DirectiveResult } from 'lit/directive.js';\n\n/** Renders inline markdown for Lit templates (bold, italic, links, code). */\nexport function inlineMarkdown(content: string): DirectiveResult<typeof UnsafeHTMLDirective> | typeof nothing {\n if (!content) {\n return nothing;\n }\n\n const html = renderInlineMarkdown(content);\n\n if (!html) {\n return nothing;\n }\n\n return unsafeHTML(html);\n}\n","import { css } from 'lit';\n\nexport const pkFieldStyles = css`\n @layer pk-component {\n :host {\n display: block;\n width: 100%;\n }\n\n .form-control__control {\n display: block;\n position: relative;\n width: 100%;\n }\n\n .form-control__header--with-end {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n gap: 0.75rem;\n }\n\n .form-control__header-main {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n min-width: 0;\n flex: 1 1 auto;\n }\n\n .form-control__header-end {\n flex-shrink: 0;\n }\n\n .form-control__required {\n display: inline-flex;\n align-items: center;\n color: var(--pk-color-rose-600);\n line-height: 0;\n }\n\n .form-control__required svg {\n display: block;\n width: 10px;\n height: 10px;\n }\n\n .form-control__translatable {\n display: inline-flex;\n align-items: center;\n color: var(--pk-color-gray-550);\n line-height: 0;\n }\n\n .form-control__translatable svg {\n display: block;\n width: 1rem;\n height: 1rem;\n fill: currentColor;\n }\n\n .form-control__errors {\n margin: 0;\n padding-inline-start: 20px;\n color: var(--pk-color-error);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n list-style: square;\n }\n\n .form-control__errors:empty {\n display: none;\n }\n\n .form-control__warning {\n display: flex;\n align-items: flex-start;\n gap: 0.25rem;\n min-width: 0;\n margin: 0;\n color: var(--pk-color-warning);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n }\n\n .form-control__warning:empty {\n display: none;\n }\n\n .form-control__warning-icon {\n display: inline-flex;\n flex-shrink: 0;\n margin-top: 0.3em;\n width: 0.75rem;\n height: 0.75rem;\n line-height: 0;\n }\n\n .form-control__warning-text {\n min-width: 0;\n margin: 0;\n }\n\n .form-control__warning-icon svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n /* Craft .warning code — amber chip matching warning text. */\n .form-control__warning .pk-inline-markdown code {\n background-color: var(--pk-color-amber-100);\n border-color: var(--pk-color-amber-300);\n }\n\n .form-control__tip {\n display: flex;\n align-items: flex-start;\n gap: 0.25rem;\n min-width: 0;\n margin: 0;\n color: var(--pk-color-sky-700);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n }\n\n .form-control__tip:empty {\n display: none;\n }\n\n .form-control__tip-icon {\n display: inline-flex;\n flex-shrink: 0;\n margin-top: 0.3em;\n width: 0.75rem;\n height: 0.75rem;\n line-height: 0;\n }\n\n .form-control__tip-text {\n min-width: 0;\n margin: 0;\n }\n\n .form-control__tip-icon svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .form-control__tip-text a {\n text-decoration: underline;\n }\n\n /* Craft .tip code — sky/notice chip matching tip text. */\n .form-control__tip .pk-inline-markdown code {\n background-color: var(--pk-color-sky-100);\n border-color: var(--pk-color-sky-300);\n }\n\n /* Craft --bg-error / --border-error pattern for field errors. */\n .form-control__errors.pk-inline-markdown code {\n background-color: var(--pk-color-red-100);\n border-color: var(--pk-color-red-300);\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query } from '../../decorators.js';\nimport type { PropertyValues } from 'lit';\n\nimport { uniqueId } from '../../a11y/focus.js';\nimport { formControlStyles } from '../../base/form-control.styles.js';\nimport { inlineMarkdownStyles } from '../../base/markdown.styles.js';\nimport { PkElement } from '../../base/pk-element.js';\nimport { createIconElement, createTranslationIconElement, asterisk, lightbulb, triangleExclamation } from '../../icons/index.js';\nimport { syncFieldAria } from '../../internal/field-aria.js';\nimport { HasSlotController } from '../../internal/has-slot.js';\nimport { inlineMarkdown } from '../../utils/inline-markdown.js';\nimport { pkFieldStyles } from './pk-field.styles.js';\n\n/**\n * Form field shell — label, instructions, errors, warning, and tip around a slotted control.\n *\n * Mirrors Plugin Kit React `FieldLayout`. Use for schema-driven forms; controls may\n * also expose their own `label` / `instructions` for standalone usage.\n *\n * @slot label - Field label\n * @slot instructions - Help text below the label (property values support inline Markdown)\n * @slot hint - Alias for `instructions`\n * @slot header-end - Extra header actions (React `headerEnd`)\n * @slot errors - Custom error content (property values support inline Markdown)\n * @slot warning - Warning message (property values support inline Markdown)\n * @slot tip - Informational tip below the control (property values support inline Markdown)\n * @slot - Field control (`pk-input`, `pk-select`, etc.)\n *\n * @csspart header - Field header row\n * @csspart header-end - Trailing header actions\n * @csspart form-control - Root wrapper\n * @csspart label - Label element\n * @csspart control - Control slot wrapper\n * @csspart instructions - Instructions region\n * @csspart errors - Errors list\n * @csspart warning - Warning region\n * @csspart tip - Tip region\n */\n@customElement('pk-field')\nexport class PkField extends PkElement {\n static override styles = [formControlStyles, inlineMarkdownStyles, pkFieldStyles];\n\n private readonly hasSlotController = new HasSlotController(\n this,\n 'label',\n 'instructions',\n 'hint',\n 'header-end',\n 'warning',\n 'tip',\n 'errors',\n );\n\n private readonly baseId = uniqueId('pk-field');\n\n @property()\n label = '';\n\n @property()\n instructions = '';\n\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /** Shows the translatable-field icon beside the label. */\n @property({ type: Boolean, reflect: true })\n translatable = false;\n\n @property()\n warning = '';\n\n @property()\n tip = '';\n\n @property({ attribute: false })\n errors: string[] = [];\n\n /** Associates the label with a control id in the light DOM. */\n @property({ reflect: true })\n for = '';\n\n @query('slot:not([name])')\n private controlSlot!: HTMLSlotElement;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n const legacyHint = this.getAttribute('hint');\n\n if (legacyHint && !this.instructions) {\n this.instructions = legacyHint;\n }\n }\n\n override updated(changed: PropertyValues): void {\n super.updated(changed);\n\n if (\n changed.has('label')\n || changed.has('instructions')\n || changed.has('errors')\n || changed.has('warning')\n || changed.has('tip')\n || changed.has('required')\n || changed.has('for')\n ) {\n this.syncControlAria();\n }\n }\n\n private get labelId(): string {\n return `${this.baseId}-label`;\n }\n\n private get instructionsId(): string {\n return `${this.baseId}-instructions`;\n }\n\n private get errorsId(): string {\n return `${this.baseId}-errors`;\n }\n\n private get warningId(): string {\n return `${this.baseId}-warning`;\n }\n\n private get tipId(): string {\n return `${this.baseId}-tip`;\n }\n\n private get controlId(): string {\n return this.for || `${this.baseId}-control`;\n }\n\n private hasLabel(): boolean {\n return Boolean(this.label) || this.hasSlotController.test('label');\n }\n\n private hasInstructions(): boolean {\n return Boolean(this.instructions)\n || this.hasSlotController.test('instructions')\n || this.hasSlotController.test('hint');\n }\n\n private hasHeaderEnd(): boolean {\n return this.hasSlotController.test('header-end');\n }\n\n private hasErrors(): boolean {\n return this.errors.length > 0 || this.hasSlotController.test('errors');\n }\n\n private hasWarning(): boolean {\n return Boolean(this.warning) || this.hasSlotController.test('warning');\n }\n\n private hasTip(): boolean {\n return Boolean(this.tip) || this.hasSlotController.test('tip');\n }\n\n private getControlElement(): HTMLElement | null {\n const [control] = this.controlSlot?.assignedElements({ flatten: true }) ?? [];\n\n if (control instanceof HTMLElement) {\n return control;\n }\n\n if (this.for) {\n const root = this.getRootNode() as Document | ShadowRoot;\n return root.getElementById(this.for);\n }\n\n return null;\n }\n\n private focusControl(): void {\n const control = this.getControlElement();\n\n if (!control || typeof control.focus !== 'function') {\n return;\n }\n\n control.focus();\n }\n\n private onLabelClick = (event: MouseEvent): void => {\n const target = event.target;\n\n if (!(target instanceof Element)) {\n return;\n }\n\n if (target.closest('button, a, input, select, textarea, [role=\"button\"], [role=\"link\"]')) {\n return;\n }\n\n this.focusControl();\n };\n\n private syncControlAria(): void {\n const control = this.getControlElement();\n\n if (!control) {\n return;\n }\n\n syncFieldAria({\n control,\n labelId: this.labelId,\n instructionsId: this.instructionsId,\n errorsId: this.errorsId,\n warningId: this.warningId,\n tipId: this.tipId,\n controlId: this.controlId,\n hasLabel: this.hasLabel(),\n hasInstructions: this.hasInstructions(),\n hasErrors: this.hasErrors(),\n hasWarning: this.hasWarning(),\n hasTip: this.hasTip(),\n hasRequired: this.required,\n invalid: this.hasErrors(),\n });\n }\n\n private onControlSlotChange = (): void => {\n this.syncControlAria();\n this.requestUpdate();\n };\n\n override render() {\n const hasLabel = this.hasLabel();\n const hasInstructions = this.hasInstructions();\n const hasHeaderEnd = this.hasHeaderEnd();\n const hasErrors = this.hasErrors();\n const hasWarning = this.hasWarning();\n const hasTip = this.hasTip();\n const labelFor = this.for || (hasLabel ? this.controlId : nothing);\n\n return html`\n <div part=\"form-control\" class=\"form-control\">\n ${hasLabel || hasInstructions || hasHeaderEnd\n ? html`\n <div\n part=\"header\"\n class=${classMap({\n 'form-control__header': true,\n 'form-control__header--with-end': hasHeaderEnd,\n })}\n >\n <div class=\"form-control__header-main\">\n ${hasLabel\n ? html`\n <label\n part=\"label\"\n class=\"form-control__label\"\n id=${this.labelId}\n for=${labelFor}\n data-error=${hasErrors ? 'true' : nothing}\n @click=${this.onLabelClick}\n >\n <slot name=\"label\">${this.label}</slot>\n ${this.required\n ? html`\n <span class=\"sr-only\">Required</span>\n <span class=\"form-control__required\" aria-hidden=\"true\">\n ${createIconElement(asterisk)}\n </span>\n `\n : nothing}\n ${this.translatable\n ? html`\n <span class=\"form-control__translatable\" title=\"Translatable\">\n ${createTranslationIconElement()}\n <span class=\"sr-only\">Translatable</span>\n </span>\n `\n : nothing}\n </label>\n `\n : nothing}\n\n ${hasInstructions\n ? html`\n <p\n part=\"instructions\"\n class=\"form-control__instructions pk-inline-markdown\"\n id=${this.instructionsId}\n >\n <slot name=\"instructions\">${inlineMarkdown(this.instructions)}</slot>\n <slot name=\"hint\"></slot>\n </p>\n `\n : nothing}\n </div>\n\n ${hasHeaderEnd\n ? html`\n <div part=\"header-end\" class=\"form-control__header-end\">\n <slot name=\"header-end\"></slot>\n </div>\n `\n : html`<slot name=\"header-end\" hidden></slot>`}\n </div>\n `\n : nothing}\n\n <div part=\"control\" class=\"form-control__control\">\n <slot @slotchange=${this.onControlSlotChange}></slot>\n </div>\n\n ${hasErrors\n ? html`\n <ul part=\"errors\" class=\"form-control__errors pk-inline-markdown\" id=${this.errorsId}>\n ${this.errors.map((message) => html`<li>${inlineMarkdown(message)}</li>`)}\n <slot name=\"errors\"></slot>\n </ul>\n `\n : nothing}\n\n ${hasWarning\n ? html`\n <div part=\"warning\" class=\"form-control__warning\" id=${this.warningId}>\n <span class=\"form-control__warning-icon\" aria-hidden=\"true\">\n ${createIconElement(triangleExclamation)}\n </span>\n <p class=\"form-control__warning-text pk-inline-markdown\">\n <slot name=\"warning\">${inlineMarkdown(this.warning)}</slot>\n </p>\n </div>\n `\n : nothing}\n\n ${hasTip\n ? html`\n <div part=\"tip\" class=\"form-control__tip\" id=${this.tipId}>\n <span class=\"form-control__tip-icon\" aria-hidden=\"true\">\n ${createIconElement(lightbulb)}\n </span>\n <p class=\"form-control__tip-text pk-inline-markdown\">\n <span class=\"sr-only\">Tip: </span>\n <slot name=\"tip\">${inlineMarkdown(this.tip)}</slot>\n </p>\n </div>\n `\n : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-field': PkField;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"pk-field-UAlMq6mQ.js","names":[],"sources":["../../src/base/markdown.styles.ts","../../src/internal/field-aria.ts","../../src/utils/inline-markdown.ts","../../src/components/field/pk-field.styles.ts","../../src/components/field/pk-field.ts"],"sourcesContent":["import { css } from 'lit';\n\n/** Shared inline markdown styling for field instructions, errors, and warnings. */\nexport const inlineMarkdownStyles = css`\n @layer pk-component {\n .pk-inline-markdown a {\n color: var(--pk-color-blue-500);\n text-decoration: none;\n }\n\n .pk-inline-markdown a:hover {\n text-decoration: underline;\n }\n\n /* Craft p code — gray chip; tip/warning/error override bg/border on pk-field. */\n .pk-inline-markdown code {\n /* Craft --border-hairline ≈ gray-800 @ 10%. */\n border: 1px solid color-mix(in srgb, var(--pk-color-gray-800) 10%, transparent);\n border-radius: var(--pk-radius-sm);\n background: var(--pk-color-gray-100);\n padding-block: 0.0625em;\n padding-inline: 0.25em;\n font-family: var(--pk-font-family-mono, ui-monospace, monospace);\n /* v1 field help/errors used [&_code]:text-[0.85em] — tighter than --pk-font-size-mono (0.9em). */\n font-size: var(--pk-inline-markdown-code-font-size, 0.85em);\n line-height: var(--pk-line-height-mono, 1.5);\n /* Inherit tip/warning/error/instructions text color (Craft parity). */\n color: inherit;\n }\n }\n`;\n","export type SyncFieldAriaOptions = {\n control: HTMLElement;\n labelId: string;\n instructionsId: string;\n errorsId: string;\n warningId: string;\n tipId: string;\n controlId: string;\n hasLabel: boolean;\n hasInstructions: boolean;\n hasErrors: boolean;\n hasWarning: boolean;\n hasTip: boolean;\n hasRequired?: boolean;\n invalid?: boolean;\n};\n\n/** Wires label/instructions/errors/warning/tip ids to a slotted field control. */\nexport function syncFieldAria({\n control,\n labelId,\n instructionsId,\n errorsId,\n warningId,\n tipId,\n controlId,\n hasLabel,\n hasInstructions,\n hasErrors,\n hasWarning,\n hasTip,\n hasRequired = false,\n invalid = false,\n}: SyncFieldAriaOptions): void {\n if (!control.id) {\n control.id = controlId;\n }\n\n if (hasLabel) {\n control.setAttribute('aria-labelledby', labelId);\n } else {\n control.removeAttribute('aria-labelledby');\n }\n\n const describedBy = [\n hasInstructions ? instructionsId : '',\n hasErrors ? errorsId : '',\n hasWarning ? warningId : '',\n hasTip ? tipId : '',\n ].filter(Boolean);\n\n if (describedBy.length > 0) {\n control.setAttribute('aria-describedby', describedBy.join(' '));\n } else {\n control.removeAttribute('aria-describedby');\n }\n\n if (hasRequired) {\n control.setAttribute('aria-required', 'true');\n } else {\n control.removeAttribute('aria-required');\n }\n\n // Kit controls (pk-input, etc.) paint error chrome from reflected `invalid`.\n // v1 Input used Tailwind `aria-invalid:border-*` — aria alone is not enough now.\n const isInvalid = Boolean(invalid || hasErrors);\n\n if (isInvalid) {\n control.setAttribute('aria-invalid', 'true');\n control.setAttribute('aria-errormessage', errorsId);\n } else {\n control.removeAttribute('aria-invalid');\n control.removeAttribute('aria-errormessage');\n }\n\n syncControlInvalidState(control, isInvalid);\n}\n\n/** Prefer the Lit `invalid` property when present; otherwise toggle the attribute. */\nfunction syncControlInvalidState(control: HTMLElement, isInvalid: boolean): void {\n if ('invalid' in control) {\n (control as HTMLElement & { invalid: boolean }).invalid = isInvalid;\n return;\n }\n\n control.toggleAttribute('invalid', isInvalid);\n}\n","import { renderInlineMarkdown } from '@verbb/plugin-kit-core';\nimport { nothing } from 'lit';\nimport { unsafeHTML, type UnsafeHTMLDirective } from 'lit/directives/unsafe-html.js';\nimport type { DirectiveResult } from 'lit/directive.js';\n\n/** Renders inline markdown for Lit templates (bold, italic, links, code). */\nexport function inlineMarkdown(content: string): DirectiveResult<typeof UnsafeHTMLDirective> | typeof nothing {\n if (!content) {\n return nothing;\n }\n\n const html = renderInlineMarkdown(content);\n\n if (!html) {\n return nothing;\n }\n\n return unsafeHTML(html);\n}\n","import { css } from 'lit';\n\nexport const pkFieldStyles = css`\n @layer pk-component {\n :host {\n display: block;\n width: 100%;\n }\n\n .form-control__control {\n display: block;\n position: relative;\n width: 100%;\n }\n\n .form-control__header--with-end {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n gap: 0.75rem;\n }\n\n .form-control__header-main {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n min-width: 0;\n flex: 1 1 auto;\n }\n\n .form-control__header-end {\n flex-shrink: 0;\n }\n\n .form-control__required {\n display: inline-flex;\n align-items: center;\n color: var(--pk-color-rose-600);\n line-height: 0;\n }\n\n .form-control__required svg {\n display: block;\n width: 10px;\n height: 10px;\n }\n\n .form-control__translatable {\n display: inline-flex;\n align-items: center;\n color: var(--pk-color-gray-550);\n line-height: 0;\n }\n\n .form-control__translatable svg {\n display: block;\n width: 1rem;\n height: 1rem;\n fill: currentColor;\n }\n\n .form-control__errors {\n margin: 0;\n padding-inline-start: 20px;\n color: var(--pk-color-error);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n list-style: square;\n }\n\n .form-control__errors:empty {\n display: none;\n }\n\n .form-control__warning {\n display: flex;\n align-items: flex-start;\n gap: 0.25rem;\n min-width: 0;\n margin: 0;\n color: var(--pk-color-warning);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n }\n\n .form-control__warning:empty {\n display: none;\n }\n\n .form-control__warning-icon {\n display: inline-flex;\n flex-shrink: 0;\n margin-top: 0.3em;\n width: 0.75rem;\n height: 0.75rem;\n line-height: 0;\n }\n\n .form-control__warning-text {\n min-width: 0;\n margin: 0;\n }\n\n .form-control__warning-icon svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n /* Craft .warning code — amber chip matching warning text. */\n .form-control__warning .pk-inline-markdown code {\n background-color: var(--pk-color-amber-100);\n border-color: var(--pk-color-amber-300);\n }\n\n .form-control__tip {\n display: flex;\n align-items: flex-start;\n gap: 0.25rem;\n min-width: 0;\n margin: 0;\n color: var(--pk-color-sky-700);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n }\n\n .form-control__tip:empty {\n display: none;\n }\n\n .form-control__tip-icon {\n display: inline-flex;\n flex-shrink: 0;\n margin-top: 0.3em;\n width: 0.75rem;\n height: 0.75rem;\n line-height: 0;\n }\n\n .form-control__tip-text {\n min-width: 0;\n margin: 0;\n }\n\n .form-control__tip-icon svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .form-control__tip-text a {\n text-decoration: underline;\n }\n\n /* Craft .tip code — sky/notice chip matching tip text. */\n .form-control__tip .pk-inline-markdown code {\n background-color: var(--pk-color-sky-100);\n border-color: var(--pk-color-sky-300);\n }\n\n /* Craft --bg-error / --border-error pattern for field errors. */\n .form-control__errors.pk-inline-markdown code {\n background-color: var(--pk-color-red-100);\n border-color: var(--pk-color-red-300);\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query } from '../../decorators.js';\nimport type { PropertyValues } from 'lit';\n\nimport { uniqueId } from '../../a11y/focus.js';\nimport { formControlStyles } from '../../base/form-control.styles.js';\nimport { inlineMarkdownStyles } from '../../base/markdown.styles.js';\nimport { PkElement } from '../../base/pk-element.js';\nimport { createIconElement, createTranslationIconElement, asterisk, lightbulb, triangleExclamation } from '../../icons/index.js';\nimport { syncFieldAria } from '../../internal/field-aria.js';\nimport { HasSlotController } from '../../internal/has-slot.js';\nimport { inlineMarkdown } from '../../utils/inline-markdown.js';\nimport { pkFieldStyles } from './pk-field.styles.js';\n\n/**\n * Form field shell — label, instructions, errors, warning, and tip around a slotted control.\n *\n * Mirrors Plugin Kit React `FieldLayout`. Use for schema-driven forms; controls may\n * also expose their own `label` / `instructions` for standalone usage.\n *\n * @slot label - Field label\n * @slot instructions - Help text below the label (property values support inline Markdown)\n * @slot hint - Alias for `instructions`\n * @slot header-end - Extra header actions (React `headerEnd`)\n * @slot errors - Custom error content (property values support inline Markdown)\n * @slot warning - Warning message (property values support inline Markdown)\n * @slot tip - Informational tip below the control (property values support inline Markdown)\n * @slot - Field control (`pk-input`, `pk-select`, etc.)\n *\n * @csspart header - Field header row\n * @csspart header-end - Trailing header actions\n * @csspart form-control - Root wrapper\n * @csspart label - Label element\n * @csspart control - Control slot wrapper\n * @csspart instructions - Instructions region\n * @csspart errors - Errors list\n * @csspart warning - Warning region\n * @csspart tip - Tip region\n */\n@customElement('pk-field')\nexport class PkField extends PkElement {\n static override styles = [formControlStyles, inlineMarkdownStyles, pkFieldStyles];\n\n private readonly hasSlotController = new HasSlotController(\n this,\n 'label',\n 'instructions',\n 'hint',\n 'header-end',\n 'warning',\n 'tip',\n 'errors',\n );\n\n private readonly baseId = uniqueId('pk-field');\n\n @property()\n label = '';\n\n @property()\n instructions = '';\n\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /** Shows the translatable-field icon beside the label. */\n @property({ type: Boolean, reflect: true })\n translatable = false;\n\n @property()\n warning = '';\n\n @property()\n tip = '';\n\n @property({ attribute: false })\n errors: string[] = [];\n\n /** Associates the label with a control id in the light DOM. */\n @property({ reflect: true })\n for = '';\n\n @query('slot:not([name])')\n private controlSlot!: HTMLSlotElement;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n const legacyHint = this.getAttribute('hint');\n\n if (legacyHint && !this.instructions) {\n this.instructions = legacyHint;\n }\n }\n\n override updated(changed: PropertyValues): void {\n super.updated(changed);\n\n if (\n changed.has('label')\n || changed.has('instructions')\n || changed.has('errors')\n || changed.has('warning')\n || changed.has('tip')\n || changed.has('required')\n || changed.has('for')\n ) {\n this.syncControlAria();\n }\n }\n\n private get labelId(): string {\n return `${this.baseId}-label`;\n }\n\n private get instructionsId(): string {\n return `${this.baseId}-instructions`;\n }\n\n private get errorsId(): string {\n return `${this.baseId}-errors`;\n }\n\n private get warningId(): string {\n return `${this.baseId}-warning`;\n }\n\n private get tipId(): string {\n return `${this.baseId}-tip`;\n }\n\n private get controlId(): string {\n return this.for || `${this.baseId}-control`;\n }\n\n private hasLabel(): boolean {\n return Boolean(this.label) || this.hasSlotController.test('label');\n }\n\n private hasInstructions(): boolean {\n return Boolean(this.instructions)\n || this.hasSlotController.test('instructions')\n || this.hasSlotController.test('hint');\n }\n\n private hasHeaderEnd(): boolean {\n return this.hasSlotController.test('header-end');\n }\n\n private hasErrors(): boolean {\n return this.errors.length > 0 || this.hasSlotController.test('errors');\n }\n\n private hasWarning(): boolean {\n return Boolean(this.warning) || this.hasSlotController.test('warning');\n }\n\n private hasTip(): boolean {\n return Boolean(this.tip) || this.hasSlotController.test('tip');\n }\n\n private getControlElement(): HTMLElement | null {\n const [control] = this.controlSlot?.assignedElements({ flatten: true }) ?? [];\n\n if (control instanceof HTMLElement) {\n return control;\n }\n\n if (this.for) {\n const root = this.getRootNode() as Document | ShadowRoot;\n return root.getElementById(this.for);\n }\n\n return null;\n }\n\n private focusControl(): void {\n const control = this.getControlElement();\n\n if (!control || typeof control.focus !== 'function') {\n return;\n }\n\n control.focus();\n }\n\n private onLabelClick = (event: MouseEvent): void => {\n const target = event.target;\n\n if (!(target instanceof Element)) {\n return;\n }\n\n if (target.closest('button, a, input, select, textarea, [role=\"button\"], [role=\"link\"]')) {\n return;\n }\n\n this.focusControl();\n };\n\n private syncControlAria(): void {\n const control = this.getControlElement();\n\n if (!control) {\n return;\n }\n\n syncFieldAria({\n control,\n labelId: this.labelId,\n instructionsId: this.instructionsId,\n errorsId: this.errorsId,\n warningId: this.warningId,\n tipId: this.tipId,\n controlId: this.controlId,\n hasLabel: this.hasLabel(),\n hasInstructions: this.hasInstructions(),\n hasErrors: this.hasErrors(),\n hasWarning: this.hasWarning(),\n hasTip: this.hasTip(),\n hasRequired: this.required,\n invalid: this.hasErrors(),\n });\n }\n\n private onControlSlotChange = (): void => {\n this.syncControlAria();\n this.requestUpdate();\n };\n\n override render() {\n const hasLabel = this.hasLabel();\n const hasInstructions = this.hasInstructions();\n const hasHeaderEnd = this.hasHeaderEnd();\n const hasErrors = this.hasErrors();\n const hasWarning = this.hasWarning();\n const hasTip = this.hasTip();\n const labelFor = this.for || (hasLabel ? this.controlId : nothing);\n\n return html`\n <div part=\"form-control\" class=\"form-control\">\n ${hasLabel || hasInstructions || hasHeaderEnd\n ? html`\n <div\n part=\"header\"\n class=${classMap({\n 'form-control__header': true,\n 'form-control__header--with-end': hasHeaderEnd,\n })}\n >\n <div class=\"form-control__header-main\">\n ${hasLabel\n ? html`\n <label\n part=\"label\"\n class=\"form-control__label\"\n id=${this.labelId}\n for=${labelFor}\n data-error=${hasErrors ? 'true' : nothing}\n @click=${this.onLabelClick}\n >\n <slot name=\"label\">${this.label}</slot>\n ${this.required\n ? html`\n <span class=\"sr-only\">Required</span>\n <span class=\"form-control__required\" aria-hidden=\"true\">\n ${createIconElement(asterisk)}\n </span>\n `\n : nothing}\n ${this.translatable\n ? html`\n <span class=\"form-control__translatable\">\n ${createTranslationIconElement()}\n <span class=\"sr-only\">Translatable</span>\n </span>\n `\n : nothing}\n </label>\n `\n : nothing}\n\n ${hasInstructions\n ? html`\n <p\n part=\"instructions\"\n class=\"form-control__instructions pk-inline-markdown\"\n id=${this.instructionsId}\n >\n <slot name=\"instructions\">${inlineMarkdown(this.instructions)}</slot>\n <slot name=\"hint\"></slot>\n </p>\n `\n : nothing}\n </div>\n\n ${hasHeaderEnd\n ? html`\n <div part=\"header-end\" class=\"form-control__header-end\">\n <slot name=\"header-end\"></slot>\n </div>\n `\n : html`<slot name=\"header-end\" hidden></slot>`}\n </div>\n `\n : nothing}\n\n <div part=\"control\" class=\"form-control__control\">\n <slot @slotchange=${this.onControlSlotChange}></slot>\n </div>\n\n ${hasErrors\n ? html`\n <ul part=\"errors\" class=\"form-control__errors pk-inline-markdown\" id=${this.errorsId}>\n ${this.errors.map((message) => html`<li>${inlineMarkdown(message)}</li>`)}\n <slot name=\"errors\"></slot>\n </ul>\n `\n : nothing}\n\n ${hasWarning\n ? html`\n <div part=\"warning\" class=\"form-control__warning\" id=${this.warningId}>\n <span class=\"form-control__warning-icon\" aria-hidden=\"true\">\n ${createIconElement(triangleExclamation)}\n </span>\n <p class=\"form-control__warning-text pk-inline-markdown\">\n <slot name=\"warning\">${inlineMarkdown(this.warning)}</slot>\n </p>\n </div>\n `\n : nothing}\n\n ${hasTip\n ? html`\n <div part=\"tip\" class=\"form-control__tip\" id=${this.tipId}>\n <span class=\"form-control__tip-icon\" aria-hidden=\"true\">\n ${createIconElement(lightbulb)}\n </span>\n <p class=\"form-control__tip-text pk-inline-markdown\">\n <span class=\"sr-only\">Tip: </span>\n <slot name=\"tip\">${inlineMarkdown(this.tip)}</slot>\n </p>\n </div>\n `\n : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-field': PkField;\n }\n}\n"],"mappings":"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"}
@@ -35,7 +35,15 @@ function CustomErrorValidator() {
35
35
  //#endregion
36
36
  //#region src/base/pk-form-associated-element.ts
37
37
  /**
38
- * Form-associated custom element base — `FormAssociatedElement` pattern.
38
+ * Form-associated custom element base — ElementInternals + shared validity helpers.
39
+ *
40
+ * @cssstate disabled - The control is disabled.
41
+ * @cssstate required - The control is required.
42
+ * @cssstate optional - The control is not required.
43
+ * @cssstate invalid - The control currently fails constraint validation.
44
+ * @cssstate valid - The control currently passes constraint validation.
45
+ * @cssstate user-invalid - Invalid after the user has interacted with the control.
46
+ * @cssstate user-valid - Valid after the user has interacted with the control.
39
47
  */
40
48
  var PkFormAssociatedElement = class extends PkElement {
41
49
  static {
@@ -153,20 +161,24 @@ var PkFormAssociatedElement = class extends PkElement {
153
161
  getForm() {
154
162
  return this.internals.form;
155
163
  }
164
+ /** Runs constraint validation without showing the browser UI. */
156
165
  checkValidity() {
157
166
  this.updateValidity();
158
167
  return this.internals.checkValidity();
159
168
  }
169
+ /** Runs constraint validation and shows the browser UI when invalid. */
160
170
  reportValidity() {
161
171
  this.updateValidity();
162
172
  this.hasInteracted = true;
163
173
  return this.internals.reportValidity();
164
174
  }
175
+ /** Clears custom errors and re-syncs validity state. */
165
176
  resetValidity() {
166
177
  this.setCustomValidity("");
167
178
  this.internals.setValidity({});
168
179
  this.syncCustomStates();
169
180
  }
181
+ /** Sets or clears a custom validation message. */
170
182
  setCustomValidity(message) {
171
183
  if (!message) {
172
184
  this.customError = null;
@@ -257,4 +269,4 @@ __decorate([property({
257
269
  //#endregion
258
270
  export { CustomErrorValidator as n, PkInvalidEvent as r, PkFormAssociatedElement as t };
259
271
 
260
- //# sourceMappingURL=pk-form-associated-element-9M2NzOE2.js.map
272
+ //# sourceMappingURL=pk-form-associated-element-CCQALRGB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pk-form-associated-element-CCQALRGB.js","names":[],"sources":["../../src/events/pk-invalid.ts","../../src/validators/custom-error-validator.ts","../../src/base/pk-form-associated-element.ts"],"sourcesContent":["/** Fired when a form control fails constraint validation — mirrors `pk-invalid`. */\nexport class PkInvalidEvent extends Event {\n constructor() {\n super('pk-invalid', { bubbles: true, cancelable: false, composed: true });\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-invalid': PkInvalidEvent;\n }\n}\n","import type { PkValidator } from './types.js';\n\nexport function CustomErrorValidator(): PkValidator {\n return {\n observedAttributes: ['custom-error'],\n checkValidity(element) {\n const result = {\n message: '',\n isValid: true,\n invalidKeys: [] as ReturnType<PkValidator['checkValidity']>['invalidKeys'],\n };\n\n if (element.customError) {\n result.message = element.customError;\n result.isValid = false;\n result.invalidKeys.push('customError');\n }\n\n return result;\n },\n };\n}\n","import type { PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport { HostAriaMirror } from '../internal/control-aria.js';\nimport { PkInvalidEvent } from '../events/pk-invalid.js';\nimport { CustomErrorValidator, type PkValidator } from '../validators/index.js';\nimport { PkElement } from './pk-element.js';\n\n/**\n * Form-associated custom element base — ElementInternals + shared validity helpers.\n *\n * @cssstate disabled - The control is disabled.\n * @cssstate required - The control is required.\n * @cssstate optional - The control is not required.\n * @cssstate invalid - The control currently fails constraint validation.\n * @cssstate valid - The control currently passes constraint validation.\n * @cssstate user-invalid - Invalid after the user has interacted with the control.\n * @cssstate user-valid - Valid after the user has interacted with the control.\n */\nexport abstract class PkFormAssociatedElement extends PkElement {\n static formAssociated = true;\n\n static get validators(): PkValidator[] {\n return [CustomErrorValidator()];\n }\n\n static get observedAttributes(): string[] {\n const attrs = new Set(super.observedAttributes ?? []);\n\n for (const validator of this.validators) {\n for (const attr of validator.observedAttributes ?? []) {\n attrs.add(attr);\n }\n }\n\n return [...attrs];\n }\n\n protected readonly internals = this.attachInternals();\n\n /** Shadow native control for `MirrorValidator`. */\n input?: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\n /** Events that must all fire before `:user-invalid` applies — override per component. */\n assumeInteractionOn: string[] = ['input'];\n\n validators: PkValidator[] = [];\n\n /** Name submitted with form data. */\n @property({ reflect: true })\n name: string | null = null;\n\n /** Disables the control and excludes it from constraint validation. */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Marks the control as required for form submission. */\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /** Custom validation message; also settable via `setCustomValidity()`. */\n @property({ attribute: 'custom-error', reflect: true })\n customError: string | null = null;\n\n @property({ attribute: false, state: true })\n valueHasChanged = false;\n\n @property({ attribute: false, state: true })\n hasInteracted = false;\n\n private emittedEvents: string[] = [];\n\n private hostAriaMirror?: HostAriaMirror;\n\n constructor() {\n super();\n this.addEventListener('invalid', this.emitInvalid as EventListener);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n for (const eventName of this.assumeInteractionOn) {\n this.addEventListener(eventName, this.handleInteraction);\n }\n\n this.updateValidity();\n }\n\n override disconnectedCallback(): void {\n this.hostAriaMirror?.disconnect();\n this.hostAriaMirror = undefined;\n\n for (const eventName of this.assumeInteractionOn) {\n this.removeEventListener(eventName, this.handleInteraction);\n }\n\n this.removeEventListener('invalid', this.emitInvalid as EventListener);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('customError')) {\n this.setCustomValidity(this.customError ?? '');\n }\n\n if (changed.has('disabled')) {\n // Do not toggleAttribute(`disabled`, this.disabled): when React/@lit/react\n // assigns `disabled = undefined`, force is undefined and toggleAttribute\n // *adds* the attribute (boolean presence → disabled=true → FACE\n // formDisabledCallback). Reflection on this Boolean property already syncs\n // the attribute; only Custom State API needs an explicit update here.\n this.setState('disabled', Boolean(this.disabled));\n }\n\n if (changed.has('value') || changed.has('disabled') || changed.has('required') || changed.has('name')) {\n this.syncFormValue();\n }\n\n this.updateValidity();\n super.updated(changed);\n this.syncHostAriaMirror();\n }\n\n override firstUpdated(_changed: PropertyValues): void {\n super.firstUpdated(_changed);\n this.connectHostAriaMirror();\n }\n\n /** Focusable native control that receives mirrored field-shell ARIA. */\n protected getAriaMirrorTarget(): HTMLElement | null {\n return this.input ?? null;\n }\n\n /** Standalone label/instructions wiring when no external field shell is present. */\n protected syncStandaloneAria(): void {}\n\n protected connectHostAriaMirror(): void {\n this.hostAriaMirror?.disconnect();\n this.hostAriaMirror = new HostAriaMirror(\n this,\n () => this.getAriaMirrorTarget(),\n () => this.syncStandaloneAria(),\n );\n this.hostAriaMirror.connect();\n }\n\n protected syncHostAriaMirror(): void {\n this.hostAriaMirror?.sync();\n }\n\n formResetCallback(): void {\n this.resetValidity();\n this.hasInteracted = false;\n this.valueHasChanged = false;\n this.emittedEvents = [];\n this.resetToDefaultValue();\n this.syncFormValue();\n this.updateValidity();\n }\n\n formDisabledCallback(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.updateValidity();\n }\n\n formStateRestoreCallback(state: string | File | FormData | null, _reason?: 'restore' | 'autocomplete'): void {\n this.restoreFormState(state);\n this.syncFormValue();\n this.updateValidity();\n }\n\n set form(value: string) {\n if (value) {\n this.setAttribute('form', value);\n } else {\n this.removeAttribute('form');\n }\n }\n\n get form(): HTMLFormElement | null {\n return this.internals.form;\n }\n\n get labels(): NodeList {\n return this.internals.labels;\n }\n\n get validity(): ValidityState {\n return this.internals.validity;\n }\n\n get willValidate(): boolean {\n return this.internals.willValidate;\n }\n\n get validationMessage(): string {\n return this.internals.validationMessage;\n }\n\n getForm(): HTMLFormElement | null {\n return this.internals.form;\n }\n\n /** Runs constraint validation without showing the browser UI. */\n checkValidity(): boolean {\n this.updateValidity();\n return this.internals.checkValidity();\n }\n\n /** Runs constraint validation and shows the browser UI when invalid. */\n reportValidity(): boolean {\n this.updateValidity();\n this.hasInteracted = true;\n return this.internals.reportValidity();\n }\n\n /** Clears custom errors and re-syncs validity state. */\n resetValidity(): void {\n this.setCustomValidity('');\n this.internals.setValidity({});\n this.syncCustomStates();\n }\n\n /** Sets or clears a custom validation message. */\n setCustomValidity(message: string): void {\n if (!message) {\n this.customError = null;\n this.internals.setValidity({});\n this.syncCustomStates();\n return;\n }\n\n this.customError = message;\n const anchor = this.validationTarget;\n\n if (anchor instanceof HTMLElement) {\n this.internals.setValidity({ customError: true }, message, anchor);\n } else {\n this.internals.setValidity({ customError: true }, message);\n }\n\n this.syncCustomStates();\n }\n\n protected get validationTarget(): HTMLElement | undefined {\n return this.input;\n }\n\n protected get allValidators(): PkValidator[] {\n const ctor = this.constructor as typeof PkFormAssociatedElement;\n return [...(ctor.validators ?? []), ...(this.validators ?? [])];\n }\n\n protected setFormValue(\n value: string | File | FormData | null,\n state?: string | File | FormData | null,\n ): void {\n this.internals.setFormValue(value, state ?? value);\n }\n\n protected setValue(\n value: string | File | FormData | null,\n state?: string | File | FormData | null,\n ): void {\n this.setFormValue(value, state ?? value);\n }\n\n protected updateValidity(): void {\n if (this.disabled || this.hasAttribute('disabled') || !this.willValidate) {\n this.internals.setValidity({});\n this.syncCustomStates();\n return;\n }\n\n const validators = this.allValidators;\n\n if (!validators.length) {\n return;\n }\n\n const flags: Partial<Record<keyof ValidityState, boolean>> = {\n customError: Boolean(this.customError),\n };\n\n let finalMessage = '';\n const anchor = this.validationTarget;\n\n for (const validator of validators) {\n const { isValid, message, invalidKeys } = validator.checkValidity(this);\n\n if (isValid) {\n continue;\n }\n\n if (!finalMessage) {\n finalMessage = message;\n }\n\n for (const key of invalidKeys) {\n flags[key] = true;\n }\n }\n\n if (!finalMessage) {\n finalMessage = this.validationMessage;\n }\n\n if (anchor instanceof HTMLElement) {\n this.internals.setValidity(flags, finalMessage, anchor);\n } else {\n this.internals.setValidity(flags, finalMessage);\n }\n\n this.syncCustomStates();\n }\n\n protected syncCustomStates(): void {\n const isValid = this.internals.validity.valid;\n\n this.setState('required', this.required);\n this.setState('optional', !this.required);\n this.setState('invalid', !isValid);\n this.setState('valid', isValid);\n this.setState('user-invalid', !isValid && this.hasInteracted);\n this.setState('user-valid', isValid && this.hasInteracted);\n }\n\n protected setState(name: string, active: boolean): void {\n const states = this.internals.states;\n\n if (!states) {\n return;\n }\n\n if (active) {\n states.add(name);\n } else {\n states.delete(name);\n }\n }\n\n protected syncFormValue(): void {}\n\n protected resetToDefaultValue(): void {}\n\n protected restoreFormState(_state: string | File | FormData | null): void {}\n\n private emitInvalid = (event: Event): void => {\n if (event.target !== this) {\n return;\n }\n\n this.hasInteracted = true;\n this.dispatchEvent(new PkInvalidEvent());\n };\n\n private handleInteraction = (event: Event): void => {\n if (!this.emittedEvents.includes(event.type)) {\n this.emittedEvents.push(event.type);\n }\n\n if (this.emittedEvents.length >= this.assumeInteractionOn.length) {\n this.hasInteracted = true;\n this.updateValidity();\n }\n };\n}\n"],"mappings":";;;;;AACA,IAAa,iBAAb,cAAoC,MAAM;CACtC,cAAc;AACV,QAAM,cAAc;GAAE,SAAS;GAAM,YAAY;GAAO,UAAU;GAAM,CAAC;;;;;ACDjF,SAAgB,uBAAoC;AAChD,QAAO;EACH,oBAAoB,CAAC,eAAe;EACpC,cAAc,SAAS;GACnB,MAAM,SAAS;IACX,SAAS;IACT,SAAS;IACT,aAAa,EAAE;IAClB;AAED,OAAI,QAAQ,aAAa;AACrB,WAAO,UAAU,QAAQ;AACzB,WAAO,UAAU;AACjB,WAAO,YAAY,KAAK,cAAc;;AAG1C,UAAO;;EAEd;;;;;;;;;;;;;;;ACDL,IAAsB,0BAAtB,cAAsD,UAAU;;wBACpC;;CAExB,WAAW,aAA4B;AACnC,SAAO,CAAC,sBAAsB,CAAC;;CAGnC,WAAW,qBAA+B;EACtC,MAAM,QAAQ,IAAI,IAAI,MAAM,sBAAsB,EAAE,CAAC;AAErD,OAAK,MAAM,aAAa,KAAK,WACzB,MAAK,MAAM,QAAQ,UAAU,sBAAsB,EAAE,CACjD,OAAM,IAAI,KAAK;AAIvB,SAAO,CAAC,GAAG,MAAM;;CAuCrB,cAAc;AACV,SAAO;mBArCoB,KAAK,iBAAiB;6BAMrB,CAAC,QAAQ;oBAEb,EAAE;cAIR;kBAIX;kBAIA;qBAIkB;yBAGX;uBAGF;uBAEkB,EAAE;sBAsRb,UAAuB;AAC1C,OAAI,MAAM,WAAW,KACjB;AAGJ,QAAK,gBAAgB;AACrB,QAAK,cAAc,IAAI,gBAAgB,CAAC;;4BAGf,UAAuB;AAChD,OAAI,CAAC,KAAK,cAAc,SAAS,MAAM,KAAK,CACxC,MAAK,cAAc,KAAK,MAAM,KAAK;AAGvC,OAAI,KAAK,cAAc,UAAU,KAAK,oBAAoB,QAAQ;AAC9D,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;;;AAhSzB,OAAK,iBAAiB,WAAW,KAAK,YAA6B;;CAGvE,oBAAmC;AAC/B,QAAM,mBAAmB;AAEzB,OAAK,MAAM,aAAa,KAAK,oBACzB,MAAK,iBAAiB,WAAW,KAAK,kBAAkB;AAG5D,OAAK,gBAAgB;;CAGzB,uBAAsC;AAClC,OAAK,gBAAgB,YAAY;AACjC,OAAK,iBAAiB,KAAA;AAEtB,OAAK,MAAM,aAAa,KAAK,oBACzB,MAAK,oBAAoB,WAAW,KAAK,kBAAkB;AAG/D,OAAK,oBAAoB,WAAW,KAAK,YAA6B;AACtE,QAAM,sBAAsB;;CAGhC,QAAiB,SAA+B;AAC5C,MAAI,QAAQ,IAAI,cAAc,CAC1B,MAAK,kBAAkB,KAAK,eAAe,GAAG;AAGlD,MAAI,QAAQ,IAAI,WAAW,CAMvB,MAAK,SAAS,YAAY,QAAQ,KAAK,SAAS,CAAC;AAGrD,MAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,OAAO,CACjG,MAAK,eAAe;AAGxB,OAAK,gBAAgB;AACrB,QAAM,QAAQ,QAAQ;AACtB,OAAK,oBAAoB;;CAG7B,aAAsB,UAAgC;AAClD,QAAM,aAAa,SAAS;AAC5B,OAAK,uBAAuB;;;CAIhC,sBAAoD;AAChD,SAAO,KAAK,SAAS;;;CAIzB,qBAAqC;CAErC,wBAAwC;AACpC,OAAK,gBAAgB,YAAY;AACjC,OAAK,iBAAiB,IAAI,eACtB,YACM,KAAK,qBAAqB,QAC1B,KAAK,oBAAoB,CAClC;AACD,OAAK,eAAe,SAAS;;CAGjC,qBAAqC;AACjC,OAAK,gBAAgB,MAAM;;CAG/B,oBAA0B;AACtB,OAAK,eAAe;AACpB,OAAK,gBAAgB;AACrB,OAAK,kBAAkB;AACvB,OAAK,gBAAgB,EAAE;AACvB,OAAK,qBAAqB;AAC1B,OAAK,eAAe;AACpB,OAAK,gBAAgB;;CAGzB,qBAAqB,YAA2B;AAC5C,OAAK,WAAW;AAChB,OAAK,gBAAgB;;CAGzB,yBAAyB,OAAwC,SAA4C;AACzG,OAAK,iBAAiB,MAAM;AAC5B,OAAK,eAAe;AACpB,OAAK,gBAAgB;;CAGzB,IAAI,KAAK,OAAe;AACpB,MAAI,MACA,MAAK,aAAa,QAAQ,MAAM;MAEhC,MAAK,gBAAgB,OAAO;;CAIpC,IAAI,OAA+B;AAC/B,SAAO,KAAK,UAAU;;CAG1B,IAAI,SAAmB;AACnB,SAAO,KAAK,UAAU;;CAG1B,IAAI,WAA0B;AAC1B,SAAO,KAAK,UAAU;;CAG1B,IAAI,eAAwB;AACxB,SAAO,KAAK,UAAU;;CAG1B,IAAI,oBAA4B;AAC5B,SAAO,KAAK,UAAU;;CAG1B,UAAkC;AAC9B,SAAO,KAAK,UAAU;;;CAI1B,gBAAyB;AACrB,OAAK,gBAAgB;AACrB,SAAO,KAAK,UAAU,eAAe;;;CAIzC,iBAA0B;AACtB,OAAK,gBAAgB;AACrB,OAAK,gBAAgB;AACrB,SAAO,KAAK,UAAU,gBAAgB;;;CAI1C,gBAAsB;AAClB,OAAK,kBAAkB,GAAG;AAC1B,OAAK,UAAU,YAAY,EAAE,CAAC;AAC9B,OAAK,kBAAkB;;;CAI3B,kBAAkB,SAAuB;AACrC,MAAI,CAAC,SAAS;AACV,QAAK,cAAc;AACnB,QAAK,UAAU,YAAY,EAAE,CAAC;AAC9B,QAAK,kBAAkB;AACvB;;AAGJ,OAAK,cAAc;EACnB,MAAM,SAAS,KAAK;AAEpB,MAAI,kBAAkB,YAClB,MAAK,UAAU,YAAY,EAAE,aAAa,MAAM,EAAE,SAAS,OAAO;MAElE,MAAK,UAAU,YAAY,EAAE,aAAa,MAAM,EAAE,QAAQ;AAG9D,OAAK,kBAAkB;;CAG3B,IAAc,mBAA4C;AACtD,SAAO,KAAK;;CAGhB,IAAc,gBAA+B;AAEzC,SAAO,CAAC,GADK,KAAK,YACD,cAAc,EAAE,EAAG,GAAI,KAAK,cAAc,EAAE,CAAE;;CAGnE,aACI,OACA,OACI;AACJ,OAAK,UAAU,aAAa,OAAO,SAAS,MAAM;;CAGtD,SACI,OACA,OACI;AACJ,OAAK,aAAa,OAAO,SAAS,MAAM;;CAG5C,iBAAiC;AAC7B,MAAI,KAAK,YAAY,KAAK,aAAa,WAAW,IAAI,CAAC,KAAK,cAAc;AACtE,QAAK,UAAU,YAAY,EAAE,CAAC;AAC9B,QAAK,kBAAkB;AACvB;;EAGJ,MAAM,aAAa,KAAK;AAExB,MAAI,CAAC,WAAW,OACZ;EAGJ,MAAM,QAAuD,EACzD,aAAa,QAAQ,KAAK,YAAY,EACzC;EAED,IAAI,eAAe;EACnB,MAAM,SAAS,KAAK;AAEpB,OAAK,MAAM,aAAa,YAAY;GAChC,MAAM,EAAE,SAAS,SAAS,gBAAgB,UAAU,cAAc,KAAK;AAEvE,OAAI,QACA;AAGJ,OAAI,CAAC,aACD,gBAAe;AAGnB,QAAK,MAAM,OAAO,YACd,OAAM,OAAO;;AAIrB,MAAI,CAAC,aACD,gBAAe,KAAK;AAGxB,MAAI,kBAAkB,YAClB,MAAK,UAAU,YAAY,OAAO,cAAc,OAAO;MAEvD,MAAK,UAAU,YAAY,OAAO,aAAa;AAGnD,OAAK,kBAAkB;;CAG3B,mBAAmC;EAC/B,MAAM,UAAU,KAAK,UAAU,SAAS;AAExC,OAAK,SAAS,YAAY,KAAK,SAAS;AACxC,OAAK,SAAS,YAAY,CAAC,KAAK,SAAS;AACzC,OAAK,SAAS,WAAW,CAAC,QAAQ;AAClC,OAAK,SAAS,SAAS,QAAQ;AAC/B,OAAK,SAAS,gBAAgB,CAAC,WAAW,KAAK,cAAc;AAC7D,OAAK,SAAS,cAAc,WAAW,KAAK,cAAc;;CAG9D,SAAmB,MAAc,QAAuB;EACpD,MAAM,SAAS,KAAK,UAAU;AAE9B,MAAI,CAAC,OACD;AAGJ,MAAI,OACA,QAAO,IAAI,KAAK;MAEhB,QAAO,OAAO,KAAK;;CAI3B,gBAAgC;CAEhC,sBAAsC;CAEtC,iBAA2B,QAA+C;;YAzSzE,SAAS,EAAE,SAAS,MAAM,CAAC,CAAA,EAAA,wBAAA,WAAA,QAAA,KAAA,EAAA;YAI3B,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,wBAAA,WAAA,YAAA,KAAA,EAAA;YAI1C,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,wBAAA,WAAA,YAAA,KAAA,EAAA;YAI1C,SAAS;CAAE,WAAW;CAAgB,SAAS;CAAM,CAAC,CAAA,EAAA,wBAAA,WAAA,eAAA,KAAA,EAAA;YAGtD,SAAS;CAAE,WAAW;CAAO,OAAO;CAAM,CAAC,CAAA,EAAA,wBAAA,WAAA,mBAAA,KAAA,EAAA;YAG3C,SAAS;CAAE,WAAW;CAAO,OAAO;CAAM,CAAC,CAAA,EAAA,wBAAA,WAAA,iBAAA,KAAA,EAAA"}