@verbb/plugin-kit-web 2.0.21 → 2.0.23

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 (419) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/custom-elements.json +1400 -13
  3. package/dist/chunks/{active-elements-BwpXu8Lb.js → active-elements-DM_lCHaW.js} +1 -1
  4. package/dist/chunks/{active-elements-BwpXu8Lb.js.map → active-elements-DM_lCHaW.js.map} +1 -1
  5. package/dist/chunks/{animate-with-class-CsDwYnXL.js → animate-with-class-NP-yJVt_.js} +1 -1
  6. package/dist/chunks/{animate-with-class-CsDwYnXL.js.map → animate-with-class-NP-yJVt_.js.map} +1 -1
  7. package/dist/chunks/{autoloader-dJO3tYOX.js → autoloader-DnSfHkrD.js} +3 -3
  8. package/dist/chunks/{autoloader-dJO3tYOX.js.map → autoloader-DnSfHkrD.js.map} +1 -1
  9. package/dist/chunks/{button-group-item.styles-DYmBR28a.js → button-group-item.styles-G05d0DNI.js} +1 -1
  10. package/dist/chunks/{button-group-item.styles-DYmBR28a.js.map → button-group-item.styles-G05d0DNI.js.map} +1 -1
  11. package/dist/chunks/{component-registry-D34fm8xW.js → component-registry-DoevfR-u.js} +5 -1
  12. package/dist/chunks/component-registry-DoevfR-u.js.map +1 -0
  13. package/dist/chunks/{control-aria-B2QMq4ji.js → control-aria-CzouQRZD.js} +1 -1
  14. package/dist/chunks/{control-aria-B2QMq4ji.js.map → control-aria-CzouQRZD.js.map} +1 -1
  15. package/dist/chunks/{dismissible-stack-XQUMfKO3.js → dismissible-stack-B3BgzdQb.js} +1 -1
  16. package/dist/chunks/{dismissible-stack-XQUMfKO3.js.map → dismissible-stack-B3BgzdQb.js.map} +1 -1
  17. package/dist/chunks/{field-labels-CmuAW8Cl.js → field-labels-CGSfAGf-.js} +1 -1
  18. package/dist/chunks/{field-labels-CmuAW8Cl.js.map → field-labels-CGSfAGf-.js.map} +1 -1
  19. package/dist/chunks/{focus-aa5dlv8k.js → focus-C6pY4Ym4.js} +2 -2
  20. package/dist/chunks/{focus-aa5dlv8k.js.map → focus-C6pY4Ym4.js.map} +1 -1
  21. package/dist/chunks/{form-control.styles-BQdimE5o.js → form-control.styles-BHwSsx_y.js} +1 -1
  22. package/dist/chunks/{form-control.styles-BQdimE5o.js.map → form-control.styles-BHwSsx_y.js.map} +1 -1
  23. package/dist/chunks/{has-slot-8BvCt_qo.js → has-slot-9zjTXvea.js} +1 -1
  24. package/dist/chunks/{has-slot-8BvCt_qo.js.map → has-slot-9zjTXvea.js.map} +1 -1
  25. package/dist/chunks/{icon.styles-BLTWLqYp.js → icon.styles-pNyUmVtP.js} +1 -1
  26. package/dist/chunks/{icon.styles-BLTWLqYp.js.map → icon.styles-pNyUmVtP.js.map} +1 -1
  27. package/dist/chunks/{icons-BR8JcQj2.js → icons-B8siZLOe.js} +2 -2
  28. package/dist/chunks/{icons-BR8JcQj2.js.map → icons-B8siZLOe.js.map} +1 -1
  29. package/dist/chunks/{mirror-validator-DCjNYrrx.js → mirror-validator-Cszpqlxk.js} +1 -1
  30. package/dist/chunks/{mirror-validator-DCjNYrrx.js.map → mirror-validator-Cszpqlxk.js.map} +1 -1
  31. package/dist/chunks/{option-filter-BQqr8Z21.js → option-filter-Cj5SvyzI.js} +2 -2
  32. package/dist/chunks/{option-filter-BQqr8Z21.js.map → option-filter-Cj5SvyzI.js.map} +1 -1
  33. package/dist/chunks/{overlay-lifecycle-D0pkTQyI.js → overlay-lifecycle-CAoT0LE8.js} +1 -1
  34. package/dist/chunks/{overlay-lifecycle-D0pkTQyI.js.map → overlay-lifecycle-CAoT0LE8.js.map} +1 -1
  35. package/dist/chunks/pk-alert-Cjxl6CY_.js +664 -0
  36. package/dist/chunks/pk-alert-Cjxl6CY_.js.map +1 -0
  37. package/dist/chunks/{pk-autocomplete-qy2Psvqm.js → pk-autocomplete-DA77kdTN.js} +19 -19
  38. package/dist/chunks/{pk-autocomplete-qy2Psvqm.js.map → pk-autocomplete-DA77kdTN.js.map} +1 -1
  39. package/dist/chunks/{pk-button-BrH4u4Qr.js → pk-button-DCtNLEPr.js} +6 -6
  40. package/dist/chunks/{pk-button-BrH4u4Qr.js.map → pk-button-DCtNLEPr.js.map} +1 -1
  41. package/dist/chunks/{pk-button-group-BSz5T5iS.js → pk-button-group-DBdKK_2_.js} +1 -1
  42. package/dist/chunks/{pk-button-group-BSz5T5iS.js.map → pk-button-group-DBdKK_2_.js.map} +1 -1
  43. package/dist/chunks/{pk-button-group-separator-DH3Rl24b.js → pk-button-group-separator-D0Aa0a0f.js} +1 -1
  44. package/dist/chunks/{pk-button-group-separator-DH3Rl24b.js.map → pk-button-group-separator-D0Aa0a0f.js.map} +1 -1
  45. package/dist/chunks/{pk-button-group-text-Qro_KmZb.js → pk-button-group-text-BsqEM-dB.js} +2 -2
  46. package/dist/chunks/{pk-button-group-text-Qro_KmZb.js.map → pk-button-group-text-BsqEM-dB.js.map} +1 -1
  47. package/dist/chunks/{pk-calendar-Z7Y0PjeY.js → pk-calendar-hBz1MnOu.js} +6 -6
  48. package/dist/chunks/{pk-calendar-Z7Y0PjeY.js.map → pk-calendar-hBz1MnOu.js.map} +1 -1
  49. package/dist/chunks/{pk-checkbox-13ArHSmt.js → pk-checkbox-dvHRoVbL.js} +4 -4
  50. package/dist/chunks/{pk-checkbox-13ArHSmt.js.map → pk-checkbox-dvHRoVbL.js.map} +1 -1
  51. package/dist/chunks/{pk-checkbox-select-Ckvfbu83.js → pk-checkbox-select-Cqx5ZCMq.js} +2 -2
  52. package/dist/chunks/{pk-checkbox-select-Ckvfbu83.js.map → pk-checkbox-select-Cqx5ZCMq.js.map} +1 -1
  53. package/dist/chunks/{pk-clear--mPWZP7H.js → pk-clear-LzxwxEX7.js} +1 -1
  54. package/dist/chunks/{pk-clear--mPWZP7H.js.map → pk-clear-LzxwxEX7.js.map} +1 -1
  55. package/dist/chunks/{pk-code-editor-BlG6O5qB.js → pk-code-editor-C_PqjR75.js} +4 -4
  56. package/dist/chunks/{pk-code-editor-BlG6O5qB.js.map → pk-code-editor-C_PqjR75.js.map} +1 -1
  57. package/dist/chunks/{pk-color-input-BRgQ5-vB.js → pk-color-input-4LDV0Z3W.js} +4 -4
  58. package/dist/chunks/{pk-color-input-BRgQ5-vB.js.map → pk-color-input-4LDV0Z3W.js.map} +1 -1
  59. package/dist/chunks/{pk-combobox-ag89QEX2.js → pk-combobox-BeddzAsl.js} +19 -19
  60. package/dist/chunks/{pk-combobox-ag89QEX2.js.map → pk-combobox-BeddzAsl.js.map} +1 -1
  61. package/dist/chunks/{pk-connect.styles-BhW406jt.js → pk-connect.styles-ciqZMK3B.js} +1 -1
  62. package/dist/chunks/{pk-connect.styles-BhW406jt.js.map → pk-connect.styles-ciqZMK3B.js.map} +1 -1
  63. package/dist/chunks/{pk-copy-button-BVaOLtYG.js → pk-copy-button-KegSx46o.js} +29 -8
  64. package/dist/chunks/pk-copy-button-KegSx46o.js.map +1 -0
  65. package/dist/chunks/{pk-date-picker-C2YvDPNm.js → pk-date-picker-D_JFep-Y.js} +19 -19
  66. package/dist/chunks/{pk-date-picker-C2YvDPNm.js.map → pk-date-picker-D_JFep-Y.js.map} +1 -1
  67. package/dist/chunks/{pk-dialog-VMQqLW1f.js → pk-dialog-CFU850OH.js} +8 -8
  68. package/dist/chunks/{pk-dialog-VMQqLW1f.js.map → pk-dialog-CFU850OH.js.map} +1 -1
  69. package/dist/chunks/{pk-dropdown-item-D9OaG5o-.js → pk-dropdown-item-A4P4zfVF.js} +5 -5
  70. package/dist/chunks/{pk-dropdown-item-D9OaG5o-.js.map → pk-dropdown-item-A4P4zfVF.js.map} +1 -1
  71. package/dist/chunks/{pk-dropdown-label-CRNWMWQd.js → pk-dropdown-label-PqDxMkCI.js} +1 -1
  72. package/dist/chunks/{pk-dropdown-label-CRNWMWQd.js.map → pk-dropdown-label-PqDxMkCI.js.map} +1 -1
  73. package/dist/chunks/{pk-dropdown-menu-DW1wI8xQ.js → pk-dropdown-menu-C_vasBoa.js} +9 -9
  74. package/dist/chunks/{pk-dropdown-menu-DW1wI8xQ.js.map → pk-dropdown-menu-C_vasBoa.js.map} +1 -1
  75. package/dist/chunks/{pk-editable-table-DDnu1I8Y.js → pk-editable-table-B85NhFYY.js} +18 -18
  76. package/dist/chunks/{pk-editable-table-DDnu1I8Y.js.map → pk-editable-table-B85NhFYY.js.map} +1 -1
  77. package/dist/chunks/{pk-field-UAlMq6mQ.js → pk-field-BJA2fZ6s.js} +7 -7
  78. package/dist/chunks/{pk-field-UAlMq6mQ.js.map → pk-field-BJA2fZ6s.js.map} +1 -1
  79. package/dist/chunks/{pk-form-associated-element-GxX5lbnk.js → pk-form-associated-element-MqaHdIoH.js} +2 -2
  80. package/dist/chunks/{pk-form-associated-element-GxX5lbnk.js.map → pk-form-associated-element-MqaHdIoH.js.map} +1 -1
  81. package/dist/chunks/{pk-image-browser-Bj8LhWfk.js → pk-image-browser-DLAQcjFt.js} +19 -19
  82. package/dist/chunks/{pk-image-browser-Bj8LhWfk.js.map → pk-image-browser-DLAQcjFt.js.map} +1 -1
  83. package/dist/chunks/{pk-input-BywmK5n2.js → pk-input-CiUNLTSW.js} +11 -11
  84. package/dist/chunks/{pk-input-BywmK5n2.js.map → pk-input-CiUNLTSW.js.map} +1 -1
  85. package/dist/chunks/{pk-input-group-addon-ClBkGmAw.js → pk-input-group-addon-piOznzSS.js} +1 -1
  86. package/dist/chunks/{pk-input-group-addon-ClBkGmAw.js.map → pk-input-group-addon-piOznzSS.js.map} +1 -1
  87. package/dist/chunks/{pk-input-group-button-CHQHsWd4.js → pk-input-group-button-Di2vEJLo.js} +1 -1
  88. package/dist/chunks/{pk-input-group-button-CHQHsWd4.js.map → pk-input-group-button-Di2vEJLo.js.map} +1 -1
  89. package/dist/chunks/{pk-input-group-input-oNnqMBGU.js → pk-input-group-input-CwaaEfr1.js} +1 -1
  90. package/dist/chunks/{pk-input-group-input-oNnqMBGU.js.map → pk-input-group-input-CwaaEfr1.js.map} +1 -1
  91. package/dist/chunks/{pk-input-group-BLqKPnfc.js → pk-input-group-k7WV0pQI.js} +3 -3
  92. package/dist/chunks/{pk-input-group-BLqKPnfc.js.map → pk-input-group-k7WV0pQI.js.map} +1 -1
  93. package/dist/chunks/{pk-input-group-text-HUxlXROB.js → pk-input-group-text-C0VAdy0J.js} +1 -1
  94. package/dist/chunks/{pk-input-group-text-HUxlXROB.js.map → pk-input-group-text-C0VAdy0J.js.map} +1 -1
  95. package/dist/chunks/{pk-input-group-textarea-Cl2FNuw-.js → pk-input-group-textarea-DOG1NIlE.js} +1 -1
  96. package/dist/chunks/{pk-input-group-textarea-Cl2FNuw-.js.map → pk-input-group-textarea-DOG1NIlE.js.map} +1 -1
  97. package/dist/chunks/{pk-lightswitch-VHfJizBW.js → pk-lightswitch-FH5ZxMG2.js} +7 -7
  98. package/dist/chunks/{pk-lightswitch-VHfJizBW.js.map → pk-lightswitch-FH5ZxMG2.js.map} +1 -1
  99. package/dist/chunks/{pk-option-DQZHV9jL.js → pk-option-Cx52kLmz.js} +3 -3
  100. package/dist/chunks/{pk-option-DQZHV9jL.js.map → pk-option-Cx52kLmz.js.map} +1 -1
  101. package/dist/chunks/{pk-option-group-CCzJkBFp.js → pk-option-group-CYo9Ukue.js} +2 -2
  102. package/dist/chunks/{pk-option-group-CCzJkBFp.js.map → pk-option-group-CYo9Ukue.js.map} +1 -1
  103. package/dist/chunks/{pk-popover-D3jkHfwB.js → pk-popover-209LdoPr.js} +9 -9
  104. package/dist/chunks/{pk-popover-D3jkHfwB.js.map → pk-popover-209LdoPr.js.map} +1 -1
  105. package/dist/chunks/{pk-popup-B65tZMQH.js → pk-popup-0EIt9X_W.js} +3 -3
  106. package/dist/chunks/{pk-popup-B65tZMQH.js.map → pk-popup-0EIt9X_W.js.map} +1 -1
  107. package/dist/chunks/{pk-radio-group-Dzd-3HaQ.js → pk-radio-group-CruMBeeF.js} +6 -6
  108. package/dist/chunks/{pk-radio-group-Dzd-3HaQ.js.map → pk-radio-group-CruMBeeF.js.map} +1 -1
  109. package/dist/chunks/{pk-radio-B5XkMHy3.js → pk-radio-jgj6A0Wy.js} +1 -1
  110. package/dist/chunks/{pk-radio-B5XkMHy3.js.map → pk-radio-jgj6A0Wy.js.map} +1 -1
  111. package/dist/chunks/{pk-scroll-area-CdfNxYz8.js → pk-scroll-area-BaqN798b.js} +1 -1
  112. package/dist/chunks/{pk-scroll-area-CdfNxYz8.js.map → pk-scroll-area-BaqN798b.js.map} +1 -1
  113. package/dist/chunks/{pk-select-b5S5WKc-.js → pk-select-UUH7FE4H.js} +18 -18
  114. package/dist/chunks/{pk-select-b5S5WKc-.js.map → pk-select-UUH7FE4H.js.map} +1 -1
  115. package/dist/chunks/{pk-separator-N-VyjYE6.js → pk-separator-Bcxg_GO2.js} +1 -1
  116. package/dist/chunks/{pk-separator-N-VyjYE6.js.map → pk-separator-Bcxg_GO2.js.map} +1 -1
  117. package/dist/chunks/{pk-spinner-DweuYJ_Z.js → pk-spinner-CN365srE.js} +1 -1
  118. package/dist/chunks/{pk-spinner-DweuYJ_Z.js.map → pk-spinner-CN365srE.js.map} +1 -1
  119. package/dist/chunks/pk-state-panel-DPP7t-er.js +603 -0
  120. package/dist/chunks/pk-state-panel-DPP7t-er.js.map +1 -0
  121. package/dist/chunks/{pk-status-BehQARDv.js → pk-status-CYcadu0Q.js} +1 -1
  122. package/dist/chunks/{pk-status-BehQARDv.js.map → pk-status-CYcadu0Q.js.map} +1 -1
  123. package/dist/chunks/{pk-tab-CTloD18e.js → pk-tab-BmXNyDg7.js} +1 -1
  124. package/dist/chunks/{pk-tab-CTloD18e.js.map → pk-tab-BmXNyDg7.js.map} +1 -1
  125. package/dist/chunks/{pk-tab-heading-Cjcgebxn.js → pk-tab-heading-GZHVmCAd.js} +1 -1
  126. package/dist/chunks/{pk-tab-heading-Cjcgebxn.js.map → pk-tab-heading-GZHVmCAd.js.map} +1 -1
  127. package/dist/chunks/{pk-tab-panel-CkKU5-Ah.js → pk-tab-panel-OpM3f_cm.js} +1 -1
  128. package/dist/chunks/{pk-tab-panel-CkKU5-Ah.js.map → pk-tab-panel-OpM3f_cm.js.map} +1 -1
  129. package/dist/chunks/{pk-tabs-BgEBki1q.js → pk-tabs-x26NAw-V.js} +2 -2
  130. package/dist/chunks/{pk-tabs-BgEBki1q.js.map → pk-tabs-x26NAw-V.js.map} +1 -1
  131. package/dist/chunks/{pk-textarea-Dhj1WFLH.js → pk-textarea-CBijEmcV.js} +9 -9
  132. package/dist/chunks/{pk-textarea-Dhj1WFLH.js.map → pk-textarea-CBijEmcV.js.map} +1 -1
  133. package/dist/chunks/{pk-time-picker-ChRbKHNB.js → pk-time-picker-D-u5-7pf.js} +5 -5
  134. package/dist/chunks/{pk-time-picker-ChRbKHNB.js.map → pk-time-picker-D-u5-7pf.js.map} +1 -1
  135. package/dist/chunks/{pk-tiptap-content-CL8smjGi.js → pk-tiptap-content-BGxMO3T4.js} +2 -2
  136. package/dist/chunks/{pk-tiptap-content-CL8smjGi.js.map → pk-tiptap-content-BGxMO3T4.js.map} +1 -1
  137. package/dist/chunks/{pk-tiptap-editor-BzZ-J2sl.js → pk-tiptap-editor-BeuyzH5l.js} +20 -20
  138. package/dist/chunks/pk-tiptap-editor-BeuyzH5l.js.map +1 -0
  139. package/dist/chunks/{pk-tiptap-input-YKg4VLp_.js → pk-tiptap-input-CQojaxDH.js} +5 -5
  140. package/dist/chunks/{pk-tiptap-input-YKg4VLp_.js.map → pk-tiptap-input-CQojaxDH.js.map} +1 -1
  141. package/dist/chunks/{pk-toggle-BthhH7vl.js → pk-toggle-CAtGO_Le.js} +2 -2
  142. package/dist/chunks/{pk-toggle-BthhH7vl.js.map → pk-toggle-CAtGO_Le.js.map} +1 -1
  143. package/dist/chunks/{pk-toggle-group-D2Quux8D.js → pk-toggle-group-CLso6OE7.js} +1 -1
  144. package/dist/chunks/{pk-toggle-group-D2Quux8D.js.map → pk-toggle-group-CLso6OE7.js.map} +1 -1
  145. package/dist/chunks/{pk-tooltip--QBV6puX.js → pk-tooltip-C6yb4CXI.js} +5 -5
  146. package/dist/chunks/{pk-tooltip--QBV6puX.js.map → pk-tooltip-C6yb4CXI.js.map} +1 -1
  147. package/dist/chunks/{popup-content-animation.styles-BnNiguJo.js → popup-content-animation.styles-EUnGV75J.js} +1 -1
  148. package/dist/chunks/{popup-content-animation.styles-BnNiguJo.js.map → popup-content-animation.styles-EUnGV75J.js.map} +1 -1
  149. package/dist/chunks/{popup-placement-animation-WlEXnS85.js → popup-placement-animation-GvFXER7D.js} +1 -1
  150. package/dist/chunks/{popup-placement-animation-WlEXnS85.js.map → popup-placement-animation-GvFXER7D.js.map} +1 -1
  151. package/dist/chunks/{popup-pointer-CuLjk1th.js → popup-pointer-BTS3Y6LE.js} +1 -1
  152. package/dist/chunks/{popup-pointer-CuLjk1th.js.map → popup-pointer-BTS3Y6LE.js.map} +1 -1
  153. package/dist/chunks/{register-C6_F-VwU.js → register-BDO_LUHK.js} +57 -51
  154. package/dist/chunks/register-BDO_LUHK.js.map +1 -0
  155. package/dist/chunks/{register-components-BT9THgdh.js → register-components-Dcdn1e3S.js} +1 -1
  156. package/dist/chunks/{register-components-BT9THgdh.js.map → register-components-Dcdn1e3S.js.map} +1 -1
  157. package/dist/chunks/{render-Dvc3MHQR.js → render-BKGW1a68.js} +1 -1
  158. package/dist/chunks/{render-Dvc3MHQR.js.map → render-BKGW1a68.js.map} +1 -1
  159. package/dist/chunks/{required-validator-CEg8dvjS.js → required-validator-CaRnQk1V.js} +1 -1
  160. package/dist/chunks/{required-validator-CEg8dvjS.js.map → required-validator-CaRnQk1V.js.map} +1 -1
  161. package/dist/chunks/{scroll-lock-Bbh3Sc5g.js → scroll-lock-gTFrvIPu.js} +1 -1
  162. package/dist/chunks/{scroll-lock-Bbh3Sc5g.js.map → scroll-lock-gTFrvIPu.js.map} +1 -1
  163. package/dist/chunks/{spinner-utils-CDfHypTv.js → spinner-utils-Co_4X3ip.js} +1 -1
  164. package/dist/chunks/{spinner-utils-CDfHypTv.js.map → spinner-utils-Co_4X3ip.js.map} +1 -1
  165. package/dist/chunks/{supports-popover-CUBsbHpS.js → supports-popover-6lNVStLh.js} +1 -1
  166. package/dist/chunks/{supports-popover-CUBsbHpS.js.map → supports-popover-6lNVStLh.js.map} +1 -1
  167. package/dist/chunks/{sync-listbox-separators-B1-V0oJi.js → sync-listbox-separators-CPFtrpNq.js} +1 -1
  168. package/dist/chunks/{sync-listbox-separators-B1-V0oJi.js.map → sync-listbox-separators-CPFtrpNq.js.map} +1 -1
  169. package/dist/chunks/{tiptap.styles-CPRows--.js → tiptap.styles-DjhIrSBN.js} +2 -2
  170. package/dist/chunks/{tiptap.styles-CPRows--.js.map → tiptap.styles-DjhIrSBN.js.map} +1 -1
  171. package/dist/component-registry.d.ts.map +1 -1
  172. package/dist/components/alert/index.d.ts +2 -0
  173. package/dist/components/alert/index.d.ts.map +1 -0
  174. package/dist/components/alert/pk-alert.d.ts +95 -0
  175. package/dist/components/alert/pk-alert.d.ts.map +1 -0
  176. package/dist/components/alert/pk-alert.js +2 -0
  177. package/dist/components/alert/pk-alert.styles.d.ts +2 -0
  178. package/dist/components/alert/pk-alert.styles.d.ts.map +1 -0
  179. package/dist/components/alert.d.ts +2 -0
  180. package/dist/components/alert.js +2 -0
  181. package/dist/components/autocomplete/pk-autocomplete.js +1 -1
  182. package/dist/components/autocomplete.js +1 -1
  183. package/dist/components/button/pk-button.js +1 -1
  184. package/dist/components/button-group/pk-button-group-separator.js +1 -1
  185. package/dist/components/button-group/pk-button-group-text.js +1 -1
  186. package/dist/components/button-group/pk-button-group.js +1 -1
  187. package/dist/components/button-group.js +3 -3
  188. package/dist/components/button.js +1 -1
  189. package/dist/components/calendar/pk-calendar.js +1 -1
  190. package/dist/components/calendar.js +1 -1
  191. package/dist/components/checkbox/pk-checkbox.js +1 -1
  192. package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
  193. package/dist/components/checkbox-select.js +1 -1
  194. package/dist/components/checkbox.js +1 -1
  195. package/dist/components/code-editor/pk-code-editor.js +1 -1
  196. package/dist/components/code-editor.js +1 -1
  197. package/dist/components/color-input/pk-color-input.js +1 -1
  198. package/dist/components/color-input.js +1 -1
  199. package/dist/components/combobox/pk-combobox.js +1 -1
  200. package/dist/components/combobox.js +1 -1
  201. package/dist/components/connect/pk-connect-oauth.js +3 -3
  202. package/dist/components/connect/pk-connect.d.ts +0 -1
  203. package/dist/components/connect/pk-connect.d.ts.map +1 -1
  204. package/dist/components/connect/pk-connect.js +25 -48
  205. package/dist/components/connect/pk-connect.js.map +1 -1
  206. package/dist/components/copy-button/pk-copy-button.d.ts +17 -2
  207. package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
  208. package/dist/components/copy-button/pk-copy-button.js +1 -1
  209. package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
  210. package/dist/components/copy-button.js +1 -1
  211. package/dist/components/date-picker/pk-date-picker.js +1 -1
  212. package/dist/components/date-picker.js +1 -1
  213. package/dist/components/dialog/pk-dialog.js +1 -1
  214. package/dist/components/dialog.js +1 -1
  215. package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
  216. package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
  217. package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
  218. package/dist/components/dropdown-menu.js +3 -3
  219. package/dist/components/editable-table/pk-editable-table.js +1 -1
  220. package/dist/components/editable-table.js +1 -1
  221. package/dist/components/field/pk-field.js +1 -1
  222. package/dist/components/field.js +1 -1
  223. package/dist/components/image-browser/pk-image-browser.js +1 -1
  224. package/dist/components/image-browser.js +1 -1
  225. package/dist/components/input/pk-input.js +1 -1
  226. package/dist/components/input-group/pk-input-group-addon.js +1 -1
  227. package/dist/components/input-group/pk-input-group-button.js +1 -1
  228. package/dist/components/input-group/pk-input-group-input.js +1 -1
  229. package/dist/components/input-group/pk-input-group-text.js +1 -1
  230. package/dist/components/input-group/pk-input-group-textarea.js +1 -1
  231. package/dist/components/input-group/pk-input-group.js +1 -1
  232. package/dist/components/input-group.js +6 -6
  233. package/dist/components/input.js +1 -1
  234. package/dist/components/lightswitch/pk-lightswitch.js +1 -1
  235. package/dist/components/lightswitch.js +1 -1
  236. package/dist/components/popover/pk-popover.js +1 -1
  237. package/dist/components/popover.js +1 -1
  238. package/dist/components/popup/pk-popup.js +1 -1
  239. package/dist/components/popup.js +1 -1
  240. package/dist/components/radio-group/pk-radio-group.js +1 -1
  241. package/dist/components/radio-group/pk-radio.js +1 -1
  242. package/dist/components/radio-group.js +2 -2
  243. package/dist/components/scroll-area/pk-scroll-area.js +1 -1
  244. package/dist/components/scroll-area.js +1 -1
  245. package/dist/components/select/pk-option-group.js +1 -1
  246. package/dist/components/select/pk-option.js +1 -1
  247. package/dist/components/select/pk-select.js +1 -1
  248. package/dist/components/select.js +3 -3
  249. package/dist/components/separator/pk-separator.js +1 -1
  250. package/dist/components/separator.js +1 -1
  251. package/dist/components/spinner/pk-spinner.js +1 -1
  252. package/dist/components/spinner.js +2 -2
  253. package/dist/components/state-panel/index.d.ts +2 -0
  254. package/dist/components/state-panel/index.d.ts.map +1 -0
  255. package/dist/components/state-panel/pk-state-panel.d.ts +89 -0
  256. package/dist/components/state-panel/pk-state-panel.d.ts.map +1 -0
  257. package/dist/components/state-panel/pk-state-panel.js +2 -0
  258. package/dist/components/state-panel/pk-state-panel.styles.d.ts +2 -0
  259. package/dist/components/state-panel/pk-state-panel.styles.d.ts.map +1 -0
  260. package/dist/components/state-panel.d.ts +2 -0
  261. package/dist/components/state-panel.js +2 -0
  262. package/dist/components/status/pk-status.js +1 -1
  263. package/dist/components/status.js +1 -1
  264. package/dist/components/tabs/pk-tab-heading.js +1 -1
  265. package/dist/components/tabs/pk-tab-panel.js +1 -1
  266. package/dist/components/tabs/pk-tab.js +1 -1
  267. package/dist/components/tabs/pk-tabs.js +1 -1
  268. package/dist/components/tabs.js +4 -4
  269. package/dist/components/textarea/pk-textarea.js +1 -1
  270. package/dist/components/textarea.js +1 -1
  271. package/dist/components/time-picker/pk-time-picker.js +1 -1
  272. package/dist/components/time-picker.js +1 -1
  273. package/dist/components/tiptap/pk-tiptap-content.js +1 -1
  274. package/dist/components/tiptap/pk-tiptap-editor.d.ts +2 -0
  275. package/dist/components/tiptap/pk-tiptap-editor.d.ts.map +1 -1
  276. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  277. package/dist/components/tiptap/pk-tiptap-input.js +1 -1
  278. package/dist/components/tiptap/tiptap-utils.d.ts.map +1 -1
  279. package/dist/components/tiptap-content.js +1 -1
  280. package/dist/components/tiptap-editor.js +1 -1
  281. package/dist/components/tiptap-input.js +1 -1
  282. package/dist/components/toggle/pk-toggle.js +1 -1
  283. package/dist/components/toggle-group/pk-toggle-group.js +1 -1
  284. package/dist/components/toggle-group.js +1 -1
  285. package/dist/components/toggle.js +1 -1
  286. package/dist/components/tooltip/pk-tooltip.js +1 -1
  287. package/dist/components/tooltip.js +1 -1
  288. package/dist/connect/register-cp-connect.d.ts.map +1 -1
  289. package/dist/connect/register-cp-connect.js +8 -9
  290. package/dist/connect/register-cp-connect.js.map +1 -1
  291. package/dist/events/pk-dismiss.d.ts +10 -0
  292. package/dist/events/pk-dismiss.d.ts.map +1 -0
  293. package/dist/icons/index.js +2 -2
  294. package/dist/index.d.ts +3 -0
  295. package/dist/index.d.ts.map +1 -1
  296. package/dist/index.js +73 -66
  297. package/dist/index.js.map +1 -1
  298. package/dist/plugin-kit.css +2 -0
  299. package/dist/plugin-kit.js +4 -4
  300. package/dist/register-components.js +1 -1
  301. package/dist/register-pk.generated.d.ts +4 -0
  302. package/dist/register-pk.generated.d.ts.map +1 -1
  303. package/dist/register.d.ts +5 -1
  304. package/dist/register.d.ts.map +1 -1
  305. package/dist/register.js +59 -55
  306. package/dist/styles/connect/pk-connect.css +6 -107
  307. package/dist/utilities/fouce.css +2 -0
  308. package/dist-loader/chunks/{button-group-item.styles-CsBQ3Cyh.js → button-group-item.styles-CXLuiMeZ.js} +1 -1
  309. package/dist-loader/chunks/{lit-DpLik9Rf.js → lit-s6aadvWG.js} +78 -78
  310. package/dist-loader/chunks/{option-filter-Bc5aNNT0.js → option-filter-DH11hDpV.js} +1 -1
  311. package/dist-loader/chunks/{pk-base-B2MqxErC.js → pk-base-Om6X9ab5.js} +1 -1
  312. package/dist-loader/chunks/{pk-button-Dfm23jEC.js → pk-button-nSZxt8_B.js} +5 -5
  313. package/dist-loader/chunks/{pk-calendar-BuSULJCU.js → pk-calendar-BS7Mfme_.js} +5 -5
  314. package/dist-loader/chunks/{pk-checkbox-BDoq3xg0.js → pk-checkbox-CYUcOnco.js} +4 -4
  315. package/dist-loader/chunks/{pk-color-input-eLjO9zfn.js → pk-color-input-BjDit7z0.js} +4 -4
  316. package/dist-loader/chunks/{pk-combobox-DBvcyxRC.js → pk-combobox-DyexEhFo.js} +14 -14
  317. package/dist-loader/chunks/{pk-connect.styles-k61snd3X.js → pk-connect.styles-BsPAXjgF.js} +1 -1
  318. package/dist-loader/chunks/pk-copy-button-CoN83ilF.js +198 -0
  319. package/dist-loader/chunks/{pk-date-picker-CYLpYIji.js → pk-date-picker-CO6deRCu.js} +14 -14
  320. package/dist-loader/chunks/{pk-dialog-BtrH5Ke0.js → pk-dialog-BWo6iDnY.js} +6 -6
  321. package/dist-loader/chunks/{pk-dropdown-item-D8tfEU-k.js → pk-dropdown-item-CbujjI8U.js} +7 -7
  322. package/dist-loader/chunks/{pk-dropdown-label-TbLj4bHK.js → pk-dropdown-label-9X4ctyES.js} +2 -2
  323. package/dist-loader/chunks/{pk-dropdown-menu-C4GDW5pE.js → pk-dropdown-menu-D1KpGuqU.js} +8 -8
  324. package/dist-loader/chunks/{pk-field-BM0XD9Ij.js → pk-field-DzggayrX.js} +5 -5
  325. package/dist-loader/chunks/{pk-icon-_1F1aL74.js → pk-icon-DQPqxFKW.js} +3 -3
  326. package/dist-loader/chunks/{pk-input-DvBrD7Md.js → pk-input-C1peOijH.js} +8 -8
  327. package/dist-loader/chunks/{pk-lightswitch-CcwlLQ9f.js → pk-lightswitch-Y-I3eKCt.js} +6 -6
  328. package/dist-loader/chunks/{pk-option-DATPm0Bo.js → pk-option-IfazQDxz.js} +4 -4
  329. package/dist-loader/chunks/{pk-popup-CUuGs8r_.js → pk-popup-BrLT_4kD.js} +4 -4
  330. package/dist-loader/chunks/{pk-select-DpcvbzUL.js → pk-select-49fogRYV.js} +13 -13
  331. package/dist-loader/chunks/{pk-spinner-Dk_LbvHW.js → pk-spinner-BmnrA60m.js} +2 -2
  332. package/dist-loader/chunks/pk-state-panel-DKf54EnJ.js +600 -0
  333. package/dist-loader/chunks/{pk-status-B8UvjIp2.js → pk-status-Dat3_D-T.js} +2 -2
  334. package/dist-loader/chunks/{pk-textarea-DeSuxufJ.js → pk-textarea-DPb2R8gV.js} +6 -6
  335. package/dist-loader/chunks/{pk-time-picker-DpJt8biN.js → pk-time-picker-CJiQTVuC.js} +6 -6
  336. package/dist-loader/chunks/{pk-tooltip-DcF9J5GT.js → pk-tooltip-CqwQfOPV.js} +5 -5
  337. package/dist-loader/chunks/{popup-content-animation.styles-duCg9-CH.js → popup-content-animation.styles-CWR2mend.js} +1 -1
  338. package/dist-loader/chunks/{render-Bnzcxfss.js → render-BuA2YeZN.js} +1 -1
  339. package/dist-loader/chunks/{svg-Bz-bXZn7.js → svg-C6YcJMk9.js} +8 -1
  340. package/dist-loader/chunks/{tiptap-CgXkiK8d.js → tiptap-BhYH5Dva.js} +1 -1
  341. package/dist-loader/chunks/{tiptap.styles-C0E1NpSx.js → tiptap.styles-BckAim0_.js} +2 -2
  342. package/dist-loader/components/alert/alert.js +661 -0
  343. package/dist-loader/components/autocomplete/autocomplete.js +14 -14
  344. package/dist-loader/components/button/button.js +1 -1
  345. package/dist-loader/components/button-group/button-group-separator.js +2 -2
  346. package/dist-loader/components/button-group/button-group-text.js +3 -3
  347. package/dist-loader/components/button-group/button-group.js +2 -2
  348. package/dist-loader/components/calendar/calendar.js +1 -1
  349. package/dist-loader/components/checkbox/checkbox.js +1 -1
  350. package/dist-loader/components/checkbox-select/checkbox-select.js +3 -3
  351. package/dist-loader/components/code-editor/code-editor.js +4 -4
  352. package/dist-loader/components/color-input/color-input.js +1 -1
  353. package/dist-loader/components/combobox/combobox.js +1 -1
  354. package/dist-loader/components/connect/connect-oauth.js +5 -5
  355. package/dist-loader/components/connect/connect.js +28 -51
  356. package/dist-loader/components/copy-button/copy-button.js +1 -176
  357. package/dist-loader/components/date-picker/date-picker.js +1 -1
  358. package/dist-loader/components/dialog/dialog.js +1 -1
  359. package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
  360. package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -1
  361. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  362. package/dist-loader/components/dropdown-menu/dropdown-separator.js +2 -2
  363. package/dist-loader/components/editable-table/editable-table.js +18 -18
  364. package/dist-loader/components/field/field.js +1 -1
  365. package/dist-loader/components/icon/icon.js +2 -2
  366. package/dist-loader/components/image-browser/image-browser.js +14 -14
  367. package/dist-loader/components/input/input.js +1 -1
  368. package/dist-loader/components/input-group/input-group-addon.js +2 -2
  369. package/dist-loader/components/input-group/input-group-button.js +2 -2
  370. package/dist-loader/components/input-group/input-group-input.js +2 -2
  371. package/dist-loader/components/input-group/input-group-text.js +2 -2
  372. package/dist-loader/components/input-group/input-group-textarea.js +2 -2
  373. package/dist-loader/components/input-group/input-group.js +3 -3
  374. package/dist-loader/components/lightswitch/lightswitch.js +1 -1
  375. package/dist-loader/components/popover/popover.js +8 -8
  376. package/dist-loader/components/popup/popup.js +1 -1
  377. package/dist-loader/components/radio-group/radio-group.js +5 -5
  378. package/dist-loader/components/radio-group/radio.js +2 -2
  379. package/dist-loader/components/scroll-area/scroll-area.js +2 -2
  380. package/dist-loader/components/select/option-group.js +2 -2
  381. package/dist-loader/components/select/option.js +1 -1
  382. package/dist-loader/components/select/select.js +1 -1
  383. package/dist-loader/components/separator/separator.js +2 -2
  384. package/dist-loader/components/spinner/spinner.js +1 -1
  385. package/dist-loader/components/state-panel/state-panel.js +2 -0
  386. package/dist-loader/components/status/status.js +1 -1
  387. package/dist-loader/components/tabs/tab-heading.js +2 -2
  388. package/dist-loader/components/tabs/tab-panel.js +2 -2
  389. package/dist-loader/components/tabs/tab.js +2 -2
  390. package/dist-loader/components/tabs/tabs.js +2 -2
  391. package/dist-loader/components/textarea/textarea.js +1 -1
  392. package/dist-loader/components/time-picker/time-picker.js +1 -1
  393. package/dist-loader/components/tiptap/tiptap-content.js +4 -4
  394. package/dist-loader/components/tiptap/tiptap-editor.js +19 -19
  395. package/dist-loader/components/tiptap/tiptap-input.js +5 -5
  396. package/dist-loader/components/toggle/toggle.js +3 -3
  397. package/dist-loader/components/toggle-group/toggle-group.js +2 -2
  398. package/dist-loader/components/tooltip/tooltip.js +1 -1
  399. package/dist-loader/plugin-kit.css +2 -0
  400. package/dist-loader/plugin-kit.loader.js +4 -0
  401. package/dist-loader/styles/connect/pk-connect.css +6 -107
  402. package/dist-loader/utilities/fouce.css +2 -0
  403. package/package.json +47 -7
  404. package/dist/chunks/component-registry-D34fm8xW.js.map +0 -1
  405. package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +0 -1
  406. package/dist/chunks/pk-tiptap-editor-BzZ-J2sl.js.map +0 -1
  407. package/dist/chunks/register-C6_F-VwU.js.map +0 -1
  408. /package/dist-loader/chunks/{animate-with-class-DT0jwaR_.js → animate-with-class-BpZi7v-y.js} +0 -0
  409. /package/dist-loader/chunks/{codemirror-CSgOT0QM.js → codemirror-CU2NB7wh.js} +0 -0
  410. /package/dist-loader/chunks/{field-labels-D3lKQ2nq.js → field-labels-D7ccWdRn.js} +0 -0
  411. /package/dist-loader/chunks/{floating-ui-Cj0imr6d.js → floating-ui-B84As3F-.js} +0 -0
  412. /package/dist-loader/chunks/{has-slot-BGJeJdHr.js → has-slot-BvdEcnpm.js} +0 -0
  413. /package/dist-loader/chunks/{mirror-validator-C5XrXPaq.js → mirror-validator-9X0wdFnh.js} +0 -0
  414. /package/dist-loader/chunks/{overlay-lifecycle-C3tSQ3UR.js → overlay-lifecycle-CSIBJZgQ.js} +0 -0
  415. /package/dist-loader/chunks/{pk-clear-BMZUzwDt.js → pk-clear-BL8m1NyC.js} +0 -0
  416. /package/dist-loader/chunks/{popup-placement-animation-WlEXnS85.js → popup-placement-animation-BQdKabXq.js} +0 -0
  417. /package/dist-loader/chunks/{popup-pointer-Ck28WdVP.js → popup-pointer-BNwlPGKA.js} +0 -0
  418. /package/dist-loader/chunks/{required-validator-0XwZtX9k.js → required-validator-DCTovZ6r.js} +0 -0
  419. /package/dist-loader/chunks/{sync-listbox-separators-Ch5krDUs.js → sync-listbox-separators-rbu8jrAa.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-copy-button-BVaOLtYG.js","names":[],"sources":["../../src/events/pk-copy.ts","../../src/utils/copy-to-clipboard.ts","../../src/components/copy-button/pk-copy-button.styles.ts","../../src/components/copy-button/pk-copy-button.ts"],"sourcesContent":["/** Emitted when copy-button successfully copies text. */\nexport class PkCopyEvent extends Event {\n readonly detail: { value: string };\n\n constructor(value: string) {\n super('pk-copy', { bubbles: true, cancelable: false, composed: true });\n this.detail = { value };\n }\n}\n\n/** Emitted when copy-button fails to copy text. */\nexport class PkCopyErrorEvent extends Event {\n constructor() {\n super('pk-copy-error', { bubbles: true, cancelable: false, composed: true });\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-copy': PkCopyEvent;\n 'pk-copy-error': PkCopyErrorEvent;\n }\n}\n","/** Writes text to the clipboard — requires a secure context in most browsers. */\nexport async function copyToClipboard(value: string): Promise<void> {\n await navigator.clipboard.writeText(value);\n}\n\n/** Resolves the string to copy from a `from` selector (from selector). */\nexport function resolveCopyValue(\n root: Document | ShadowRoot,\n from: string,\n fallbackValue: string,\n): string | null {\n if (!from) {\n return fallbackValue || null;\n }\n\n const isProperty = from.includes('.');\n const isAttribute = from.includes('[') && from.includes(']');\n let id = from;\n let field = '';\n\n if (isProperty) {\n [id, field] = from.trim().split('.');\n } else if (isAttribute) {\n [id, field] = from.trim().replace(/\\]$/, '').split('[');\n }\n\n const target = 'getElementById' in root ? root.getElementById(id) : null;\n\n if (!target) {\n return null;\n }\n\n if (isAttribute) {\n return target.getAttribute(field) ?? '';\n }\n\n if (isProperty) {\n const record = target as unknown as Record<string, unknown>;\n const propertyValue = record[field];\n return propertyValue == null ? '' : String(propertyValue);\n }\n\n return target.textContent ?? '';\n}\n","import { css } from 'lit';\n\nexport const pkCopyButtonStyles = css`\n @layer pk-component {\n :host {\n display: inline-block;\n }\n\n /* Match React CopyButton size=\"icon\" — square, no horizontal padding. */\n pk-button::part(base) {\n padding-inline: 0;\n width: var(--pk-btn-height-default);\n min-width: var(--pk-btn-height-default);\n }\n\n /*\n * In-control trailing action (slot=end on pk-input, etc.): same family as\n * combobox expand/clear and image-browser clear — flex-reserved hit box\n * flush to the field edge, glyph sized via --pk-input-decoration-size.\n */\n :host([slot='end']) {\n display: inline-flex;\n align-self: stretch;\n height: auto;\n /* size=none buttons resolve --pk-btn-icon-size: 1em against this. */\n font-size: var(--pk-input-decoration-size, 0.75rem);\n }\n\n :host([slot='end']) pk-button {\n display: flex;\n height: 100%;\n }\n\n :host([slot='end']) pk-button::part(base) {\n box-sizing: border-box;\n width: calc(\n var(--pk-input-decoration-size, 0.75rem) + var(--pk-input-padding-inline, 8px)\n );\n min-width: calc(\n var(--pk-input-decoration-size, 0.75rem) + var(--pk-input-padding-inline, 8px)\n );\n height: 100%;\n min-height: 100%;\n padding: 0;\n border-width: 0;\n border-radius: 0;\n background: transparent;\n color: var(--pk-color-gray-600);\n }\n\n :host([slot='end']) pk-button::part(base):hover:not(:disabled) {\n color: var(--pk-color-gray-800);\n }\n }\n`;\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { customElement, property, state } from '../../decorators.js';\n\nimport { PkElement } from '../../base/pk-element.js';\nimport { PkCopyErrorEvent, PkCopyEvent } from '../../events/pk-copy.js';\nimport { check, renderIconHtml } from '../../icons/index.js';\nimport { copyToClipboard, resolveCopyValue } from '../../utils/copy-to-clipboard.js';\nimport type { PkButtonVariant } from '../button/pk-button.js';\nimport '../button/pk-button.js';\nimport { pkCopyButtonStyles } from './pk-copy-button.styles.js';\n\nconst SUCCESS_ICON = renderIconHtml(check).replace(\n '<svg',\n '<svg slot=\"start\" part=\"success-icon\"',\n);\n\nconst COPIED_RESET_MS = 2000;\n\n/**\n * Copy button — copies text to the clipboard and briefly shows a check icon.\n *\n * Place in `slot=\"end\"` on `<pk-input>` (or another control with an end adornment)\n * for an in-control treatment that matches combobox / image-browser trailing actions.\n *\n * @slot icon - Copy icon (SVG supplied by the consumer)\n *\n * @event pk-copy - Emitted when text is copied successfully\n * @event pk-copy-error - Emitted when copying fails\n *\n * @csspart button - Trigger button\n * @csspart success-icon - Success icon shown after copying\n */\n@customElement('pk-copy-button')\nexport class PkCopyButton extends PkElement {\n static override styles = pkCopyButtonStyles;\n\n @property()\n value = '';\n\n /**\n * Element id to copy from — `from=\"el[attr]\"` or `from=\"el.value\"`.\n * Takes precedence over `value` when set.\n */\n @property()\n from = '';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ reflect: true })\n variant: PkButtonVariant = 'transparent';\n\n @state()\n private copied = false;\n\n private resetTimer?: number;\n\n override disconnectedCallback(): void {\n window.clearTimeout(this.resetTimer);\n super.disconnectedCallback();\n }\n\n private resetCopied = (): void => {\n this.copied = false;\n };\n\n private scheduleReset(): void {\n window.clearTimeout(this.resetTimer);\n this.resetTimer = window.setTimeout(this.resetCopied, COPIED_RESET_MS);\n }\n\n private async handleCopy(): Promise<void> {\n if (this.disabled) {\n return;\n }\n\n const root = this.getRootNode() as Document | ShadowRoot;\n const valueToCopy = resolveCopyValue(root, this.from, this.value);\n\n if (valueToCopy == null || valueToCopy === '') {\n this.dispatchEvent(new PkCopyErrorEvent());\n return;\n }\n\n try {\n await copyToClipboard(valueToCopy);\n this.copied = true;\n this.scheduleReset();\n this.dispatchEvent(new PkCopyEvent(valueToCopy));\n } catch {\n this.dispatchEvent(new PkCopyErrorEvent());\n }\n }\n\n override render() {\n // slot=end → in-control chrome (pk-input end adornment); padless glyph button.\n const inControl = this.getAttribute('slot') === 'end';\n\n return html`\n <pk-button\n part=\"button\"\n variant=${inControl ? 'none' : this.variant}\n size=${inControl ? 'none' : 'default'}\n ?icon=${inControl}\n aria-label=\"Copy\"\n ?disabled=${this.disabled}\n @click=${this.handleCopy}\n >\n ${this.copied\n ? unsafeHTML(SUCCESS_ICON)\n : html`<slot name=\"icon\" slot=\"start\"></slot>`}\n </pk-button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-copy-button': PkCopyButton;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-tiptap-editor-BzZ-J2sl.js","names":[],"sources":["../../src/components/tiptap/tiptap-editor-host.ts","../../src/components/tiptap/tiptap-utils.ts","../../src/components/tiptap/tiptap-toolbar.ts","../../src/components/tiptap/pk-tiptap-editor.styles.ts","../../src/components/tiptap/pk-tiptap-editor.ts"],"sourcesContent":["import { Editor, type Extensions } from '@tiptap/core';\nimport {\n createTiptapExtensions,\n normalizeContentArray,\n valueToContent,\n} from '@verbb/plugin-kit-tiptap-core';\n\nexport function serializeTiptapDocumentContent(content: unknown): string {\n return JSON.stringify(normalizeContentArray(content));\n}\n\n/** Normalize React/HTML `value` into the JSON string the editor stores and emits. */\nexport function serializeTiptapDocumentValue(raw: string | unknown[] | null | undefined): string {\n if (raw == null) {\n return '[]';\n }\n\n if (typeof raw === 'string') {\n return raw;\n }\n\n if (Array.isArray(raw)) {\n return JSON.stringify(raw);\n }\n\n return '[]';\n}\n\nexport function parseTiptapDocumentValue(raw: string | unknown[] | null | undefined): unknown[] {\n if (raw == null || raw === '') {\n return [];\n }\n\n // React often passes a document array prop — accept it without JSON.parse.\n if (Array.isArray(raw)) {\n return raw;\n }\n\n if (typeof raw !== 'string') {\n return [];\n }\n\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\nexport type TiptapEditorHostOptions = {\n element: HTMLElement;\n extensions?: Extensions;\n content: unknown;\n editable: boolean;\n trailingCursorText?: string;\n minHeight?: string;\n onUpdate?: (content: unknown[]) => void;\n};\n\nexport class TiptapEditorHost {\n editor: Editor | null = null;\n\n private lastEmitted: string | null = null;\n\n /** Skip TipTap `onUpdate` while applying controlled prop content — otherwise setContent\n * re-emits pk-change → React setValue → value prop → setContent … forever. */\n private suppressUpdateEmission = false;\n\n mount({\n element,\n extensions,\n content,\n editable,\n trailingCursorText = '\\u2060',\n minHeight,\n onUpdate,\n }: TiptapEditorHostOptions): void {\n const doc = valueToContent(content, { trailingCursorText });\n\n this.editor = new Editor({\n element,\n extensions: extensions ?? createTiptapExtensions({ trailingCursorText }),\n content: doc,\n editable,\n onUpdate: ({ editor }) => {\n const normalized = normalizeContentArray(editor.getJSON().content);\n const serialized = JSON.stringify(normalized);\n this.lastEmitted = serialized;\n\n if (this.suppressUpdateEmission) {\n return;\n }\n\n onUpdate?.(normalized);\n },\n });\n\n if (minHeight) {\n this.editor.view.dom.style.minHeight = minHeight;\n }\n }\n\n setContent(content: unknown, options: { trailingCursorText?: string; respectFocus?: boolean } = {}): void {\n if (!this.editor) {\n return;\n }\n\n const { trailingCursorText = '\\u2060', respectFocus = true } = options;\n\n if (respectFocus && this.editor.isFocused) {\n return;\n }\n\n const doc = valueToContent(content, { trailingCursorText });\n const incoming = JSON.stringify(doc?.content ?? []);\n const current = JSON.stringify(this.editor.getJSON().content ?? []);\n\n if (incoming === current || incoming === this.lastEmitted) {\n return;\n }\n\n this.suppressUpdateEmission = true;\n try {\n this.editor.commands.setContent(doc ?? { type: 'doc', content: [] });\n } finally {\n this.suppressUpdateEmission = false;\n }\n }\n\n destroy(): void {\n this.editor?.destroy();\n this.editor = null;\n this.lastEmitted = null;\n this.suppressUpdateEmission = false;\n }\n}\n","import type {\n ElementSelectorHost,\n LinkOptionsInput,\n ToolbarNode,\n} from '@verbb/plugin-kit-tiptap-core';\nimport { parseToolbarConfig } from '@verbb/plugin-kit-tiptap-core';\n\ndeclare global {\n interface Window {\n Craft?: {\n createElementSelectorModal?: ElementSelectorHost['openElementSelector'];\n };\n }\n}\n\nexport function createCraftElementSelectorHost(): ElementSelectorHost {\n return {\n openElementSelector: (elementType, options) => {\n const open = window.Craft?.createElementSelectorModal;\n\n if (!open) {\n throw new Error('Craft element selector is not available in this environment.');\n }\n\n open(elementType, options);\n },\n };\n}\n\nexport function parseLinkOptionsAttribute(raw: string | null): LinkOptionsInput | undefined {\n if (!raw) {\n return undefined;\n }\n\n try {\n return JSON.parse(raw) as LinkOptionsInput;\n } catch {\n return undefined;\n }\n}\n\nexport function parseButtonsAttribute(raw: string | null | undefined): string[] {\n if (!raw) {\n return ['bold', 'italic'];\n }\n\n return raw\n .split(',')\n .map((button) => button.trim())\n .filter(Boolean);\n}\n\nexport function parseToolbarAttribute(\n toolbarRaw: string | ToolbarNode[] | null | undefined,\n buttonsRaw: string | string[] | null | undefined,\n): ToolbarNode[] {\n if (Array.isArray(toolbarRaw)) {\n return parseToolbarConfig(toolbarRaw);\n }\n\n if (typeof toolbarRaw === 'string' && toolbarRaw.trim()) {\n return parseToolbarConfig(toolbarRaw);\n }\n\n if (Array.isArray(buttonsRaw)) {\n return parseToolbarConfig(buttonsRaw.join(','));\n }\n\n return parseToolbarConfig(buttonsRaw ?? 'bold,italic');\n}\n","import { getRegisteredTiptapToolbarControl } from '@verbb/plugin-kit-tiptap-core';\n\nimport {\n alignCenter,\n alignJustify,\n alignLeft,\n alignRight,\n arrowRotateLeft,\n arrowRotateRight,\n bold,\n bracketsCurly,\n chevronDown,\n code,\n fileDashedLine,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n heading,\n highlighter,\n italic,\n link,\n listOl,\n listUl,\n minus,\n paragraph,\n quoteRight,\n smallCaps,\n strikethrough,\n subscript,\n superscript,\n table,\n textSlash,\n underline,\n renderIconHtml,\n} from '../../icons/index.js';\n\nexport const TOOLBAR_CHEVRON_HTML = renderIconHtml(chevronDown);\n\nexport const TOOLBAR_ICONS: Record<string, string> = {\n bold: renderIconHtml(bold),\n italic: renderIconHtml(italic),\n underline: renderIconHtml(underline),\n strikethrough: renderIconHtml(strikethrough),\n subscript: renderIconHtml(subscript),\n superscript: renderIconHtml(superscript),\n 'small-caps': renderIconHtml(smallCaps),\n code: renderIconHtml(bracketsCurly),\n 'code-block': renderIconHtml(code),\n highlight: renderIconHtml(highlighter),\n h1: renderIconHtml(h1),\n h2: renderIconHtml(h2),\n h3: renderIconHtml(h3),\n h4: renderIconHtml(h4),\n h5: renderIconHtml(h5),\n h6: renderIconHtml(h6),\n heading: renderIconHtml(heading),\n paragraph: renderIconHtml(paragraph),\n 'unordered-list': renderIconHtml(listUl),\n 'ordered-list': renderIconHtml(listOl),\n blockquote: renderIconHtml(quoteRight),\n 'align-left': renderIconHtml(alignLeft),\n 'align-center': renderIconHtml(alignCenter),\n 'align-right': renderIconHtml(alignRight),\n 'align-justify': renderIconHtml(alignJustify),\n 'clear-format': renderIconHtml(textSlash),\n hr: renderIconHtml(minus),\n 'line-break': renderIconHtml(fileDashedLine),\n link: renderIconHtml(link),\n table: renderIconHtml(table),\n undo: renderIconHtml(arrowRotateLeft),\n redo: renderIconHtml(arrowRotateRight),\n};\n\nexport const TOOLBAR_LABELS: Record<string, string> = {\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript',\n 'small-caps': 'Small caps',\n 'font-family': 'Font family',\n 'font-size': 'Font size',\n 'text-color': 'Text and background color',\n 'line-height': 'Line height',\n code: 'Inline code',\n 'code-block': 'Code block',\n highlight: 'Highlight',\n h1: 'Heading 1',\n h2: 'Heading 2',\n h3: 'Heading 3',\n h4: 'Heading 4',\n h5: 'Heading 5',\n h6: 'Heading 6',\n paragraph: 'Paragraph',\n 'unordered-list': 'Bullet list',\n 'ordered-list': 'Numbered list',\n blockquote: 'Blockquote',\n 'align-left': 'Align left',\n 'align-center': 'Align center',\n 'align-right': 'Align right',\n 'align-justify': 'Justify',\n 'clear-format': 'Clear format',\n hr: 'Horizontal rule',\n 'line-break': 'Line break',\n link: 'Link',\n table: 'Table',\n undo: 'Undo',\n redo: 'Redo',\n};\n\nexport function getToolbarMenuItemLabel(buttonName: string): string {\n return TOOLBAR_LABELS[buttonName]\n ?? getRegisteredTiptapToolbarControl(buttonName)?.label\n ?? buttonName;\n}\n\nexport function getToolbarButtonIcon(buttonName: string): string | undefined {\n const registeredIcon = getRegisteredTiptapToolbarControl(buttonName)?.icon;\n\n return TOOLBAR_ICONS[buttonName]\n ?? (registeredIcon ? renderIconHtml(registeredIcon) : undefined);\n}\n\n/** Prefix icon for `pk-dropdown-item` — SVG must carry `slot=\"prefix\"` directly. */\nexport function createToolbarPrefixIcon(buttonName: string): SVGSVGElement | null {\n const iconHtml = getToolbarButtonIcon(buttonName);\n\n if (!iconHtml) {\n return null;\n }\n\n const template = document.createElement('template');\n template.innerHTML = iconHtml.trim();\n const icon = template.content.firstElementChild;\n\n if (!(icon instanceof SVGSVGElement)) {\n return null;\n }\n\n icon.setAttribute('slot', 'prefix');\n icon.setAttribute('aria-hidden', 'true');\n icon.setAttribute('width', '12');\n icon.setAttribute('height', '12');\n icon.classList.add('pk-dropdown-item__prefix-icon');\n\n return icon;\n}\n","import { css } from 'lit';\n\nexport const pkTiptapEditorStyles = css`\n @layer pk-component {\n :host {\n display: block;\n width: 100%;\n font-family: var(--pk-font-family);\n }\n\n .shell {\n overflow: hidden;\n border: var(--pk-input-border);\n border-radius: var(--pk-radius-md);\n background: #fff;\n }\n\n :host([invalid]) .shell,\n :host(:state(user-invalid)) .shell {\n border-color: var(--pk-color-rose-600);\n }\n\n .toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n padding: 0.25rem 0.5rem;\n border-bottom: 1px solid rgba(96, 125, 159, 0.4);\n background: #fff;\n box-shadow: 0 2px 3px rgba(49, 49, 93, 0.07);\n }\n\n .toolbar-item {\n display: inline-flex;\n }\n\n .toolbar-item pk-tooltip {\n display: contents;\n }\n\n .toolbar-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: var(--pk-radius-md);\n background: transparent;\n color: #1c2e36;\n cursor: pointer;\n }\n\n .toolbar-btn:hover:not(:disabled) {\n background: rgb(241, 245, 249);\n }\n\n .toolbar-btn[data-state='active'] {\n background: rgb(226, 232, 240);\n }\n\n .toolbar-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .toolbar-btn svg {\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n }\n\n .toolbar-btn--menu {\n width: auto;\n min-width: 2rem;\n gap: 0.125rem;\n padding: 0 0.375rem;\n }\n\n .toolbar-btn__trigger-label {\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n }\n\n .toolbar-btn__chevron {\n display: inline-flex;\n flex-shrink: 0;\n opacity: 0.7;\n }\n\n .toolbar-btn__chevron svg {\n width: 0.5rem;\n height: 0.5rem;\n }\n\n .toolbar-separator {\n align-self: center;\n flex-shrink: 0;\n width: 1px;\n height: 1.25rem;\n margin: 0 0.125rem;\n background: rgba(96, 125, 159, 0.35);\n }\n\n .toolbar-btn__label {\n font-size: 0.625rem;\n font-weight: 600;\n line-height: 1;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n }\n\n .toolbar-btn--text-style {\n max-width: 9rem;\n padding-inline: 0.5rem;\n }\n\n .toolbar-btn__text-style-value {\n overflow: hidden;\n font-size: var(--pk-font-size-xs);\n line-height: 1;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .toolbar-btn--color .toolbar-btn__text-style-value {\n min-width: 1rem;\n border-bottom: 2px solid var(--text-style-trigger-color, currentColor);\n color: var(--text-style-trigger-color, currentColor);\n font-weight: 700;\n text-align: center;\n }\n\n pk-dropdown-menu.text-style-palette::part(panel) {\n display: grid;\n grid-template-columns: repeat(5, 2rem);\n gap: 0.625rem 0.75rem;\n width: max-content;\n min-width: 0;\n padding: 1rem;\n }\n\n .text-style-palette__label {\n grid-column: 1 / -1;\n color: var(--pk-color-gray-900);\n }\n\n .text-style-palette__label::part(label) {\n padding: 0 0 0.125rem;\n font-size: var(--pk-font-size-base);\n font-weight: 600;\n }\n\n .text-style-palette__label--highlight {\n margin-top: 0.375rem;\n }\n\n .text-style-palette__option {\n width: 2rem;\n height: 2rem;\n --pk-dropdown-item-gap: 0;\n --pk-dropdown-item-icon-size: 1.625rem;\n }\n\n .text-style-palette__option::part(item) {\n justify-content: center;\n width: 2rem;\n height: 2rem;\n min-height: 0;\n padding: 0;\n border-radius: 50%;\n background: transparent;\n }\n\n .text-style-palette__option:hover::part(item),\n .text-style-palette__option:focus-within::part(item),\n .text-style-palette__option[data-highlighted]::part(item),\n .text-style-palette__option[checked]::part(item) {\n background: transparent;\n }\n\n .text-style-palette__option::part(prefix) {\n width: 1.625rem;\n height: 1.625rem;\n }\n\n .text-style-palette__option::part(label) {\n position: absolute;\n }\n\n .text-style-palette__option::part(check) {\n display: none;\n }\n\n .text-style-palette__swatch {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.625rem;\n height: 1.625rem;\n box-sizing: border-box;\n border: 1px solid rgba(15, 23, 42, 0.16);\n border-radius: 50%;\n }\n\n /* Keep the state treatment concentric with the slotted swatch. The\n dropdown item's shadow button is wider than its prefix in some hosts. */\n .text-style-palette__option:hover .text-style-palette__swatch,\n .text-style-palette__option:focus-within .text-style-palette__swatch,\n .text-style-palette__option[data-highlighted] .text-style-palette__swatch,\n .text-style-palette__option[checked] .text-style-palette__swatch {\n box-shadow: 0 0 0 0.25rem var(--pk-color-slate-100);\n }\n\n .text-style-palette__swatch--text {\n border-color: var(--text-style-swatch, rgba(15, 23, 42, 0.35));\n color: var(--text-style-swatch, #1f2937);\n font-size: var(--pk-font-size-base);\n font-weight: 500;\n line-height: 1;\n }\n\n .text-style-palette__swatch--highlight {\n background: var(--text-style-swatch, #fff);\n }\n\n .text-style-palette__accessible-label {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n .text-style-palette pk-tooltip {\n display: contents;\n }\n\n /* Full toolbar replace (slot=toolbar on host when hasCustomToolbar). */\n .toolbar ::slotted([slot='toolbar']) {\n display: contents;\n }\n\n /* Append lane inside the stock toolbar — one flex item per slotted root (same gap). */\n .toolbar ::slotted([slot='toolbar-end']) {\n display: inline-flex;\n align-items: center;\n }\n\n .editor-mount {\n position: relative;\n }\n\n .content-error {\n display: flex;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--pk-color-rose-200);\n background: var(--pk-color-rose-50);\n color: var(--pk-color-rose-800);\n font-size: var(--pk-font-size-sm);\n }\n\n .mirror-input {\n display: none;\n }\n\n /* No trigger slot — collapse the host so it does not reserve shell space.\n Toolbar refresh while open is still gated by linkDialogBusy / open. */\n .link-dialog {\n display: contents;\n }\n\n .link-dialog__fields {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .link-bubble {\n position: absolute;\n z-index: 250;\n display: flex;\n align-items: center;\n gap: 0;\n width: max-content;\n max-width: calc(100% - 1rem);\n padding: 0;\n border: 0;\n border-radius: var(--pk-radius-md);\n background: #1c2e36;\n color: #fff;\n font-size: 12px;\n line-height: 1.5;\n overflow: visible;\n pointer-events: auto;\n white-space: nowrap;\n }\n\n .link-bubble__arrow {\n position: absolute;\n left: 50%;\n bottom: -0.25rem;\n width: 0.5rem;\n height: 0.5rem;\n background: #1c2e36;\n transform: translateX(-50%) rotate(45deg);\n pointer-events: none;\n }\n\n .link-bubble__url,\n .link-bubble__action {\n box-sizing: border-box;\n padding: 6px 8px;\n font-size: 12px;\n line-height: 1.5;\n }\n\n .link-bubble__url {\n display: inline-flex;\n align-items: center;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .link-bubble__divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 12px;\n background: #616d73;\n }\n\n .link-bubble__action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n border: 0;\n border-radius: var(--pk-radius-sm);\n background: transparent;\n color: #fff;\n font-family: inherit;\n font-weight: inherit;\n white-space: nowrap;\n cursor: pointer;\n outline: none;\n appearance: none;\n -webkit-appearance: none;\n min-height: 0;\n transition: color 0.15s ease;\n }\n\n .link-bubble__action:hover {\n color: rgb(255 255 255 / 0.7);\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { customElement, property, query, state } from '../../decorators.js';\nimport type { PropertyValues } from 'lit';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport {\n applyLinkToEditor,\n createTiptapExtensions,\n getCraftLinkOptions,\n getFatalTiptapContentError,\n getRegisteredTiptapToolbarControl,\n getLinkEditState,\n getLinkOptionsElementSiteId,\n getLinkOpenInNewTab,\n getSelectedText,\n getToolbarGroupDefaultIcon,\n getToolbarGroupMenuItems,\n getToolbarGroupTriggerState,\n isFormattingToolbarPreset,\n isHeadingsOnlyToolbarPreset,\n isTiptapButtonActive,\n isToolbarButtonActive,\n openCraftElementLinkSelector,\n runToolbarButton,\n resolveTiptapTextStyleToolbarConfig,\n toolbarIncludesButton,\n unsetLinkFromEditor,\n type LinkElementConfig,\n type LinkOptionsInput,\n type ToolbarGroup,\n type ToolbarNode,\n type TiptapTextStyleOption,\n type TiptapTextStyleToolbarConfig,\n} from '@verbb/plugin-kit-tiptap-core';\nimport { getMarkRange, posToDOMRect } from '@tiptap/core';\n\nimport { formControlStyles } from '../../base/form-control.styles.js';\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { uniqueId } from '../../a11y/focus.js';\nimport { MirrorValidator } from '../../validators/index.js';\nimport {\n link,\n triangleExclamation,\n renderIconHtml,\n} from '../../icons/index.js';\n\nimport '../button/pk-button.js';\nimport '../checkbox/pk-checkbox.js';\nimport '../dialog/pk-dialog.js';\nimport '../dropdown-menu/pk-dropdown-item.js';\nimport '../dropdown-menu/pk-dropdown-label.js';\nimport '../field/pk-field.js';\nimport '../input/pk-input.js';\nimport '../dropdown-menu/pk-dropdown-menu.js';\nimport '../dropdown-menu/pk-dropdown-separator.js';\nimport '../tooltip/pk-tooltip.js';\nimport type { PkButton } from '../button/pk-button.js';\nimport type { PkCheckbox } from '../checkbox/pk-checkbox.js';\nimport type { PkDialog } from '../dialog/pk-dialog.js';\nimport type { PkDropdownItem } from '../dropdown-menu/pk-dropdown-item.js';\nimport type { PkDropdownMenu } from '../dropdown-menu/pk-dropdown-menu.js';\nimport type { PkInput } from '../input/pk-input.js';\nimport { TiptapEditorHost, parseTiptapDocumentValue, serializeTiptapDocumentContent, serializeTiptapDocumentValue } from './tiptap-editor-host.js';\nimport { createCraftElementSelectorHost, parseLinkOptionsAttribute, parseToolbarAttribute } from './tiptap-utils.js';\nimport {\n TOOLBAR_CHEVRON_HTML,\n TOOLBAR_ICONS,\n TOOLBAR_LABELS,\n createToolbarPrefixIcon,\n getToolbarButtonIcon,\n getToolbarMenuItemLabel,\n} from './tiptap-toolbar.js';\nimport { createVariableTagDomNodeView } from './variable-tag-node-view.js';\nimport { pkTiptapEditorStyles } from './pk-tiptap-editor.styles.js';\nimport { tiptapProseMirrorStyles } from './tiptap.styles.js';\n\ntype LinkDialogSeed = {\n url?: string;\n text?: string;\n openInNewTab?: boolean;\n from?: number;\n to?: number;\n};\n\n/**\n * TipTap document editor with a Craft-styled toolbar.\n *\n * @slot toolbar - Replace the entire default toolbar (opt-in via light-DOM presence).\n * @slot toolbar-end - Append controls after stock toolbar buttons (same flex gap).\n */\n@customElement('pk-tiptap-editor')\nexport class PkTiptapEditor extends PkFormAssociatedElement {\n static override styles = [formControlStyles, pkTiptapEditorStyles, tiptapProseMirrorStyles];\n\n static override get validators() {\n return [...super.validators, MirrorValidator()];\n }\n\n override assumeInteractionOn = ['blur', 'input'];\n\n @query('.editor-mount')\n private editorMount!: HTMLDivElement;\n\n @query('.mirror-input')\n override input!: HTMLInputElement;\n\n @query('.link-dialog')\n private linkDialog?: PkDialog;\n\n @query('pk-input.link-dialog__url-input')\n private linkUrlInput?: PkInput;\n\n @query('pk-input.link-dialog__text-input')\n private linkTextInput?: PkInput;\n\n @query('pk-checkbox')\n private linkNewTabCheckbox?: PkCheckbox;\n\n @query('pk-button.link-dialog__submit')\n private linkSubmitButton?: PkButton;\n\n private readonly linkUrlInputId = uniqueId('pk-tiptap-link-url');\n\n private readonly linkTextInputId = uniqueId('pk-tiptap-link-text');\n\n private readonly host = new TiptapEditorHost();\n\n private _value: string | null = null;\n\n /**\n * Flat toolbar button list. HTML uses a comma-separated attribute; React may\n * pass a `string[]`. Named `buttons` (not `buttonsAttr`) so React can set the\n * property — a getter-only `buttons` previously threw on assign.\n */\n @property({\n attribute: 'buttons',\n converter: {\n fromAttribute: (value: string | null) => value ?? 'bold,italic',\n toAttribute: (value: string | string[] | null | undefined) => {\n if (value == null) {\n return 'bold,italic';\n }\n\n return Array.isArray(value) ? value.join(',') : value;\n },\n },\n })\n buttons: string | string[] = 'bold,italic';\n\n /** Structured toolbar config — JSON string attribute, or a node array from React. */\n @property({\n attribute: 'toolbar',\n converter: {\n fromAttribute: (value: string | null) => value,\n toAttribute: (value: string | ToolbarNode[] | null | undefined) => {\n if (value == null) {\n return null;\n }\n\n return typeof value === 'string' ? value : JSON.stringify(value);\n },\n },\n })\n toolbar: string | ToolbarNode[] | null = null;\n\n /** Values shown by the optional TextStyle toolbar controls. */\n @property({\n attribute: 'text-style-options',\n converter: {\n fromAttribute: (value: string | null) => {\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value) as TiptapTextStyleToolbarConfig;\n } catch {\n return null;\n }\n },\n toAttribute: (value: TiptapTextStyleToolbarConfig | null | undefined) => (\n value ? JSON.stringify(value) : null\n ),\n },\n })\n textStyleOptions: TiptapTextStyleToolbarConfig | null = null;\n\n @property({ attribute: 'link-options' })\n linkOptions: string | null = null;\n\n @property({ attribute: 'link-selector-storage-key-prefix' })\n linkSelectorStorageKeyPrefix?: string;\n\n @property({ type: Number })\n rows = 4;\n\n @property()\n placeholder = '';\n\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n /**\n * Formie / React configure bridge — called when a chip is activated for editing.\n * Prefer this over listening for `pk-variable-tag-configure` from React.\n */\n @property({ attribute: false })\n variableTagConfigure: ((detail: import('./variable-tag-node-view.js').PkVariableTagConfigureDetail) => void) | null = null;\n\n @property({ attribute: 'invalid-content-message' })\n invalidContentMessage = '';\n\n /** Show `pk-tooltip` hints on toolbar buttons (default: on). */\n @property({ type: Boolean, attribute: 'toolbar-tooltips' })\n toolbarTooltips = true;\n\n private linkDialogBusy = false;\n\n private linkDialogSeed: LinkDialogSeed = {};\n\n @state()\n private linkDialogTitle = 'Insert Link';\n\n @state()\n private linkDialogSubmitLabel = 'Insert';\n\n @state()\n private linkDialogMounted = false;\n\n @state()\n private linkBubbleVisible = false;\n\n @state()\n private linkBubbleHref = '';\n\n @state()\n private linkBubbleTop = 0;\n\n @state()\n private linkBubbleLeft = 0;\n\n private hasCustomToolbar = false;\n\n private readonly linkButtonId = uniqueId('pk-tiptap-link-btn');\n\n private readonly toolbarButtonIds = new Map<string, string>();\n\n private readonly toolbarGroupIds = new Map<string, string>();\n\n private selectionListenerAttached = false;\n\n get value(): string {\n if (this.valueHasChanged) {\n return this._value ?? '[]';\n }\n\n return this._value ?? this.defaultValue ?? '[]';\n }\n\n /**\n * Document JSON string. Also accepts a TipTap node array (common from React)\n * and serializes it — arrays previously bypassed JSON.parse and mounted empty.\n */\n @state()\n set value(val: string | unknown[] | null) {\n const next = serializeTiptapDocumentValue(val);\n\n if (this._value === next) {\n return;\n }\n\n this.valueHasChanged = true;\n this._value = next;\n }\n\n @property({ attribute: 'value', reflect: true })\n defaultValue: string | null = '[]';\n\n get editor() {\n return this.host.editor;\n }\n\n get toolbarNodes(): ToolbarNode[] {\n const buttonsRaw = Array.isArray(this.buttons) ? this.buttons.join(',') : this.buttons;\n\n return parseToolbarAttribute(this.toolbar, buttonsRaw)\n .filter((node) => node.type !== 'button' || node.name !== 'variableTag');\n }\n\n /** Resolved flat button names from the active toolbar config. */\n get buttonNames(): string[] {\n return this.toolbarNodes\n .filter((node): node is Extract<ToolbarNode, { type: 'button' }> => node.type === 'button')\n .map((node) => node.name);\n }\n\n private toolbarHasLink(): boolean {\n return toolbarIncludesButton(this.toolbarNodes, 'link');\n }\n\n private resolveLinkOptions(): LinkOptionsInput | undefined {\n return parseLinkOptionsAttribute(this.linkOptions);\n }\n\n private get contentError(): string {\n return this.resolveContentError();\n }\n\n protected override syncFormValue(): void {\n this.setValue(this.value || '[]');\n\n if (this.input) {\n this.input.value = this.value || '[]';\n }\n }\n\n protected override resetToDefaultValue(): void {\n this.valueHasChanged = false;\n this._value = null;\n this.syncEditorContent();\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (typeof state === 'string') {\n this.value = state;\n this.syncEditorContent();\n }\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.hasCustomToolbar = Boolean(this.querySelector('[slot=\"toolbar\"]'));\n }\n\n override disconnectedCallback(): void {\n this.linkDialog?.forceOverlayReset();\n this.linkDialogBusy = false;\n this.host.destroy();\n this.selectionListenerAttached = false;\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('value') && !changed.has('defaultValue')) {\n this.syncEditorContent();\n }\n\n if (changed.has('defaultValue') && !this.valueHasChanged) {\n this.syncEditorContent();\n }\n\n if (changed.has('disabled') || changed.has('readonly')) {\n this.host.editor?.setEditable(!this.disabled && !this.readonly);\n }\n\n super.updated(changed);\n }\n\n override firstUpdated(): void {\n queueMicrotask(() => {\n this.mountEditor();\n this.syncFormValue();\n });\n }\n\n private resolveContentError(): string {\n const detected = getFatalTiptapContentError(this.value);\n return detected ? (this.invalidContentMessage || detected) : '';\n }\n\n private mountEditor(): void {\n const content = this.contentError ? null : parseTiptapDocumentValue(this.value);\n const normalizedRows = Math.max(1, Number(this.rows || 0));\n const minHeight = `${(normalizedRows * 24) + 32}px`;\n\n this.host.mount({\n element: this.editorMount,\n extensions: createTiptapExtensions({\n trailingCursorText: '\\u2060',\n variableTagNodeView: createVariableTagDomNodeView(),\n }),\n content,\n editable: !this.disabled && !this.readonly && !this.contentError,\n trailingCursorText: '\\u2060',\n minHeight,\n onUpdate: (nextContent) => {\n const serialized = serializeTiptapDocumentContent(nextContent);\n this.value = serialized;\n\n if (this.input) {\n this.input.value = serialized;\n }\n\n this.syncFormValue();\n // Emit JSON string (matches `value` prop) — arrays caused Formie controlled\n // fields to write mismatched types and re-enter sync forever.\n this.emitValueChange(serialized);\n },\n });\n\n queueMicrotask(() => {\n this.attachSelectionListeners();\n // Visibility predicates need the mounted Editor instance before the\n // first custom-control render can be authoritative.\n this.requestUpdate();\n });\n }\n\n private attachSelectionListeners(): void {\n const editor = this.host.editor;\n\n if (!editor || this.selectionListenerAttached) {\n return;\n }\n\n const refreshToolbar = () => {\n if (this.linkDialogBusy || this.linkDialog?.open) {\n this.linkBubbleVisible = false;\n return;\n }\n\n this.updateLinkBubble();\n\n queueMicrotask(() => {\n if (this.isConnected && !this.linkDialogBusy && !this.linkDialog?.open) {\n this.requestUpdate();\n }\n });\n };\n\n editor.on('selectionUpdate', refreshToolbar);\n editor.on('transaction', refreshToolbar);\n editor.on('focus', refreshToolbar);\n editor.on('blur', () => {\n this.linkBubbleVisible = false;\n this.requestUpdate();\n });\n this.selectionListenerAttached = true;\n }\n\n private updateLinkBubble(): void {\n const editor = this.host.editor;\n\n if (\n !editor\n || this.disabled\n || this.readonly\n || this.linkDialogBusy\n || this.linkDialog?.open\n || !editor.isFocused\n || !editor.isActive('link')\n ) {\n this.linkBubbleVisible = false;\n return;\n }\n\n const linkType = editor.state.schema.marks.link;\n const range = getMarkRange(editor.state.selection.$from, linkType);\n\n if (!range) {\n this.linkBubbleVisible = false;\n return;\n }\n\n const linkRect = posToDOMRect(editor.view, range.from, range.to);\n const mountRect = this.editorMount.getBoundingClientRect();\n const bubbleOffset = 8;\n\n this.linkBubbleHref = String(editor.getAttributes('link').href ?? '');\n this.linkBubbleTop = linkRect.top - mountRect.top - bubbleOffset;\n this.linkBubbleLeft = linkRect.left - mountRect.left + (linkRect.width / 2);\n this.linkBubbleVisible = true;\n }\n\n private handleLinkBubbleEdit = (event: Event): void => {\n event.preventDefault();\n\n const editor = this.host.editor;\n\n if (!editor) {\n return;\n }\n\n const state = getLinkEditState(editor);\n this.linkBubbleVisible = false;\n this.openLinkDialog({\n url: state.href,\n text: state.text,\n openInNewTab: state.openInNewTab,\n from: state.from,\n to: state.to,\n });\n };\n\n private handleLinkBubbleUnlink = (event: Event): void => {\n event.preventDefault();\n\n const editor = this.host.editor;\n\n if (!editor) {\n return;\n }\n\n unsetLinkFromEditor(editor);\n this.linkBubbleVisible = false;\n };\n\n private renderLinkBubble() {\n return html`\n <div\n class=\"link-bubble\"\n role=\"toolbar\"\n aria-label=\"Link actions\"\n tabindex=\"0\"\n style=${`top:${this.linkBubbleTop}px;left:${this.linkBubbleLeft}px;transform:translate(-50%, -100%);`}\n >\n <span class=\"link-bubble__arrow\" aria-hidden=\"true\"></span>\n <span class=\"link-bubble__url\">${this.linkBubbleHref}</span>\n <span class=\"link-bubble__divider\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n class=\"link-bubble__action\"\n @mousedown=${(event: Event) => event.preventDefault()}\n @click=${this.handleLinkBubbleEdit}\n >Edit</button>\n <span class=\"link-bubble__divider\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n class=\"link-bubble__action\"\n @mousedown=${(event: Event) => event.preventDefault()}\n @click=${this.handleLinkBubbleUnlink}\n >Unlink</button>\n </div>\n `;\n }\n\n private syncEditorContent(): void {\n const content = this.contentError ? null : parseTiptapDocumentValue(this.value);\n this.host.setContent(content, { trailingCursorText: '\\u2060' });\n\n if (this.input) {\n this.input.value = this.value || '[]';\n }\n }\n\n private emitValueChange(value: string): void {\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value },\n bubbles: true,\n composed: true,\n }));\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleToolbarCommand(buttonName: string): void {\n const editor = this.host.editor;\n\n if (!editor) {\n return;\n }\n\n runToolbarButton(editor, buttonName);\n }\n\n private openLinkMenu(): void {\n const editor = this.host.editor;\n\n if (!editor) {\n return;\n }\n\n const selected = getSelectedText(editor);\n const { from, to } = editor.state.selection;\n\n const menu = this.shadowRoot?.querySelector<PkDropdownMenu>(\n `pk-dropdown-menu[for=\"${this.linkButtonId}\"]`,\n );\n\n void (async () => {\n await menu?.whenClosed();\n this.openLinkDialog(from !== to ? { text: selected, from, to } : undefined);\n })();\n }\n\n private openLinkDialog(initial?: LinkDialogSeed): void {\n const editor = this.host.editor;\n const url = initial?.url ?? '';\n\n this.linkDialogBusy = true;\n this.linkBubbleVisible = false;\n this.linkDialogSeed = {\n url,\n text: initial?.text ?? '',\n openInNewTab: initial?.openInNewTab ?? (editor ? getLinkOpenInNewTab(editor) : false),\n from: initial?.from,\n to: initial?.to,\n };\n this.linkDialogTitle = url.trim() ? 'Update Link' : 'Insert Link';\n this.linkDialogSubmitLabel = url.trim() ? 'Update' : 'Insert';\n\n if (!this.linkDialogMounted) {\n this.linkDialogMounted = true;\n }\n\n // Mount first, then open after the dropdown has fully demoted (caller awaits\n // whenClosed). Busy flag still suppresses toolbar refresh during show animation.\n queueMicrotask(async () => {\n await this.updateComplete;\n await this.linkDialog?.updateComplete;\n this.syncLinkDialogFields();\n // Prefer show() over flipping `open` before firstUpdated — that path only\n // call showModal() and skips PkShowEvent / enter animation.\n await this.linkDialog?.show();\n });\n }\n\n private closeLinkDialog(): void {\n void this.linkDialog?.hide('close-button');\n }\n\n private handleLinkDialogAfterHide = (): void => {\n this.linkDialogBusy = false;\n\n queueMicrotask(() => {\n if (this.isConnected && !this.linkDialog?.open) {\n this.requestUpdate();\n }\n });\n };\n\n private syncLinkDialogFields(): void {\n const seed = this.linkDialogSeed;\n\n if (this.linkUrlInput) {\n this.linkUrlInput.value = seed.url ?? '';\n }\n\n if (this.linkTextInput) {\n this.linkTextInput.value = seed.text ?? '';\n }\n\n if (this.linkNewTabCheckbox) {\n this.linkNewTabCheckbox.checked = Boolean(seed.openInNewTab);\n }\n\n this.updateLinkDialogSubmitState();\n }\n\n private updateLinkDialogSubmitState(): void {\n const canSubmit = Boolean(this.linkUrlInput?.value.trim());\n\n if (this.linkSubmitButton) {\n this.linkSubmitButton.disabled = !canSubmit;\n }\n }\n\n private handleLinkUrlInput = (): void => {\n this.updateLinkDialogSubmitState();\n };\n\n private handleLinkDialogKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter') {\n return;\n }\n\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof HTMLElement && node.localName === 'pk-checkbox')) {\n return;\n }\n\n if (path.some((node) => node instanceof HTMLElement && node.localName === 'pk-button')) {\n return;\n }\n\n if (path.some((node) => node instanceof HTMLButtonElement)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.submitLinkDialog();\n };\n\n private handleLinkDialogSubmit = (): void => {\n this.submitLinkDialog();\n };\n\n private submitLinkDialog(): void {\n const editor = this.host.editor;\n const url = this.linkUrlInput?.value.trim() ?? '';\n\n if (!editor || !url) {\n return;\n }\n\n applyLinkToEditor(editor, {\n url,\n text: this.linkTextInput?.value ?? '',\n openInNewTab: Boolean(this.linkNewTabCheckbox?.checked),\n from: this.linkDialogSeed.from,\n to: this.linkDialogSeed.to,\n });\n\n this.closeLinkDialog();\n }\n\n private isLinkActive(): boolean {\n const editor = this.host.editor;\n return editor ? isTiptapButtonActive(editor, 'link') : false;\n }\n\n private renderLinkDialog() {\n return html`\n <pk-dialog\n class=\"link-dialog\"\n size=\"wide\"\n label=${this.linkDialogTitle}\n @pk-after-hide=${this.handleLinkDialogAfterHide}\n @keydown=${this.handleLinkDialogKeyDown}\n >\n <div class=\"link-dialog__fields\">\n <pk-field label=\"URL\" required .for=${this.linkUrlInputId}>\n <pk-input\n id=${this.linkUrlInputId}\n class=\"link-dialog__url-input\"\n type=\"url\"\n placeholder=\"https://\"\n autofocus\n @input=${this.handleLinkUrlInput}\n ></pk-input>\n </pk-field>\n <pk-field label=\"Text\" .for=${this.linkTextInputId}>\n <pk-input\n id=${this.linkTextInputId}\n class=\"link-dialog__text-input\"\n type=\"text\"\n ></pk-input>\n </pk-field>\n <pk-checkbox>Open link in new tab</pk-checkbox>\n </div>\n <pk-button slot=\"footer\" data-dialog-close>Cancel</pk-button>\n <pk-button\n slot=\"footer\"\n class=\"link-dialog__submit\"\n variant=\"primary\"\n disabled\n @click=${this.handleLinkDialogSubmit}\n >\n ${this.linkDialogSubmitLabel}\n </pk-button>\n </pk-dialog>\n `;\n }\n\n private getToolbarButtonId(buttonName: string): string {\n let id = this.toolbarButtonIds.get(buttonName);\n\n if (!id) {\n id = uniqueId(`pk-tiptap-toolbar-${buttonName}`);\n this.toolbarButtonIds.set(buttonName, id);\n }\n\n return id;\n }\n\n private getToolbarButtonLabel(buttonName: string): string {\n return TOOLBAR_LABELS[buttonName]\n ?? getRegisteredTiptapToolbarControl(buttonName)?.label\n ?? buttonName;\n }\n\n private renderToolbarTooltip(buttonId: string, label: string) {\n if (!this.toolbarTooltips) {\n return nothing;\n }\n\n return html`\n <pk-tooltip for=${buttonId} content=${label} placement=\"top\"></pk-tooltip>\n `;\n }\n\n private renderToolbarButton(buttonName: string) {\n const editor = this.host.editor;\n const registered = getRegisteredTiptapToolbarControl(buttonName);\n\n if (registered?.isVisible && (!editor || !registered.isVisible(editor))) {\n return nothing;\n }\n\n const icon = getToolbarButtonIcon(buttonName);\n const label = this.getToolbarButtonLabel(buttonName);\n const buttonId = this.getToolbarButtonId(buttonName);\n const active = editor ? isTiptapButtonActive(editor, buttonName) : false;\n\n return html`\n <div class=\"toolbar-item\">\n <button\n id=${buttonId}\n type=\"button\"\n class=\"toolbar-btn\"\n aria-label=${label}\n ?disabled=${this.disabled || this.readonly}\n data-state=${active ? 'active' : nothing}\n @click=${() => this.handleToolbarCommand(buttonName)}\n >\n ${icon ? unsafeSVG(icon) : html`<span class=\"toolbar-btn__label\">${label}</span>`}\n </button>\n ${this.renderToolbarTooltip(buttonId, label)}\n </div>\n `;\n }\n\n private get textStyleToolbarConfig() {\n return resolveTiptapTextStyleToolbarConfig(this.textStyleOptions);\n }\n\n private getTextStyleValue(attribute: string): string | null {\n const value = this.host.editor?.getAttributes('textStyle')[attribute];\n return typeof value === 'string' && value ? value : null;\n }\n\n private setTextStyleValue(attribute: string, value: string | null): void {\n const editor = this.host.editor;\n\n if (!editor) {\n return;\n }\n\n const chain = editor.chain().focus();\n\n switch (attribute) {\n case 'fontFamily':\n value ? chain.setFontFamily(value).run() : chain.unsetFontFamily().run();\n break;\n case 'fontSize':\n value ? chain.setFontSize(value).run() : chain.unsetFontSize().run();\n break;\n case 'color':\n value ? chain.setColor(value).run() : chain.unsetColor().run();\n break;\n case 'backgroundColor':\n value ? chain.setBackgroundColor(value).run() : chain.unsetBackgroundColor().run();\n break;\n case 'lineHeight':\n value ? chain.setLineHeight(value).run() : chain.unsetLineHeight().run();\n break;\n }\n }\n\n private getTextStyleOptionLabel(options: TiptapTextStyleOption[], value: string | null): string {\n return options.find((option) => option.value === value)?.label\n ?? options.find((option) => option.value === null)?.label\n ?? 'Default';\n }\n\n private renderTextStyleOptions(attribute: string, options: TiptapTextStyleOption[]) {\n const currentValue = this.getTextStyleValue(attribute);\n\n return options.map((option) => html`\n <pk-dropdown-item\n type=\"radio\"\n radio-group=${attribute}\n value=${option.value ?? ''}\n ?checked=${option.value === currentValue}\n @click=${() => this.setTextStyleValue(attribute, option.value)}\n >\n ${option.label}\n </pk-dropdown-item>\n `);\n }\n\n private renderTextStylePaletteOptions(\n attribute: 'color' | 'backgroundColor',\n options: TiptapTextStyleOption[],\n idPrefix: string,\n ) {\n const currentValue = this.getTextStyleValue(attribute);\n const isTextColor = attribute === 'color';\n\n return options.map((option, index) => {\n const optionId = `${idPrefix}-${attribute}-${index}`;\n const accessibleLabel = option.value\n ? `${option.label} ${isTextColor ? 'text' : 'highlight'}`\n : isTextColor ? 'Default text color' : 'No highlight';\n\n return html`\n <pk-dropdown-item\n id=${optionId}\n class=\"text-style-palette__option\"\n type=\"radio\"\n radio-group=${attribute}\n value=${option.value ?? ''}\n ?checked=${option.value === currentValue}\n @click=${() => this.setTextStyleValue(attribute, option.value)}\n >\n <span\n slot=\"start\"\n class=\"text-style-palette__swatch ${isTextColor ? 'text-style-palette__swatch--text' : 'text-style-palette__swatch--highlight'}\"\n style=${option.value ? `--text-style-swatch:${option.value}` : ''}\n data-empty=${option.value === null ? '' : nothing}\n aria-hidden=\"true\"\n >${isTextColor ? 'A' : nothing}</span>\n <span class=\"text-style-palette__accessible-label\">${accessibleLabel}</span>\n </pk-dropdown-item>\n ${this.toolbarTooltips ? html`\n <pk-tooltip for=${optionId} content=${accessibleLabel} placement=\"top\"></pk-tooltip>\n ` : nothing}\n `;\n });\n }\n\n private handleTextStylePaletteKeyDown(event: KeyboardEvent): void {\n const deltas: Partial<Record<KeyboardEvent['key'], number>> = {\n ArrowLeft: -1,\n ArrowRight: 1,\n ArrowUp: -5,\n ArrowDown: 5,\n };\n const delta = deltas[event.key];\n\n if (!delta) {\n return;\n }\n\n const menu = event.currentTarget as PkDropdownMenu;\n const item = event.composedPath().find((node): node is PkDropdownItem => (\n node instanceof HTMLElement\n && node.localName === 'pk-dropdown-item'\n && node.classList.contains('text-style-palette__option')\n ));\n const items = menu.getItems().filter((candidate) => (\n candidate.classList.contains('text-style-palette__option')\n ));\n const index = item ? items.indexOf(item) : -1;\n\n if (index === -1) {\n return;\n }\n\n // The menu remains the focus/dismissal owner; only its directional\n // movement changes to match the palette's five-column visual layout.\n const target = items[Math.max(0, Math.min(index + delta, items.length - 1))];\n\n event.preventDefault();\n event.stopPropagation();\n target?.focusControl();\n }\n\n private renderTextStyleToolbar(buttonName: string) {\n const config = this.textStyleToolbarConfig;\n const buttonId = this.getToolbarButtonId(buttonName);\n const triggerColor = buttonName === 'text-color' ? this.getTextStyleValue('color') : null;\n let triggerLabel = '';\n let menuContent: unknown = nothing;\n\n if (buttonName === 'font-family') {\n triggerLabel = this.getTextStyleOptionLabel(config.fontFamilies, this.getTextStyleValue('fontFamily'));\n menuContent = html`${this.renderTextStyleOptions('fontFamily', config.fontFamilies)}`;\n } else if (buttonName === 'font-size') {\n triggerLabel = this.getTextStyleOptionLabel(config.fontSizes, this.getTextStyleValue('fontSize'));\n menuContent = html`${this.renderTextStyleOptions('fontSize', config.fontSizes)}`;\n } else if (buttonName === 'line-height') {\n triggerLabel = this.getTextStyleOptionLabel(config.lineHeights, this.getTextStyleValue('lineHeight'));\n menuContent = html`${this.renderTextStyleOptions('lineHeight', config.lineHeights)}`;\n } else {\n triggerLabel = 'A';\n menuContent = html`\n <pk-dropdown-label class=\"text-style-palette__label\">Text color</pk-dropdown-label>\n ${this.renderTextStylePaletteOptions('color', config.textColors, buttonId)}\n <pk-dropdown-label class=\"text-style-palette__label text-style-palette__label--highlight\">Highlight color</pk-dropdown-label>\n ${this.renderTextStylePaletteOptions('backgroundColor', config.backgroundColors, buttonId)}\n `;\n }\n\n const label = this.getToolbarButtonLabel(buttonName);\n\n return html`\n <div class=\"toolbar-item\">\n <button\n id=${buttonId}\n type=\"button\"\n class=\"toolbar-btn toolbar-btn--menu toolbar-btn--text-style ${buttonName === 'text-color' ? 'toolbar-btn--color' : ''}\"\n aria-label=${label}\n aria-haspopup=\"menu\"\n ?disabled=${this.disabled || this.readonly}\n style=${triggerColor ? `--text-style-trigger-color:${triggerColor}` : ''}\n >\n <span class=\"toolbar-btn__text-style-value\">${triggerLabel}</span>\n <span class=\"toolbar-btn__chevron\">${unsafeSVG(TOOLBAR_CHEVRON_HTML)}</span>\n </button>\n ${this.renderToolbarTooltip(buttonId, label)}\n <pk-dropdown-menu\n for=${buttonId}\n placement=\"bottom-start\"\n class=${buttonName === 'text-color' ? 'text-style-palette' : ''}\n @keydown=${buttonName === 'text-color' ? this.handleTextStylePaletteKeyDown : nothing}\n >\n ${menuContent}\n </pk-dropdown-menu>\n </div>\n `;\n }\n\n private handleCraftLink(config: LinkElementConfig): void {\n const editor = this.host.editor;\n\n if (!editor) {\n return;\n }\n\n openCraftElementLinkSelector({\n config,\n elementSiteId: getLinkOptionsElementSiteId(this.resolveLinkOptions()),\n linkSelectorStorageKeyPrefix: this.linkSelectorStorageKeyPrefix,\n getSelectedText: () => getSelectedText(editor),\n onSelect: ({ url, text }) => { this.openLinkDialog({ url, text }); },\n host: createCraftElementSelectorHost(),\n });\n }\n\n private getToolbarGroupId(groupKey: string): string {\n let id = this.toolbarGroupIds.get(groupKey);\n\n if (!id) {\n id = uniqueId('pk-tiptap-toolbar-group');\n this.toolbarGroupIds.set(groupKey, id);\n }\n\n return id;\n }\n\n private renderToolbarSeparator() {\n return html`<span class=\"toolbar-separator\" aria-hidden=\"true\"></span>`;\n }\n\n private renderGroupTriggerContent(group: ToolbarGroup, triggerLabel: string, iconName: string) {\n const icon = getToolbarButtonIcon(iconName);\n const showTextLabel = Boolean(group.label);\n\n if (showTextLabel && triggerLabel) {\n return html`\n <span class=\"toolbar-btn__trigger-label\">${triggerLabel}</span>\n <span class=\"toolbar-btn__chevron\">${unsafeSVG(TOOLBAR_CHEVRON_HTML)}</span>\n `;\n }\n\n return html`\n ${icon ? unsafeSVG(icon) : html`<span class=\"toolbar-btn__trigger-label\">${triggerLabel}</span>`}\n <span class=\"toolbar-btn__chevron\">${unsafeSVG(TOOLBAR_CHEVRON_HTML)}</span>\n `;\n }\n\n private renderToolbarGroup(group: ToolbarGroup, groupKey: string) {\n const editor = this.host.editor;\n const groupId = this.getToolbarGroupId(groupKey);\n const trigger = editor ? getToolbarGroupTriggerState(editor, group) : {\n activeName: null,\n label: group.label ?? '',\n isActive: false,\n icon: group.icon ?? getToolbarGroupDefaultIcon(group),\n };\n const menuItems = getToolbarGroupMenuItems(group).filter((entry) => {\n if (entry.type === 'separator') {\n return true;\n }\n\n const control = getRegisteredTiptapToolbarControl(entry.name);\n return !control?.isVisible || Boolean(editor && control.isVisible(editor));\n });\n\n if (!menuItems.some((entry) => entry.type === 'item')) {\n return nothing;\n }\n const tooltipLabel = group.label\n ?? (isHeadingsOnlyToolbarPreset(group.preset) ? 'Headings'\n : isFormattingToolbarPreset(group.preset) ? 'Formatting'\n : group.preset === 'lists' ? 'Lists'\n : group.preset === 'align' ? 'Alignment'\n : 'More');\n\n return html`\n <div class=\"toolbar-item\">\n <button\n id=${groupId}\n type=\"button\"\n class=\"toolbar-btn toolbar-btn--menu\"\n aria-label=${tooltipLabel}\n aria-haspopup=\"menu\"\n ?disabled=${this.disabled || this.readonly}\n data-state=${trigger.isActive ? 'active' : nothing}\n >\n ${this.renderGroupTriggerContent(group, trigger.label, trigger.icon)}\n </button>\n ${this.renderToolbarTooltip(groupId, tooltipLabel)}\n <pk-dropdown-menu for=${groupId} placement=\"bottom-start\">\n ${menuItems.map((entry, itemIndex) => {\n if (entry.type === 'separator') {\n return html`<pk-dropdown-separator key=${`${groupKey}-sep-${itemIndex}`}></pk-dropdown-separator>`;\n }\n\n const itemName = entry.name;\n const active = editor ? isToolbarButtonActive(editor, itemName) : false;\n const prefixIcon = createToolbarPrefixIcon(itemName);\n const itemLabel = getToolbarMenuItemLabel(itemName);\n\n return html`\n <pk-dropdown-item\n key=${`${groupKey}-${itemName}-${itemIndex}`}\n ?data-active=${active || nothing}\n @click=${() => this.handleToolbarCommand(itemName)}\n >\n ${prefixIcon ?? nothing}\n ${itemLabel}\n </pk-dropdown-item>\n `;\n })}\n </pk-dropdown-menu>\n </div>\n `;\n }\n\n private renderToolbarNode(node: ToolbarNode, index: number) {\n if (node.type === 'separator') {\n return this.renderToolbarSeparator();\n }\n\n if (node.type === 'group') {\n return this.renderToolbarGroup(node.group, `group-${index}`);\n }\n\n if (node.name === 'link') {\n return this.renderLinkToolbarButton();\n }\n\n if (['font-family', 'font-size', 'text-color', 'line-height'].includes(node.name)) {\n return this.renderTextStyleToolbar(node.name);\n }\n\n return this.renderToolbarButton(node.name);\n }\n\n private renderDefaultToolbar() {\n // `toolbar-end` — append custom controls (Formie variable picker, etc.) into the\n // stock toolbar flex/gap. Prefer over replacing the whole bar via slot=\"toolbar\".\n return html`\n <div class=\"toolbar\" part=\"toolbar\">\n ${this.toolbarNodes.map((node, index) => this.renderToolbarNode(node, index))}\n <slot name=\"toolbar-end\"></slot>\n </div>\n `;\n }\n\n private renderLinkToolbarButton() {\n const editor = this.host.editor;\n const craftOptions = getCraftLinkOptions(this.resolveLinkOptions());\n const label = this.getToolbarButtonLabel('link');\n const active = this.isLinkActive();\n\n return html`\n <div class=\"toolbar-item\">\n <button\n id=${this.linkButtonId}\n type=\"button\"\n class=\"toolbar-btn\"\n aria-label=${label}\n aria-haspopup=\"menu\"\n ?disabled=${this.disabled || this.readonly}\n data-state=${active ? 'active' : nothing}\n >\n ${unsafeSVG(TOOLBAR_ICONS.link)}\n </button>\n ${this.renderToolbarTooltip(this.linkButtonId, label)}\n <pk-dropdown-menu for=${this.linkButtonId} placement=\"bottom-start\">\n ${craftOptions.map((option) => html`\n <pk-dropdown-item @click=${() => this.handleCraftLink(option)}>\n ${option.optionTitle}\n </pk-dropdown-item>\n `)}\n ${craftOptions.length > 0 ? html`<pk-dropdown-separator></pk-dropdown-separator>` : nothing}\n <pk-dropdown-item @click=${() => this.openLinkMenu()}>Insert Link</pk-dropdown-item>\n <pk-dropdown-item\n ?disabled=${!active}\n @click=${() => editor && unsetLinkFromEditor(editor)}\n >Unlink</pk-dropdown-item>\n </pk-dropdown-menu>\n </div>\n `;\n }\n\n override render() {\n return html`\n <div class=\"shell\" part=\"shell\">\n ${this.hasCustomToolbar\n ? html`<slot name=\"toolbar\"></slot>`\n : this.renderDefaultToolbar()}\n\n <div class=\"editor-mount\" part=\"editor\">\n ${this.contentError ? html`\n <div class=\"content-error\">\n <span>${unsafeSVG(renderIconHtml(triangleExclamation))}</span>\n <span>${this.contentError}</span>\n </div>\n ` : nothing}\n ${this.toolbarHasLink() && this.linkBubbleVisible ? this.renderLinkBubble() : nothing}\n </div>\n\n <input class=\"mirror-input\" type=\"text\" .value=${this.value} readonly tabindex=\"-1\" aria-hidden=\"true\" />\n ${this.toolbarHasLink() && this.linkDialogMounted ? this.renderLinkDialog() : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-tiptap-editor': PkTiptapEditor;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"register-C6_F-VwU.js","names":[],"sources":["../../src/register.ts"],"sourcesContent":["// Full-library path: every curated glyph is available to `<pk-icon icon=\"…\">`.\nimport '@verbb/plugin-kit-icons/all.js';\n\nimport { PkButton } from './components/button/pk-button.js';\nimport { PkButtonGroup } from './components/button-group/pk-button-group.js';\nimport { PkButtonGroupSeparator } from './components/button-group/pk-button-group-separator.js';\nimport { PkButtonGroupText } from './components/button-group/pk-button-group-text.js';\nimport { PkCheckbox } from './components/checkbox/pk-checkbox.js';\nimport { PkCheckboxSelect } from './components/checkbox-select/pk-checkbox-select.js';\nimport { PkCodeEditor } from './components/code-editor/pk-code-editor.js';\nimport { PkColorInput } from './components/color-input/pk-color-input.js';\nimport { PkCalendar } from './components/calendar/pk-calendar.js';\nimport { PkDatePicker } from './components/date-picker/pk-date-picker.js';\nimport { PkCombobox } from './components/combobox/pk-combobox.js';\nimport { PkConnect } from './components/connect/pk-connect.js';\nimport { PkConnectOauth } from './components/connect/pk-connect-oauth.js';\nimport { PkCopyButton } from './components/copy-button/pk-copy-button.js';\nimport { PkDialog } from './components/dialog/pk-dialog.js';\nimport { PkDropdownLabel } from './components/dropdown-menu/pk-dropdown-label.js';\nimport { PkDropdownMenu } from './components/dropdown-menu/pk-dropdown-menu.js';\nimport { PkDropdownItem } from './components/dropdown-menu/pk-dropdown-item.js';\nimport { PkDropdownSeparator } from './components/dropdown-menu/pk-dropdown-separator.js';\nimport { PkEditableTable } from './components/editable-table/pk-editable-table.js';\nimport { PkField } from './components/field/pk-field.js';\nimport { PkIcon } from './components/icon/pk-icon.js';\nimport { PkInput } from './components/input/pk-input.js';\nimport { PkInputGroup } from './components/input-group/pk-input-group.js';\nimport { PkInputGroupAddon } from './components/input-group/pk-input-group-addon.js';\nimport { PkInputGroupButton } from './components/input-group/pk-input-group-button.js';\nimport { PkInputGroupInput } from './components/input-group/pk-input-group-input.js';\nimport { PkInputGroupText } from './components/input-group/pk-input-group-text.js';\nimport { PkInputGroupTextarea } from './components/input-group/pk-input-group-textarea.js';\nimport { PkLightswitch } from './components/lightswitch/pk-lightswitch.js';\nimport { PkOption } from './components/select/pk-option.js';\nimport { PkOptionGroup } from './components/select/pk-option-group.js';\nimport { PkPopover } from './components/popover/pk-popover.js';\nimport { PkPopup } from './components/popup/pk-popup.js';\nimport { PkRadio } from './components/radio-group/pk-radio.js';\nimport { PkRadioGroup } from './components/radio-group/pk-radio-group.js';\nimport { PkScrollArea } from './components/scroll-area/pk-scroll-area.js';\nimport { PkSelect } from './components/select/pk-select.js';\nimport { PkSeparator } from './components/separator/pk-separator.js';\nimport { PkSpinner } from './components/spinner/pk-spinner.js';\nimport { PkStatus } from './components/status/pk-status.js';\nimport { PkTab } from './components/tabs/pk-tab.js';\nimport { PkTabHeading } from './components/tabs/pk-tab-heading.js';\nimport { PkTabPanel } from './components/tabs/pk-tab-panel.js';\nimport { PkTabs } from './components/tabs/pk-tabs.js';\nimport { PkTextarea } from './components/textarea/pk-textarea.js';\nimport { PkTiptapContent } from './components/tiptap/pk-tiptap-content.js';\nimport { PkTiptapEditor } from './components/tiptap/pk-tiptap-editor.js';\nimport { PkTiptapInput } from './components/tiptap/pk-tiptap-input.js';\nimport { PkTimePicker } from './components/time-picker/pk-time-picker.js';\nimport { PkToggle } from './components/toggle/pk-toggle.js';\nimport { PkToggleGroup } from './components/toggle-group/pk-toggle-group.js';\nimport { PkTooltip } from './components/tooltip/pk-tooltip.js';\n\nexport * from './components/button/index.js';\nexport * from './components/button-group/index.js';\nexport * from './components/checkbox/index.js';\nexport * from './components/checkbox-select/index.js';\nexport * from './components/input/index.js';\nexport * from './components/input-group/index.js';\nexport * from './components/textarea/index.js';\nexport * from './components/separator/index.js';\nexport * from './components/status/index.js';\nexport * from './components/toggle/index.js';\nexport * from './components/toggle-group/index.js';\nexport * from './components/lightswitch/index.js';\nexport * from './components/connect/index.js';\nexport * from './components/copy-button/index.js';\nexport * from './components/dialog/index.js';\nexport * from './components/dropdown-menu/index.js';\nexport * from './components/field/index.js';\nexport * from './components/popover/index.js';\nexport * from './components/popup/index.js';\nexport * from './components/tooltip/index.js';\nexport * from './components/radio-group/index.js';\nexport * from './components/tabs/index.js';\nexport * from './components/scroll-area/index.js';\nexport * from './components/color-input/index.js';\nexport * from './components/code-editor/index.js';\nexport * from './components/calendar/index.js';\nexport * from './components/date-picker/index.js';\nexport * from './components/select/index.js';\nexport * from './components/spinner/index.js';\nexport * from './components/time-picker/index.js';\nexport * from './components/tiptap/index.js';\n\nexport {\n PkButton,\n PkButtonGroup,\n PkButtonGroupSeparator,\n PkButtonGroupText,\n PkCheckbox,\n PkCheckboxSelect,\n PkColorInput,\n PkCodeEditor,\n PkCalendar,\n PkDatePicker,\n PkCombobox,\n PkConnect,\n PkConnectOauth,\n PkCopyButton,\n PkDialog,\n PkDropdownMenu,\n PkDropdownItem,\n PkDropdownSeparator,\n PkEditableTable,\n PkField,\n PkIcon,\n PkInput,\n PkInputGroup,\n PkInputGroupAddon,\n PkInputGroupButton,\n PkInputGroupInput,\n PkInputGroupText,\n PkInputGroupTextarea,\n PkLightswitch,\n PkOption,\n PkOptionGroup,\n PkPopover,\n PkPopup,\n PkRadio,\n PkRadioGroup,\n PkScrollArea,\n PkSelect,\n PkSeparator,\n PkSpinner,\n PkStatus,\n PkTab,\n PkTabPanel,\n PkTabs,\n PkTextarea,\n PkTimePicker,\n PkTiptapContent,\n PkTiptapEditor,\n PkTiptapInput,\n PkToggle,\n PkToggleGroup,\n PkTooltip,\n};\n\nconst COMPONENTS: [string, CustomElementConstructor][] = [\n ['pk-spinner', PkSpinner],\n ['pk-icon', PkIcon],\n ['pk-button', PkButton],\n ['pk-checkbox', PkCheckbox],\n ['pk-checkbox-select', PkCheckboxSelect],\n ['pk-color-input', PkColorInput],\n ['pk-code-editor', PkCodeEditor],\n ['pk-input', PkInput],\n ['pk-input-group', PkInputGroup],\n ['pk-input-group-addon', PkInputGroupAddon],\n ['pk-input-group-button', PkInputGroupButton],\n ['pk-input-group-input', PkInputGroupInput],\n ['pk-input-group-text', PkInputGroupText],\n ['pk-input-group-textarea', PkInputGroupTextarea],\n ['pk-textarea', PkTextarea],\n ['pk-tiptap-editor', PkTiptapEditor],\n ['pk-tiptap-input', PkTiptapInput],\n ['pk-tiptap-content', PkTiptapContent],\n ['pk-field', PkField],\n ['pk-separator', PkSeparator],\n ['pk-status', PkStatus],\n ['pk-toggle', PkToggle],\n ['pk-toggle-group', PkToggleGroup],\n ['pk-lightswitch', PkLightswitch],\n ['pk-button-group', PkButtonGroup],\n ['pk-button-group-separator', PkButtonGroupSeparator],\n ['pk-button-group-text', PkButtonGroupText],\n ['pk-dialog', PkDialog],\n ['pk-popup', PkPopup],\n ['pk-dropdown-label', PkDropdownLabel],\n ['pk-dropdown-item', PkDropdownItem],\n ['pk-dropdown-separator', PkDropdownSeparator],\n ['pk-dropdown-menu', PkDropdownMenu],\n ['pk-editable-table', PkEditableTable],\n ['pk-popover', PkPopover],\n ['pk-tooltip', PkTooltip],\n ['pk-radio', PkRadio],\n ['pk-radio-group', PkRadioGroup],\n ['pk-tab', PkTab],\n ['pk-tab-heading', PkTabHeading],\n ['pk-tab-panel', PkTabPanel],\n ['pk-tabs', PkTabs],\n ['pk-scroll-area', PkScrollArea],\n ['pk-option', PkOption],\n ['pk-option-group', PkOptionGroup],\n ['pk-select', PkSelect],\n ['pk-calendar', PkCalendar],\n ['pk-date-picker', PkDatePicker],\n ['pk-combobox', PkCombobox],\n ['pk-connect', PkConnect],\n ['pk-connect-oauth', PkConnectOauth],\n ['pk-time-picker', PkTimePicker],\n ['pk-copy-button', PkCopyButton],\n];\n\n/** Side-effect registration for all Plugin Kit web components. */\nexport function registerAll(): void {\n for (const [tag, ctor] of COMPONENTS) {\n if (!customElements.get(tag)) {\n customElements.define(tag, ctor);\n }\n }\n}\n\nexport {\n createRegisterComponents,\n type PkComponentTag,\n} from './register-components.js';\n\nexport { BUNDLER_TAG_IMPORT_PATHS as componentImportPaths } from './component-registry.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+IA,IAAM,aAAmD;CACrD,CAAC,cAAc,UAAU;CACzB,CAAC,WAAW,OAAO;CACnB,CAAC,aAAa,SAAS;CACvB,CAAC,eAAe,WAAW;CAC3B,CAAC,sBAAsB,iBAAiB;CACxC,CAAC,kBAAkB,aAAa;CAChC,CAAC,kBAAkB,aAAa;CAChC,CAAC,YAAY,QAAQ;CACrB,CAAC,kBAAkB,aAAa;CAChC,CAAC,wBAAwB,kBAAkB;CAC3C,CAAC,yBAAyB,mBAAmB;CAC7C,CAAC,wBAAwB,kBAAkB;CAC3C,CAAC,uBAAuB,iBAAiB;CACzC,CAAC,2BAA2B,qBAAqB;CACjD,CAAC,eAAe,WAAW;CAC3B,CAAC,oBAAoB,eAAe;CACpC,CAAC,mBAAmB,cAAc;CAClC,CAAC,qBAAqB,gBAAgB;CACtC,CAAC,YAAY,QAAQ;CACrB,CAAC,gBAAgB,YAAY;CAC7B,CAAC,aAAa,SAAS;CACvB,CAAC,aAAa,SAAS;CACvB,CAAC,mBAAmB,cAAc;CAClC,CAAC,kBAAkB,cAAc;CACjC,CAAC,mBAAmB,cAAc;CAClC,CAAC,6BAA6B,uBAAuB;CACrD,CAAC,wBAAwB,kBAAkB;CAC3C,CAAC,aAAa,SAAS;CACvB,CAAC,YAAY,QAAQ;CACrB,CAAC,qBAAqB,gBAAgB;CACtC,CAAC,oBAAoB,eAAe;CACpC,CAAC,yBAAyB,oBAAoB;CAC9C,CAAC,oBAAoB,eAAe;CACpC,CAAC,qBAAqB,gBAAgB;CACtC,CAAC,cAAc,UAAU;CACzB,CAAC,cAAc,UAAU;CACzB,CAAC,YAAY,QAAQ;CACrB,CAAC,kBAAkB,aAAa;CAChC,CAAC,UAAU,MAAM;CACjB,CAAC,kBAAkB,aAAa;CAChC,CAAC,gBAAgB,WAAW;CAC5B,CAAC,WAAW,OAAO;CACnB,CAAC,kBAAkB,aAAa;CAChC,CAAC,aAAa,SAAS;CACvB,CAAC,mBAAmB,cAAc;CAClC,CAAC,aAAa,SAAS;CACvB,CAAC,eAAe,WAAW;CAC3B,CAAC,kBAAkB,aAAa;CAChC,CAAC,eAAe,WAAW;CAC3B,CAAC,cAAc,UAAU;CACzB,CAAC,oBAAoB,eAAe;CACpC,CAAC,kBAAkB,aAAa;CAChC,CAAC,kBAAkB,aAAa;CACnC;;AAGD,SAAgB,cAAoB;AAChC,MAAK,MAAM,CAAC,KAAK,SAAS,WACtB,KAAI,CAAC,eAAe,IAAI,IAAI,CACxB,gBAAe,OAAO,KAAK,KAAK"}