@verbb/plugin-kit-web 2.0.14 → 2.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/custom-elements.json +39571 -0
  3. package/dist/base/pk-form-associated-element.d.ts +17 -1
  4. package/dist/base/pk-form-associated-element.d.ts.map +1 -1
  5. package/dist/chunks/{animate-with-class-ZJeCOKB3.js → animate-with-class-CsDwYnXL.js} +1 -1
  6. package/dist/chunks/{animate-with-class-ZJeCOKB3.js.map → animate-with-class-CsDwYnXL.js.map} +1 -1
  7. package/dist/chunks/{autoloader-DPX9YYZs.js → autoloader-dJO3tYOX.js} +2 -2
  8. package/dist/chunks/{autoloader-DPX9YYZs.js.map → autoloader-dJO3tYOX.js.map} +1 -1
  9. package/dist/chunks/{component-registry-CNB8PbP_.js → component-registry-D34fm8xW.js} +5 -1
  10. package/dist/chunks/component-registry-D34fm8xW.js.map +1 -0
  11. package/dist/chunks/{decorate-W02hmVTt.js → decorate-R0X811qp.js} +13 -2
  12. package/dist/chunks/decorate-R0X811qp.js.map +1 -0
  13. package/dist/chunks/{field-labels-CoU9dnNq.js → field-labels-CmuAW8Cl.js} +1 -1
  14. package/dist/chunks/{field-labels-CoU9dnNq.js.map → field-labels-CmuAW8Cl.js.map} +1 -1
  15. package/dist/chunks/option-filter-BQqr8Z21.js +121 -0
  16. package/dist/chunks/option-filter-BQqr8Z21.js.map +1 -0
  17. package/dist/chunks/pk-autocomplete-kOT0Zlld.js +992 -0
  18. package/dist/chunks/pk-autocomplete-kOT0Zlld.js.map +1 -0
  19. package/dist/chunks/{pk-button-QpDDlRbG.js → pk-button-BrH4u4Qr.js} +10 -7
  20. package/dist/chunks/{pk-button-QpDDlRbG.js.map → pk-button-BrH4u4Qr.js.map} +1 -1
  21. package/dist/chunks/{pk-button-group-D9hqSfb_.js → pk-button-group-BSz5T5iS.js} +2 -3
  22. package/dist/chunks/pk-button-group-BSz5T5iS.js.map +1 -0
  23. package/dist/chunks/{pk-button-group-separator-DG0CYaqc.js → pk-button-group-separator-DH3Rl24b.js} +2 -3
  24. package/dist/chunks/pk-button-group-separator-DH3Rl24b.js.map +1 -0
  25. package/dist/chunks/{pk-button-group-text-C5z4P7ur.js → pk-button-group-text-Qro_KmZb.js} +2 -3
  26. package/dist/chunks/{pk-button-group-text-C5z4P7ur.js.map → pk-button-group-text-Qro_KmZb.js.map} +1 -1
  27. package/dist/chunks/{pk-calendar-CoUil0F7.js → pk-calendar-Z7Y0PjeY.js} +2 -3
  28. package/dist/chunks/pk-calendar-Z7Y0PjeY.js.map +1 -0
  29. package/dist/chunks/{pk-checkbox-Bavq3-9C.js → pk-checkbox-CfV1uDdC.js} +3 -4
  30. package/dist/chunks/pk-checkbox-CfV1uDdC.js.map +1 -0
  31. package/dist/chunks/{pk-checkbox-select-9lqd9Rwz.js → pk-checkbox-select-DeCaI3a0.js} +3 -4
  32. package/dist/chunks/pk-checkbox-select-DeCaI3a0.js.map +1 -0
  33. package/dist/chunks/{pk-code-editor-DSG6AwLV.js → pk-code-editor-BG9sG_Fy.js} +3 -4
  34. package/dist/chunks/pk-code-editor-BG9sG_Fy.js.map +1 -0
  35. package/dist/chunks/{pk-color-input-BCCXCZMA.js → pk-color-input-CncNce1C.js} +3 -4
  36. package/dist/chunks/pk-color-input-CncNce1C.js.map +1 -0
  37. package/dist/chunks/{pk-combobox-BqaSsLJb.js → pk-combobox-Dn7UJ_CV.js} +50 -94
  38. package/dist/chunks/pk-combobox-Dn7UJ_CV.js.map +1 -0
  39. package/dist/chunks/{pk-connect.styles-DshgIW2n.js → pk-connect.styles-BhW406jt.js} +1 -1
  40. package/dist/chunks/{pk-connect.styles-DshgIW2n.js.map → pk-connect.styles-BhW406jt.js.map} +1 -1
  41. package/dist/chunks/{pk-copy-button-CfeVuQ0r.js → pk-copy-button-BVaOLtYG.js} +47 -7
  42. package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +1 -0
  43. package/dist/chunks/{pk-date-picker-BM4HMb4-.js → pk-date-picker-DfIvmoZ1.js} +7 -8
  44. package/dist/chunks/pk-date-picker-DfIvmoZ1.js.map +1 -0
  45. package/dist/chunks/{pk-dialog-Ck1InIBC.js → pk-dialog-VMQqLW1f.js} +3 -4
  46. package/dist/chunks/pk-dialog-VMQqLW1f.js.map +1 -0
  47. package/dist/chunks/{pk-dropdown-item-HcIUlFH1.js → pk-dropdown-item-BZQS87U0.js} +3 -4
  48. package/dist/chunks/pk-dropdown-item-BZQS87U0.js.map +1 -0
  49. package/dist/chunks/{pk-dropdown-label-DLgrmYND.js → pk-dropdown-label-CRNWMWQd.js} +2 -3
  50. package/dist/chunks/{pk-dropdown-label-DLgrmYND.js.map → pk-dropdown-label-CRNWMWQd.js.map} +1 -1
  51. package/dist/chunks/{pk-dropdown-menu-r5wgkvmZ.js → pk-dropdown-menu-D60p2-9X.js} +5 -6
  52. package/dist/chunks/pk-dropdown-menu-D60p2-9X.js.map +1 -0
  53. package/dist/chunks/{pk-editable-table-DMHGqZlQ.js → pk-editable-table-BQ47MXpu.js} +18 -21
  54. package/dist/chunks/pk-editable-table-BQ47MXpu.js.map +1 -0
  55. package/dist/chunks/{pk-field-JFP24j4o.js → pk-field-UAlMq6mQ.js} +3 -4
  56. package/dist/chunks/pk-field-UAlMq6mQ.js.map +1 -0
  57. package/dist/chunks/{pk-form-associated-element-DmZKgNPL.js → pk-form-associated-element-CCQALRGB.js} +15 -3
  58. package/dist/chunks/pk-form-associated-element-CCQALRGB.js.map +1 -0
  59. package/dist/chunks/pk-image-browser-BXFDfch3.js +1364 -0
  60. package/dist/chunks/pk-image-browser-BXFDfch3.js.map +1 -0
  61. package/dist/chunks/{pk-input-naIRPWGC.js → pk-input-CF_icEtR.js} +77 -32
  62. package/dist/chunks/pk-input-CF_icEtR.js.map +1 -0
  63. package/dist/chunks/{pk-input-group-CGHQKrt8.js → pk-input-group-CWdoVhkH.js} +2 -3
  64. package/dist/chunks/pk-input-group-CWdoVhkH.js.map +1 -0
  65. package/dist/chunks/{pk-input-group-addon-DXbNbsfY.js → pk-input-group-addon-ClBkGmAw.js} +2 -3
  66. package/dist/chunks/pk-input-group-addon-ClBkGmAw.js.map +1 -0
  67. package/dist/chunks/{pk-input-group-button-XOfVLqGO.js → pk-input-group-button-CHQHsWd4.js} +2 -3
  68. package/dist/chunks/pk-input-group-button-CHQHsWd4.js.map +1 -0
  69. package/dist/chunks/{pk-input-group-input-CSmR5vdY.js → pk-input-group-input-oNnqMBGU.js} +2 -3
  70. package/dist/chunks/pk-input-group-input-oNnqMBGU.js.map +1 -0
  71. package/dist/chunks/{pk-input-group-text-C6ekhtff.js → pk-input-group-text-HUxlXROB.js} +2 -3
  72. package/dist/chunks/pk-input-group-text-HUxlXROB.js.map +1 -0
  73. package/dist/chunks/{pk-input-group-textarea-DALr3pdU.js → pk-input-group-textarea-Cl2FNuw-.js} +2 -3
  74. package/dist/chunks/pk-input-group-textarea-Cl2FNuw-.js.map +1 -0
  75. package/dist/chunks/{pk-lightswitch-B-rLflNq.js → pk-lightswitch-D1qEFRxK.js} +4 -5
  76. package/dist/chunks/pk-lightswitch-D1qEFRxK.js.map +1 -0
  77. package/dist/chunks/{pk-option-Cy7oOcwF.js → pk-option-DQZHV9jL.js} +4 -4
  78. package/dist/chunks/pk-option-DQZHV9jL.js.map +1 -0
  79. package/dist/chunks/{pk-option-group-BAFSIZTa.js → pk-option-group-CCzJkBFp.js} +2 -3
  80. package/dist/chunks/pk-option-group-CCzJkBFp.js.map +1 -0
  81. package/dist/chunks/{pk-popover-G3ojheBD.js → pk-popover-KSIOYlbs.js} +5 -6
  82. package/dist/chunks/pk-popover-KSIOYlbs.js.map +1 -0
  83. package/dist/chunks/{pk-popup-CgiXok-U.js → pk-popup-B9AgBC2V.js} +2 -3
  84. package/dist/chunks/pk-popup-B9AgBC2V.js.map +1 -0
  85. package/dist/chunks/{pk-radio-CDfhOW8L.js → pk-radio-B5XkMHy3.js} +2 -3
  86. package/dist/chunks/pk-radio-B5XkMHy3.js.map +1 -0
  87. package/dist/chunks/{pk-radio-group-BazmLDvl.js → pk-radio-group-ByrxGLdX.js} +4 -5
  88. package/dist/chunks/pk-radio-group-ByrxGLdX.js.map +1 -0
  89. package/dist/chunks/{pk-scroll-area-BjU7-vZX.js → pk-scroll-area-CdfNxYz8.js} +2 -3
  90. package/dist/chunks/pk-scroll-area-CdfNxYz8.js.map +1 -0
  91. package/dist/chunks/{pk-select-BeMDXEC6.js → pk-select-DQtORz-v.js} +8 -7
  92. package/dist/chunks/pk-select-DQtORz-v.js.map +1 -0
  93. package/dist/chunks/{pk-separator-CLb9n0FK.js → pk-separator-N-VyjYE6.js} +2 -3
  94. package/dist/chunks/pk-separator-N-VyjYE6.js.map +1 -0
  95. package/dist/chunks/{pk-spinner-Blxd3SIH.js → pk-spinner-DweuYJ_Z.js} +2 -3
  96. package/dist/chunks/{pk-spinner-Blxd3SIH.js.map → pk-spinner-DweuYJ_Z.js.map} +1 -1
  97. package/dist/chunks/{pk-status-7_5dEuw-.js → pk-status-BehQARDv.js} +2 -3
  98. package/dist/chunks/{pk-status-7_5dEuw-.js.map → pk-status-BehQARDv.js.map} +1 -1
  99. package/dist/chunks/{pk-tab-f1OLMVXs.js → pk-tab-CTloD18e.js} +3 -3
  100. package/dist/chunks/{pk-tab-f1OLMVXs.js.map → pk-tab-CTloD18e.js.map} +1 -1
  101. package/dist/chunks/{pk-tab-heading-79ZuLhXi.js → pk-tab-heading-Cjcgebxn.js} +2 -3
  102. package/dist/chunks/pk-tab-heading-Cjcgebxn.js.map +1 -0
  103. package/dist/chunks/{pk-tab-panel-DdAbrOBF.js → pk-tab-panel-CkKU5-Ah.js} +3 -3
  104. package/dist/chunks/{pk-tab-panel-DdAbrOBF.js.map → pk-tab-panel-CkKU5-Ah.js.map} +1 -1
  105. package/dist/chunks/{pk-tabs-BhC5PAnO.js → pk-tabs-BgEBki1q.js} +2 -3
  106. package/dist/chunks/{pk-tabs-BhC5PAnO.js.map → pk-tabs-BgEBki1q.js.map} +1 -1
  107. package/dist/chunks/{pk-textarea-BEapC8Rk.js → pk-textarea-CYM2tK88.js} +4 -5
  108. package/dist/chunks/pk-textarea-CYM2tK88.js.map +1 -0
  109. package/dist/chunks/{pk-time-picker-RlAqlho4.js → pk-time-picker-DLUBYLFo.js} +4 -5
  110. package/dist/chunks/{pk-time-picker-RlAqlho4.js.map → pk-time-picker-DLUBYLFo.js.map} +1 -1
  111. package/dist/chunks/{pk-tiptap-content-zzx3-xrD.js → pk-tiptap-content-BwkqYVJb.js} +3 -4
  112. package/dist/chunks/pk-tiptap-content-BwkqYVJb.js.map +1 -0
  113. package/dist/chunks/{pk-tiptap-editor-DpT4TYdi.js → pk-tiptap-editor-De8UUTis.js} +13 -14
  114. package/dist/chunks/pk-tiptap-editor-De8UUTis.js.map +1 -0
  115. package/dist/chunks/{pk-tiptap-input-D7xj13FY.js → pk-tiptap-input-Y9eog9Zn.js} +4 -5
  116. package/dist/chunks/pk-tiptap-input-Y9eog9Zn.js.map +1 -0
  117. package/dist/chunks/{pk-toggle-5-GKVLye.js → pk-toggle-BthhH7vl.js} +2 -3
  118. package/dist/chunks/{pk-toggle-5-GKVLye.js.map → pk-toggle-BthhH7vl.js.map} +1 -1
  119. package/dist/chunks/{pk-toggle-group-CWDwYlgR.js → pk-toggle-group-D2Quux8D.js} +2 -3
  120. package/dist/chunks/pk-toggle-group-D2Quux8D.js.map +1 -0
  121. package/dist/chunks/{pk-tooltip-DAq-JZpg.js → pk-tooltip-Cmmc0916.js} +3 -4
  122. package/dist/chunks/pk-tooltip-Cmmc0916.js.map +1 -0
  123. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js → popup-content-animation.styles-BnNiguJo.js} +1 -1
  124. package/dist/chunks/{popup-content-animation.styles-Dc6d9quJ.js.map → popup-content-animation.styles-BnNiguJo.js.map} +1 -1
  125. package/dist/chunks/{popup-pointer-DMnuZDQl.js → popup-pointer-CuLjk1th.js} +1 -1
  126. package/dist/chunks/{popup-pointer-DMnuZDQl.js.map → popup-pointer-CuLjk1th.js.map} +1 -1
  127. package/dist/chunks/{register-components-B-qCPFFh.js → register-components-BT9THgdh.js} +1 -1
  128. package/dist/chunks/{register-components-B-qCPFFh.js.map → register-components-BT9THgdh.js.map} +1 -1
  129. package/dist/chunks/{register-DeqrQzRS.js → register-posLyX3U.js} +50 -50
  130. package/dist/chunks/{register-DeqrQzRS.js.map → register-posLyX3U.js.map} +1 -1
  131. package/dist/chunks/{tiptap.styles-ChAfyVi9.js → tiptap.styles-CPRows--.js} +4 -3
  132. package/dist/chunks/tiptap.styles-CPRows--.js.map +1 -0
  133. package/dist/component-registry.d.ts.map +1 -1
  134. package/dist/components/autocomplete/index.d.ts +2 -0
  135. package/dist/components/autocomplete/index.d.ts.map +1 -0
  136. package/dist/components/autocomplete/pk-autocomplete.d.ts +150 -0
  137. package/dist/components/autocomplete/pk-autocomplete.d.ts.map +1 -0
  138. package/dist/components/autocomplete/pk-autocomplete.js +2 -0
  139. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts +7 -0
  140. package/dist/components/autocomplete/pk-autocomplete.styles.d.ts.map +1 -0
  141. package/dist/components/autocomplete.d.ts +2 -0
  142. package/dist/components/autocomplete.js +2 -0
  143. package/dist/components/button/pk-button.d.ts +37 -1
  144. package/dist/components/button/pk-button.d.ts.map +1 -1
  145. package/dist/components/button/pk-button.js +1 -1
  146. package/dist/components/button-group/pk-button-group-separator.js +1 -1
  147. package/dist/components/button-group/pk-button-group-text.js +1 -1
  148. package/dist/components/button-group/pk-button-group.js +1 -1
  149. package/dist/components/button-group.js +3 -3
  150. package/dist/components/button.js +1 -1
  151. package/dist/components/calendar/pk-calendar.js +1 -1
  152. package/dist/components/calendar.js +1 -1
  153. package/dist/components/checkbox/pk-checkbox.js +1 -1
  154. package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
  155. package/dist/components/checkbox-select.js +1 -1
  156. package/dist/components/checkbox.js +1 -1
  157. package/dist/components/code-editor/pk-code-editor.js +1 -1
  158. package/dist/components/code-editor.js +1 -1
  159. package/dist/components/color-input/pk-color-input.js +1 -1
  160. package/dist/components/color-input.js +1 -1
  161. package/dist/components/combobox/pk-combobox.d.ts +8 -14
  162. package/dist/components/combobox/pk-combobox.d.ts.map +1 -1
  163. package/dist/components/combobox/pk-combobox.js +1 -1
  164. package/dist/components/combobox/pk-combobox.styles.d.ts.map +1 -1
  165. package/dist/components/combobox.js +1 -1
  166. package/dist/components/connect/pk-connect-oauth.js +4 -5
  167. package/dist/components/connect/pk-connect-oauth.js.map +1 -1
  168. package/dist/components/connect/pk-connect.js +5 -6
  169. package/dist/components/connect/pk-connect.js.map +1 -1
  170. package/dist/components/copy-button/pk-copy-button.d.ts +3 -0
  171. package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
  172. package/dist/components/copy-button/pk-copy-button.js +1 -1
  173. package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
  174. package/dist/components/copy-button.js +1 -1
  175. package/dist/components/date-picker/pk-date-picker.js +1 -1
  176. package/dist/components/date-picker.js +1 -1
  177. package/dist/components/dialog/pk-dialog.js +1 -1
  178. package/dist/components/dialog.js +1 -1
  179. package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
  180. package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
  181. package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
  182. package/dist/components/dropdown-menu/pk-dropdown-separator.js +1 -2
  183. package/dist/components/dropdown-menu/pk-dropdown-separator.js.map +1 -1
  184. package/dist/components/dropdown-menu.js +3 -3
  185. package/dist/components/editable-table/editable-table-model.d.ts +4 -1
  186. package/dist/components/editable-table/editable-table-model.d.ts.map +1 -1
  187. package/dist/components/editable-table/pk-editable-table.d.ts +1 -1
  188. package/dist/components/editable-table/pk-editable-table.d.ts.map +1 -1
  189. package/dist/components/editable-table/pk-editable-table.js +1 -1
  190. package/dist/components/editable-table.js +1 -1
  191. package/dist/components/field/pk-field.js +1 -1
  192. package/dist/components/field.js +1 -1
  193. package/dist/components/icon/pk-icon.d.ts +3 -2
  194. package/dist/components/icon/pk-icon.d.ts.map +1 -1
  195. package/dist/components/icon/pk-icon.js +1 -2
  196. package/dist/components/icon/pk-icon.js.map +1 -1
  197. package/dist/components/image-browser/index.d.ts +2 -0
  198. package/dist/components/image-browser/index.d.ts.map +1 -0
  199. package/dist/components/image-browser/pk-image-browser.d.ts +190 -0
  200. package/dist/components/image-browser/pk-image-browser.d.ts.map +1 -0
  201. package/dist/components/image-browser/pk-image-browser.js +2 -0
  202. package/dist/components/image-browser/pk-image-browser.styles.d.ts +6 -0
  203. package/dist/components/image-browser/pk-image-browser.styles.d.ts.map +1 -0
  204. package/dist/components/image-browser.d.ts +2 -0
  205. package/dist/components/image-browser.js +2 -0
  206. package/dist/components/input/pk-input.d.ts +2 -1
  207. package/dist/components/input/pk-input.d.ts.map +1 -1
  208. package/dist/components/input/pk-input.js +1 -1
  209. package/dist/components/input/pk-input.styles.d.ts.map +1 -1
  210. package/dist/components/input-group/pk-input-group-addon.js +1 -1
  211. package/dist/components/input-group/pk-input-group-button.js +1 -1
  212. package/dist/components/input-group/pk-input-group-input.js +1 -1
  213. package/dist/components/input-group/pk-input-group-text.js +1 -1
  214. package/dist/components/input-group/pk-input-group-textarea.js +1 -1
  215. package/dist/components/input-group/pk-input-group.js +1 -1
  216. package/dist/components/input-group.js +6 -6
  217. package/dist/components/input.js +1 -1
  218. package/dist/components/lightswitch/pk-lightswitch.js +1 -1
  219. package/dist/components/lightswitch.js +1 -1
  220. package/dist/components/popover/pk-popover.js +1 -1
  221. package/dist/components/popover.js +1 -1
  222. package/dist/components/popup/pk-popup.js +1 -1
  223. package/dist/components/popup.js +1 -1
  224. package/dist/components/radio-group/pk-radio-group.js +1 -1
  225. package/dist/components/radio-group/pk-radio.js +1 -1
  226. package/dist/components/radio-group.js +2 -2
  227. package/dist/components/scroll-area/pk-scroll-area.js +1 -1
  228. package/dist/components/scroll-area.js +1 -1
  229. package/dist/components/select/pk-option-group.d.ts +3 -1
  230. package/dist/components/select/pk-option-group.d.ts.map +1 -1
  231. package/dist/components/select/pk-option-group.js +1 -1
  232. package/dist/components/select/pk-option.d.ts +10 -1
  233. package/dist/components/select/pk-option.d.ts.map +1 -1
  234. package/dist/components/select/pk-option.js +1 -1
  235. package/dist/components/select/pk-select.d.ts +42 -3
  236. package/dist/components/select/pk-select.d.ts.map +1 -1
  237. package/dist/components/select/pk-select.js +1 -1
  238. package/dist/components/select.js +3 -3
  239. package/dist/components/separator/pk-separator.js +1 -1
  240. package/dist/components/separator.js +1 -1
  241. package/dist/components/spinner/pk-spinner.js +1 -1
  242. package/dist/components/spinner.js +1 -1
  243. package/dist/components/status/pk-status.js +1 -1
  244. package/dist/components/status.js +1 -1
  245. package/dist/components/tabs/pk-tab-heading.js +1 -1
  246. package/dist/components/tabs/pk-tab-panel.js +1 -1
  247. package/dist/components/tabs/pk-tab.js +1 -1
  248. package/dist/components/tabs/pk-tabs.js +1 -1
  249. package/dist/components/tabs.js +4 -4
  250. package/dist/components/textarea/pk-textarea.js +1 -1
  251. package/dist/components/textarea.js +1 -1
  252. package/dist/components/time-picker/pk-time-picker.js +1 -1
  253. package/dist/components/time-picker.js +1 -1
  254. package/dist/components/tiptap/pk-tiptap-content.js +1 -1
  255. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  256. package/dist/components/tiptap/pk-tiptap-input.js +1 -1
  257. package/dist/components/tiptap/variable-tag-node-view.d.ts.map +1 -1
  258. package/dist/components/tiptap-content.js +1 -1
  259. package/dist/components/tiptap-editor.js +1 -1
  260. package/dist/components/tiptap-input.js +1 -1
  261. package/dist/components/toggle/pk-toggle.js +1 -1
  262. package/dist/components/toggle-group/pk-toggle-group.js +1 -1
  263. package/dist/components/toggle-group.js +1 -1
  264. package/dist/components/toggle.js +1 -1
  265. package/dist/components/tooltip/pk-tooltip.js +1 -1
  266. package/dist/components/tooltip.js +1 -1
  267. package/dist/connect/register-cp-connect.js +3 -3
  268. package/dist/decorators.d.ts +12 -0
  269. package/dist/decorators.d.ts.map +1 -0
  270. package/dist/index.js +55 -55
  271. package/dist/internal/sync-filtered-options.d.ts +23 -0
  272. package/dist/internal/sync-filtered-options.d.ts.map +1 -0
  273. package/dist/plugin-kit.css +2 -0
  274. package/dist/plugin-kit.js +2 -2
  275. package/dist/register-components.js +1 -1
  276. package/dist/register-pk.generated.d.ts +4 -0
  277. package/dist/register-pk.generated.d.ts.map +1 -1
  278. package/dist/register.js +52 -52
  279. package/dist/utilities/fouce.css +2 -0
  280. package/dist/utils/async-option-fetch.d.ts +38 -0
  281. package/dist/utils/async-option-fetch.d.ts.map +1 -0
  282. package/dist/utils/option-filter.d.ts +11 -0
  283. package/dist/utils/option-filter.d.ts.map +1 -0
  284. package/dist/utils/popup-content-exit.d.ts +6 -0
  285. package/dist/utils/popup-content-exit.d.ts.map +1 -0
  286. package/dist-loader/chunks/option-filter-Z7bomRrK.js +119 -0
  287. package/dist-loader/chunks/{pk-base-B21zXxSo.js → pk-base-CyzwylQ7.js} +13 -1
  288. package/dist-loader/chunks/{pk-button-Dh4gjLHw.js → pk-button-dngp-vOd.js} +10 -6
  289. package/dist-loader/chunks/{pk-calendar-n1bwSO7X.js → pk-calendar-BE4HRfCq.js} +3 -3
  290. package/dist-loader/chunks/{pk-checkbox-BrZQB816.js → pk-checkbox-B3d4nkBx.js} +1 -1
  291. package/dist-loader/chunks/{pk-color-input-sS05YOwT.js → pk-color-input-CD-r_sfG.js} +1 -1
  292. package/dist-loader/chunks/{pk-combobox-B7q6alzE.js → pk-combobox-DMBKXPLB.js} +48 -91
  293. package/dist-loader/chunks/{pk-date-picker-Dni5ty79.js → pk-date-picker-wntQmeIM.js} +5 -5
  294. package/dist-loader/chunks/{pk-dialog-BpPRqFMm.js → pk-dialog-B6lzsRur.js} +3 -3
  295. package/dist-loader/chunks/{pk-dropdown-item-CHkFNlA9.js → pk-dropdown-item-DJ5TeF1r.js} +3 -3
  296. package/dist-loader/chunks/{pk-dropdown-menu-BHVOMNV1.js → pk-dropdown-menu-B87bsdlI.js} +3 -3
  297. package/dist-loader/chunks/{pk-field-CJ09ll1S.js → pk-field-D_SNOJpl.js} +4 -4
  298. package/dist-loader/chunks/{pk-icon-WHUu7wxk.js → pk-icon-B5ob3JdK.js} +2 -2
  299. package/dist-loader/chunks/{pk-input-CEw3AdYt.js → pk-input-BhU0PiCk.js} +74 -28
  300. package/dist-loader/chunks/{pk-lightswitch-DJEUScgo.js → pk-lightswitch-DRxY8511.js} +1 -1
  301. package/dist-loader/chunks/{pk-option-CunPIei0.js → pk-option-Cc6QWw-0.js} +5 -4
  302. package/dist-loader/chunks/{pk-popup-FDdBxb4k.js → pk-popup-BooGjXgH.js} +1 -1
  303. package/dist-loader/chunks/{pk-select-CbAaQ7uE.js → pk-select-BG8qPsBd.js} +6 -4
  304. package/dist-loader/chunks/{pk-spinner-CIbXjDnp.js → pk-spinner-BKU9Rf2R.js} +1 -1
  305. package/dist-loader/chunks/{pk-status-BRIVW7EH.js → pk-status-D3ArH2ui.js} +1 -1
  306. package/dist-loader/chunks/{pk-textarea-C_rOUtFS.js → pk-textarea-CC7rA5A7.js} +1 -1
  307. package/dist-loader/chunks/{pk-time-picker-Dr3uvbvc.js → pk-time-picker-CDVFNhN7.js} +5 -5
  308. package/dist-loader/chunks/{pk-tooltip-HwZ0zRd2.js → pk-tooltip-BS2dNLOS.js} +2 -2
  309. package/dist-loader/chunks/{render-Niz5wYRa.js → render-BKfL_WRl.js} +1 -1
  310. package/dist-loader/chunks/{svg-_Mtb7CHx.js → svg-BiAlXtCn.js} +5 -3
  311. package/dist-loader/chunks/{tiptap.styles-BIRIMP7I.js → tiptap.styles-BFGP4eTV.js} +3 -2
  312. package/dist-loader/components/autocomplete/autocomplete.js +984 -0
  313. package/dist-loader/components/button/button.js +1 -1
  314. package/dist-loader/components/button-group/button-group-separator.js +1 -1
  315. package/dist-loader/components/button-group/button-group-text.js +1 -1
  316. package/dist-loader/components/button-group/button-group.js +1 -1
  317. package/dist-loader/components/calendar/calendar.js +1 -1
  318. package/dist-loader/components/checkbox/checkbox.js +1 -1
  319. package/dist-loader/components/checkbox-select/checkbox-select.js +2 -2
  320. package/dist-loader/components/code-editor/code-editor.js +1 -1
  321. package/dist-loader/components/color-input/color-input.js +1 -1
  322. package/dist-loader/components/combobox/combobox.js +1 -1
  323. package/dist-loader/components/connect/connect-oauth.js +3 -3
  324. package/dist-loader/components/connect/connect.js +5 -5
  325. package/dist-loader/components/copy-button/copy-button.js +48 -7
  326. package/dist-loader/components/date-picker/date-picker.js +1 -1
  327. package/dist-loader/components/dialog/dialog.js +1 -1
  328. package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
  329. package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -1
  330. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  331. package/dist-loader/components/dropdown-menu/dropdown-separator.js +1 -1
  332. package/dist-loader/components/editable-table/editable-table.js +18 -20
  333. package/dist-loader/components/field/field.js +1 -1
  334. package/dist-loader/components/icon/icon.js +2 -2
  335. package/dist-loader/components/image-browser/image-browser.js +1356 -0
  336. package/dist-loader/components/input/input.js +1 -1
  337. package/dist-loader/components/input-group/input-group-addon.js +1 -1
  338. package/dist-loader/components/input-group/input-group-button.js +1 -1
  339. package/dist-loader/components/input-group/input-group-input.js +1 -1
  340. package/dist-loader/components/input-group/input-group-text.js +1 -1
  341. package/dist-loader/components/input-group/input-group-textarea.js +1 -1
  342. package/dist-loader/components/input-group/input-group.js +1 -1
  343. package/dist-loader/components/lightswitch/lightswitch.js +1 -1
  344. package/dist-loader/components/popover/popover.js +2 -2
  345. package/dist-loader/components/popup/popup.js +1 -1
  346. package/dist-loader/components/radio-group/radio-group.js +1 -1
  347. package/dist-loader/components/radio-group/radio.js +1 -1
  348. package/dist-loader/components/scroll-area/scroll-area.js +1 -1
  349. package/dist-loader/components/select/option-group.js +1 -1
  350. package/dist-loader/components/select/option.js +1 -1
  351. package/dist-loader/components/select/select.js +1 -1
  352. package/dist-loader/components/separator/separator.js +1 -1
  353. package/dist-loader/components/spinner/spinner.js +1 -1
  354. package/dist-loader/components/status/status.js +1 -1
  355. package/dist-loader/components/tabs/tab-heading.js +1 -1
  356. package/dist-loader/components/tabs/tab-panel.js +1 -1
  357. package/dist-loader/components/tabs/tab.js +1 -1
  358. package/dist-loader/components/tabs/tabs.js +1 -1
  359. package/dist-loader/components/textarea/textarea.js +1 -1
  360. package/dist-loader/components/time-picker/time-picker.js +1 -1
  361. package/dist-loader/components/tiptap/tiptap-content.js +2 -2
  362. package/dist-loader/components/tiptap/tiptap-editor.js +13 -13
  363. package/dist-loader/components/tiptap/tiptap-input.js +2 -2
  364. package/dist-loader/components/toggle/toggle.js +1 -1
  365. package/dist-loader/components/toggle-group/toggle-group.js +1 -1
  366. package/dist-loader/components/tooltip/tooltip.js +1 -1
  367. package/dist-loader/plugin-kit.css +2 -0
  368. package/dist-loader/plugin-kit.loader.js +4 -0
  369. package/dist-loader/utilities/fouce.css +2 -0
  370. package/package.json +53 -9
  371. package/dist/chunks/component-registry-CNB8PbP_.js.map +0 -1
  372. package/dist/chunks/decorate-W02hmVTt.js.map +0 -1
  373. package/dist/chunks/pk-button-group-D9hqSfb_.js.map +0 -1
  374. package/dist/chunks/pk-button-group-separator-DG0CYaqc.js.map +0 -1
  375. package/dist/chunks/pk-calendar-CoUil0F7.js.map +0 -1
  376. package/dist/chunks/pk-checkbox-Bavq3-9C.js.map +0 -1
  377. package/dist/chunks/pk-checkbox-select-9lqd9Rwz.js.map +0 -1
  378. package/dist/chunks/pk-code-editor-DSG6AwLV.js.map +0 -1
  379. package/dist/chunks/pk-color-input-BCCXCZMA.js.map +0 -1
  380. package/dist/chunks/pk-combobox-BqaSsLJb.js.map +0 -1
  381. package/dist/chunks/pk-copy-button-CfeVuQ0r.js.map +0 -1
  382. package/dist/chunks/pk-date-picker-BM4HMb4-.js.map +0 -1
  383. package/dist/chunks/pk-dialog-Ck1InIBC.js.map +0 -1
  384. package/dist/chunks/pk-dropdown-item-HcIUlFH1.js.map +0 -1
  385. package/dist/chunks/pk-dropdown-menu-r5wgkvmZ.js.map +0 -1
  386. package/dist/chunks/pk-editable-table-DMHGqZlQ.js.map +0 -1
  387. package/dist/chunks/pk-field-JFP24j4o.js.map +0 -1
  388. package/dist/chunks/pk-form-associated-element-DmZKgNPL.js.map +0 -1
  389. package/dist/chunks/pk-input-group-CGHQKrt8.js.map +0 -1
  390. package/dist/chunks/pk-input-group-addon-DXbNbsfY.js.map +0 -1
  391. package/dist/chunks/pk-input-group-button-XOfVLqGO.js.map +0 -1
  392. package/dist/chunks/pk-input-group-input-CSmR5vdY.js.map +0 -1
  393. package/dist/chunks/pk-input-group-text-C6ekhtff.js.map +0 -1
  394. package/dist/chunks/pk-input-group-textarea-DALr3pdU.js.map +0 -1
  395. package/dist/chunks/pk-input-naIRPWGC.js.map +0 -1
  396. package/dist/chunks/pk-lightswitch-B-rLflNq.js.map +0 -1
  397. package/dist/chunks/pk-option-Cy7oOcwF.js.map +0 -1
  398. package/dist/chunks/pk-option-group-BAFSIZTa.js.map +0 -1
  399. package/dist/chunks/pk-popover-G3ojheBD.js.map +0 -1
  400. package/dist/chunks/pk-popup-CgiXok-U.js.map +0 -1
  401. package/dist/chunks/pk-radio-CDfhOW8L.js.map +0 -1
  402. package/dist/chunks/pk-radio-group-BazmLDvl.js.map +0 -1
  403. package/dist/chunks/pk-scroll-area-BjU7-vZX.js.map +0 -1
  404. package/dist/chunks/pk-select-BeMDXEC6.js.map +0 -1
  405. package/dist/chunks/pk-separator-CLb9n0FK.js.map +0 -1
  406. package/dist/chunks/pk-tab-heading-79ZuLhXi.js.map +0 -1
  407. package/dist/chunks/pk-textarea-BEapC8Rk.js.map +0 -1
  408. package/dist/chunks/pk-tiptap-content-zzx3-xrD.js.map +0 -1
  409. package/dist/chunks/pk-tiptap-editor-DpT4TYdi.js.map +0 -1
  410. package/dist/chunks/pk-tiptap-input-D7xj13FY.js.map +0 -1
  411. package/dist/chunks/pk-toggle-group-CWDwYlgR.js.map +0 -1
  412. package/dist/chunks/pk-tooltip-DAq-JZpg.js.map +0 -1
  413. package/dist/chunks/tiptap.styles-ChAfyVi9.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-calendar-CoUil0F7.js","names":[],"sources":["../../src/utils/date.ts","../../src/utils/date-matchers.ts","../../src/utils/week-info.ts","../../src/components/calendar/pk-calendar.styles.ts","../../src/components/calendar/pk-calendar.ts"],"sourcesContent":["/** ISO date helpers — ported from `date-picker/internal/iso`. */\n\nconst ISO_DATE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nexport function parseIsoDate(value: string | Date | null | undefined): Date | null {\n if (value == null || value === '') {\n return null;\n }\n\n // React/v1 DatePicker often passes a Date; never call string methods on it.\n if (value instanceof Date) {\n return coerceToDate(value);\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n const match = ISO_DATE.exec(value.trim());\n\n if (!match) {\n return null;\n }\n\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n\n if (month < 1 || month > 12 || day < 1 || day > 31) {\n return null;\n }\n\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nexport function formatIsoDate(date: Date | null | undefined): string {\n if (!date || Number.isNaN(date.getTime())) {\n return '';\n }\n\n const year = String(date.getFullYear()).padStart(4, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\nexport function coerceToDate(value: unknown): Date | null {\n if (value == null) {\n return null;\n }\n\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n return null;\n }\n\n return new Date(value.getFullYear(), value.getMonth(), value.getDate());\n }\n\n return parseIsoDate(String(value));\n}\n\nexport type DateRange = {\n from: Date | null;\n to: Date | null;\n};\n\nexport function parseRange(value: string | null | undefined): DateRange {\n if (!value) {\n return { from: null, to: null };\n }\n\n const parts = value.split('/');\n\n if (parts.length === 1) {\n return { from: parseIsoDate(parts[0]), to: null };\n }\n\n const from = parseIsoDate(parts[0]);\n const to = parseIsoDate(parts[1]);\n\n if (!from || !to) {\n return { from, to };\n }\n\n return from.getTime() <= to.getTime()\n ? { from, to }\n : { from: to, to: from };\n}\n\nexport function formatRange(range: DateRange | null | undefined): string {\n if (!range) {\n return '';\n }\n\n const { from, to } = range;\n\n if (!from && !to) {\n return '';\n }\n\n if (from && !to) {\n return formatIsoDate(from);\n }\n\n if (!from && to) {\n return formatIsoDate(to);\n }\n\n return `${formatIsoDate(from)}/${formatIsoDate(to)}`;\n}\n\n/**\n * Multi-date (\"multiple\" mode) serialization: a comma-separated list of ISO dates.\n * Always parsed/emitted deduped and sorted ascending so the stored value is stable\n * regardless of the order the user clicked days.\n */\nexport function parseDateList(value: string | null | undefined): Date[] {\n if (!value) {\n return [];\n }\n\n const seen = new Set<string>();\n const dates: Date[] = [];\n\n for (const part of value.split(',')) {\n const date = parseIsoDate(part.trim());\n\n if (!date) {\n continue;\n }\n\n const iso = formatIsoDate(date);\n\n if (seen.has(iso)) {\n continue;\n }\n\n seen.add(iso);\n dates.push(date);\n }\n\n dates.sort((a, b) => a.getTime() - b.getTime());\n\n return dates;\n}\n\nexport function formatDateList(dates: ReadonlyArray<Date | null | undefined>): string {\n const seen = new Set<string>();\n\n for (const date of dates) {\n const iso = formatIsoDate(date ?? null);\n\n if (iso) {\n seen.add(iso);\n }\n }\n\n return [...seen].sort().join(',');\n}\n\n/** Toggle a day in/out of a multi-date list, returning the new sorted CSV value. */\nexport function toggleDateInList(value: string | null | undefined, date: Date): string {\n const iso = formatIsoDate(date);\n\n if (!iso) {\n return value ?? '';\n }\n\n const existing = parseDateList(value);\n const next = existing.some((entry) => isSameDay(entry, date))\n ? existing.filter((entry) => !isSameDay(entry, date))\n : [...existing, date];\n\n return formatDateList(next);\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) {\n return false;\n }\n\n return a.getFullYear() === b.getFullYear()\n && a.getMonth() === b.getMonth()\n && a.getDate() === b.getDate();\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nexport function addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const lastDay = daysInMonth(target.getFullYear(), target.getMonth());\n\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nexport function addYears(date: Date, years: number): Date {\n return addMonths(date, years * 12);\n}\n\nexport function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nexport function todayDate(): Date {\n const now = new Date();\n\n return new Date(now.getFullYear(), now.getMonth(), now.getDate());\n}\n\nexport function diffDays(a: Date, b: Date): number {\n const ms = a.getTime() - b.getTime();\n\n return Math.round(ms / 86_400_000);\n}\n\n/** ISO 8601 week number for the given date. */\nexport function isoWeekNumber(date: Date): number {\n const target = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n const dayNum = (target.getDay() + 6) % 7;\n target.setDate(target.getDate() - dayNum + 3);\n\n const firstThursday = new Date(target.getFullYear(), 0, 4);\n const firstDayNum = (firstThursday.getDay() + 6) % 7;\n firstThursday.setDate(firstThursday.getDate() - firstDayNum + 3);\n\n return 1 + Math.round((target.getTime() - firstThursday.getTime()) / (7 * 86_400_000));\n}\n\nexport function formatDisplayDate(date: Date, locale?: string): string {\n return new Intl.DateTimeFormat(locale || undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(date);\n}\n","/** Date disabling matchers — ported from `date-picker/internal/matchers`. */\n\nimport {\n isSameDay,\n parseIsoDate,\n} from './date.js';\n\nexport type DisabledMatcherOptions = {\n min?: Date | null;\n max?: Date | null;\n disabledDates?: Date[];\n disabledDaysOfWeek?: number[];\n disablePast?: boolean;\n disableFuture?: boolean;\n today: Date;\n isDateDisabled?: (date: Date) => boolean;\n};\n\nexport function buildDisabledMatcher(options: DisabledMatcherOptions): (date: Date) => boolean {\n const {\n min,\n max,\n disabledDates = [],\n disabledDaysOfWeek = [],\n disablePast = false,\n disableFuture = false,\n today,\n isDateDisabled,\n } = options;\n\n const minTime = min?.getTime() ?? Number.NEGATIVE_INFINITY;\n const maxTime = max?.getTime() ?? Number.POSITIVE_INFINITY;\n const todayTime = today.getTime();\n const dayOfWeekSet = new Set(disabledDaysOfWeek);\n const dateTimeSet = new Set(disabledDates.map((date) => date.getTime()));\n\n return function isDisabled(date: Date): boolean {\n const time = date.getTime();\n\n if (time < minTime || time > maxTime) {\n return true;\n }\n\n if (disablePast && time < todayTime) {\n return true;\n }\n\n if (disableFuture && time > todayTime) {\n return true;\n }\n\n if (dayOfWeekSet.size && dayOfWeekSet.has(date.getDay())) {\n return true;\n }\n\n if (dateTimeSet.size && dateTimeSet.has(time)) {\n return true;\n }\n\n if (isDateDisabled?.(date)) {\n return true;\n }\n\n return false;\n };\n}\n\nexport function parseDisabledDates(value: string | string[] | Date[] | null | undefined): Date[] {\n if (value == null || value === '') {\n return [];\n }\n\n const list = Array.isArray(value) ? value : value.split(/\\s+/);\n const out: Date[] = [];\n\n for (const item of list) {\n if (item instanceof Date) {\n if (!Number.isNaN(item.getTime())) {\n out.push(new Date(item.getFullYear(), item.getMonth(), item.getDate()));\n }\n\n continue;\n }\n\n const parsed = parseIsoDate(String(item).trim());\n\n if (parsed) {\n out.push(parsed);\n }\n }\n\n return out;\n}\n\nconst WEEKDAY_NAMES = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n} as const;\n\nexport type WeekdayName = keyof typeof WEEKDAY_NAMES;\n\nexport function parseDaysOfWeek(value: string | null | undefined): number[] {\n if (value == null || value === '') {\n return [];\n }\n\n const tokens = String(value).toLowerCase().split(/\\s+/).filter(Boolean);\n const out = new Set<number>();\n\n for (const token of tokens) {\n if (token in WEEKDAY_NAMES) {\n out.add(WEEKDAY_NAMES[token as WeekdayName]);\n }\n }\n\n return [...out];\n}\n\nexport function includesDay(arr: Date[], target: Date): boolean {\n return arr.some((date) => isSameDay(date, target));\n}\n\nexport function anyDisabledInRange(\n start: Date,\n end: Date,\n isDisabled: (date: Date) => boolean,\n): boolean {\n const rangeStart = start.getTime() <= end.getTime() ? start : end;\n const rangeEnd = start.getTime() <= end.getTime() ? end : start;\n const cursor = new Date(rangeStart.getFullYear(), rangeStart.getMonth(), rangeStart.getDate());\n\n while (cursor.getTime() <= rangeEnd.getTime()) {\n if (isDisabled(cursor)) {\n return true;\n }\n\n cursor.setDate(cursor.getDate() + 1);\n }\n\n return false;\n}\n\nexport function allDisabledInRange(\n start: Date,\n end: Date,\n isDisabled: (date: Date) => boolean,\n): boolean {\n const rangeStart = start.getTime() <= end.getTime() ? start : end;\n const rangeEnd = start.getTime() <= end.getTime() ? end : start;\n const cursor = new Date(rangeStart.getFullYear(), rangeStart.getMonth(), rangeStart.getDate());\n\n while (cursor.getTime() <= rangeEnd.getTime()) {\n if (!isDisabled(cursor)) {\n return false;\n }\n\n cursor.setDate(cursor.getDate() + 1);\n }\n\n return true;\n}\n","/** Locale week info — ported from `date-picker/internal/week-info`. */\n\nexport type WeekdayName = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';\n\nexport type WeekInfo = {\n /** First day of the week (1=Monday … 7=Sunday, per Intl spec). */\n firstDay: number;\n /** Weekend day numbers (1=Monday … 7=Sunday). */\n weekend: number[];\n};\n\nconst SUNDAY_FIRST = new Set([\n 'US', 'CA', 'MX', 'BR', 'JP', 'PH', 'IL', 'AU', 'NZ', 'ZA',\n 'CO', 'VE', 'PE', 'EC', 'GT', 'HN', 'NI', 'SV', 'CR', 'PA',\n 'DO', 'PR', 'JM', 'TT', 'BS', 'BB', 'BZ', 'BO', 'BM', 'TW',\n 'HK', 'MO', 'SG', 'TH', 'ET', 'KE',\n]);\n\nconst SATURDAY_FIRST = new Set(['SA', 'AE', 'QA', 'KW', 'BH', 'OM', 'YE', 'JO', 'SY', 'IQ', 'EG', 'SD', 'DZ', 'LY']);\n\nconst FRI_SAT_WEEKEND = new Set([\n 'SA', 'AE', 'QA', 'KW', 'BH', 'OM', 'YE', 'JO', 'EG', 'SD',\n 'DZ', 'LY', 'SY', 'IQ', 'IL',\n]);\n\nfunction regionFromLocale(locale: string): string | null {\n try {\n const parsed = new Intl.Locale(locale);\n const region = parsed.maximize().region;\n\n return region ?? null;\n } catch {\n return null;\n }\n}\n\nfunction fallbackWeekInfo(locale: string): WeekInfo {\n const region = regionFromLocale(locale);\n let firstDay = 1;\n\n if (region && SUNDAY_FIRST.has(region)) {\n firstDay = 7;\n } else if (region && SATURDAY_FIRST.has(region)) {\n firstDay = 6;\n }\n\n const weekend = region && FRI_SAT_WEEKEND.has(region) ? [5, 6] : [6, 7];\n\n return { firstDay, weekend };\n}\n\nexport function getWeekInfo(locale: string): WeekInfo {\n try {\n const parsed = new Intl.Locale(locale) as Intl.Locale & {\n getWeekInfo?: () => WeekInfo;\n weekInfo?: WeekInfo;\n };\n\n const info = typeof parsed.getWeekInfo === 'function'\n ? parsed.getWeekInfo()\n : parsed.weekInfo;\n\n if (info && typeof info.firstDay === 'number' && Array.isArray(info.weekend)) {\n return { firstDay: info.firstDay, weekend: info.weekend };\n }\n } catch {\n // fall through\n }\n\n return fallbackWeekInfo(locale);\n}\n\n/** Convert Intl first day (1=Mon..7=Sun) to JS `Date.getDay()` (0=Sun..6=Sat). */\nexport function intlFirstDayToJsDay(intlFirstDay: number): number {\n return intlFirstDay === 7 ? 0 : intlFirstDay;\n}\n\nexport function intlWeekendToJsDays(intlWeekend: number[]): number[] {\n return intlWeekend.map(intlFirstDayToJsDay);\n}\n\nexport function resolveFirstDayOfWeek(\n attribute: 'auto' | WeekdayName,\n locale: string,\n): number {\n if (attribute !== 'auto') {\n const map: Record<WeekdayName, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n };\n\n return map[attribute];\n }\n\n return intlFirstDayToJsDay(getWeekInfo(locale).firstDay);\n}\n","import { css } from 'lit';\n\nimport { iconStyles } from '../../base/icon.styles.js';\n\nexport const pkCalendarStyles = css`\n ${iconStyles}\n @layer pk-component {\n :host {\n display: inline-block;\n width: fit-content;\n max-width: 100%;\n color: var(--pk-color-gray-900);\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: 1;\n --pk-date-cell-size: 1.75rem;\n --pk-date-cell-radius: 100%;\n --pk-date-gap: 0.25rem;\n --pk-date-column-min: var(--pk-date-cell-size);\n --pk-date-column-gap: 0;\n }\n\n :host([weekday-format='short']) {\n --pk-date-column-min: 2.125rem;\n --pk-date-column-gap: 0.125rem;\n }\n\n :host([weekday-format='long']) {\n --pk-date-column-min: 3.375rem;\n --pk-date-column-gap: 0.125rem;\n }\n\n :host([weekday-format='long']) .weekday {\n font-size: 0.7rem;\n }\n\n :host([size='xs']) {\n --pk-date-cell-size: 1.5rem;\n font-size: 11px;\n }\n\n :host([size='sm']) {\n --pk-date-cell-size: 1.625rem;\n font-size: 12px;\n }\n\n :host([size='lg']) {\n --pk-date-cell-size: 2rem;\n font-size: 14px;\n }\n\n :host([size='xl']) {\n --pk-date-cell-size: 2.25rem;\n font-size: 15px;\n }\n\n :host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .base {\n display: flex;\n flex-direction: column;\n gap: var(--pk-date-gap);\n width: fit-content;\n padding: 0.5rem;\n border: var(--pk-calendar-border, var(--pk-input-border));\n border-radius: var(--pk-radius-md);\n background: var(--pk-calendar-background, var(--pk-color-white));\n }\n\n :host(:not([bordered])) {\n --pk-calendar-border: 0;\n --pk-calendar-background: transparent;\n }\n\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.25rem;\n min-height: var(--pk-date-cell-size);\n padding-inline: 0.125rem;\n }\n\n .title {\n flex: 1;\n margin: 0;\n padding: 0.25rem 0.5rem;\n border: 0;\n border-radius: var(--pk-radius-sm);\n background: transparent;\n color: var(--pk-color-gray-900);\n font: inherit;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n text-align: center;\n cursor: pointer;\n user-select: none;\n }\n\n .title:hover:not(:disabled) {\n background: var(--pk-color-slate-100);\n }\n\n .nav-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--pk-date-cell-size);\n height: var(--pk-date-cell-size);\n margin: 0;\n padding: 0.25rem;\n border: 0;\n border-radius: var(--pk-radius-sm);\n background: transparent;\n color: var(--pk-color-gray-600);\n cursor: pointer;\n }\n\n .nav-button:hover:not(:disabled) {\n background: var(--pk-color-slate-100);\n color: var(--pk-color-gray-900);\n }\n\n .nav-button:disabled {\n opacity: 0.35;\n cursor: not-allowed;\n }\n\n .nav-button .icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n }\n\n .nav-button .icon svg {\n display: block;\n width: 12px;\n height: 12px;\n }\n\n .months {\n display: flex;\n gap: 1rem;\n }\n\n .month {\n display: flex;\n flex-direction: column;\n width: fit-content;\n min-width: calc(var(--pk-date-column-min) * 7 + var(--pk-date-column-gap) * 6);\n }\n\n :host([data-week-numbers]) .month {\n min-width: calc(\n var(--pk-date-cell-size) + var(--pk-date-column-gap) + var(--pk-date-column-min) * 7 + var(--pk-date-column-gap) * 6\n );\n }\n\n .month-label {\n margin-bottom: 0.5rem;\n font-size: 12px;\n font-weight: 500;\n text-align: center;\n color: var(--pk-color-gray-700);\n }\n\n .weekdays,\n .week {\n display: grid;\n grid-template-columns: repeat(7, minmax(var(--pk-date-column-min), 1fr));\n column-gap: var(--pk-date-column-gap);\n align-items: center;\n width: 100%;\n }\n\n :host([data-week-numbers]) .weekdays,\n :host([data-week-numbers]) .week {\n grid-template-columns: var(--pk-date-cell-size) repeat(7, minmax(var(--pk-date-column-min), 1fr));\n }\n\n .grid {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n width: 100%;\n margin-top: 0.2rem;\n }\n\n .weeknumber-header,\n .weeknumber {\n display: flex;\n align-items: center;\n justify-content: center;\n height: var(--pk-date-cell-size);\n color: var(--pk-color-gray-500);\n font-size: 0.8rem;\n font-weight: 400;\n user-select: none;\n }\n\n .weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: var(--pk-date-column-min);\n height: var(--pk-date-cell-size);\n padding-inline: 0.125rem;\n color: var(--pk-color-gray-500);\n font-size: 0.8rem;\n font-weight: 400;\n line-height: 1.1;\n text-align: center;\n white-space: nowrap;\n user-select: none;\n }\n\n .day,\n .day.is-placeholder {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n justify-self: center;\n width: var(--pk-date-cell-size);\n min-width: var(--pk-date-cell-size);\n max-width: var(--pk-date-cell-size);\n height: var(--pk-date-cell-size);\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: var(--pk-color-gray-900);\n font: inherit;\n font-size: 13px;\n font-weight: 400;\n line-height: 1;\n cursor: pointer;\n }\n\n .day.is-range-start,\n .day.is-range-end,\n .day.is-range-inner,\n .day.is-range-preview {\n justify-self: stretch;\n width: 100%;\n min-width: 0;\n max-width: none;\n }\n\n .day.is-range-start.is-range-end {\n justify-self: center;\n width: var(--pk-date-cell-size);\n min-width: var(--pk-date-cell-size);\n max-width: var(--pk-date-cell-size);\n }\n\n .day:focus-visible {\n outline: 2px solid var(--pk-color-blue-500);\n outline-offset: 1px;\n z-index: 1;\n }\n\n .day.is-outside {\n opacity: 0.6;\n }\n\n .day.is-disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n /* Day grid — circular today ring (fixed cell size, not column width) */\n .day.is-today:not(.is-range-start):not(.is-range-end):not(.is-range-inner)::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 1px solid var(--pk-color-blue-500);\n border-radius: var(--pk-date-cell-radius);\n pointer-events: none;\n }\n\n .day.is-selected:not(.is-range-start):not(.is-range-end):not(.is-range-inner) {\n background: var(--pk-color-gray-200);\n border-radius: var(--pk-date-cell-radius);\n color: var(--pk-color-gray-900);\n font-weight: 400;\n }\n\n .day.is-range-start,\n .day.is-range-end {\n background: var(--pk-color-gray-200);\n color: var(--pk-color-gray-900);\n font-weight: 400;\n }\n\n .day.is-range-start.is-range-end {\n border-radius: var(--pk-date-cell-radius);\n }\n\n .day.is-range-start:not(.is-range-end) {\n border-radius: var(--pk-date-cell-radius) 0 0 var(--pk-date-cell-radius);\n }\n\n .day.is-range-end:not(.is-range-start) {\n border-radius: 0 var(--pk-date-cell-radius) var(--pk-date-cell-radius) 0;\n }\n\n .day.is-range-inner {\n background: var(--pk-color-gray-200);\n border-radius: 0;\n }\n\n .day.is-range-preview:not(.is-range-start):not(.is-range-end) {\n background: var(--pk-color-gray-200);\n opacity: 0.7;\n }\n\n .day.is-placeholder {\n visibility: hidden;\n pointer-events: none;\n }\n\n .live-region {\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 slot[name='footer']::slotted(*) {\n display: block;\n padding-top: 0.25rem;\n }\n\n .view-grid {\n display: grid;\n grid-template-columns: repeat(3, minmax(var(--pk-date-cell-size), 1fr));\n gap: 0.25rem;\n width: 100%;\n min-width: calc(var(--pk-date-column-min) * 7 + var(--pk-date-column-gap) * 6);\n }\n\n .view-row {\n display: contents;\n }\n\n .view-cell {\n display: contents;\n }\n\n .view-item {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--pk-date-cell-size);\n margin: 0;\n padding: 0.375rem 0.5rem;\n border: 0;\n border-radius: var(--pk-radius-sm);\n background: transparent;\n color: var(--pk-color-gray-900);\n font: inherit;\n font-size: 13px;\n cursor: pointer;\n }\n\n .view-item.is-selected {\n background: var(--pk-color-gray-200);\n font-weight: 500;\n }\n\n /* Month/year grid — rectangular today outline */\n .view-item.is-today:not(.is-selected) {\n box-shadow: inset 0 0 0 1px var(--pk-color-blue-500);\n border-radius: var(--pk-radius-sm);\n }\n\n .view-item.is-disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .view-item:focus-visible {\n outline: 2px solid var(--pk-color-blue-500);\n outline-offset: 1px;\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport type { PropertyValues } from 'lit';\n\nimport { chevronLeft, chevronRight, renderIconHtml } from '../../icons/index.js';\nimport { PkElement } from '../../base/pk-element.js';\nimport { HasSlotController } from '../../internal/has-slot.js';\nimport {\n addDays,\n addMonths,\n addYears,\n coerceToDate,\n diffDays,\n formatDisplayDate,\n formatIsoDate,\n formatRange,\n isoWeekNumber,\n isSameDay,\n isSameMonth,\n parseDateList,\n parseIsoDate,\n parseRange,\n startOfMonth,\n todayDate,\n toggleDateInList,\n type DateRange,\n} from '../../utils/date.js';\nimport {\n allDisabledInRange,\n buildDisabledMatcher,\n parseDaysOfWeek,\n parseDisabledDates,\n} from '../../utils/date-matchers.js';\nimport {\n getWeekInfo,\n intlWeekendToJsDays,\n resolveFirstDayOfWeek,\n type WeekdayName,\n} from '../../utils/week-info.js';\nimport { pkCalendarStyles } from './pk-calendar.styles.js';\n\nexport type PkCalendarMode = 'single' | 'range' | 'multiple';\nexport type PkCalendarSize = 'xs' | 'sm' | 'default' | 'lg' | 'xl';\nexport type PkCalendarFirstDayOfWeek = 'auto' | WeekdayName;\nexport type PkCalendarView = 'days' | 'months' | 'years';\nexport type PkCalendarPageBy = 'months' | 'single';\nexport type PkCalendarDayContent = (date: Date) => string | null;\n\nconst CHEVRON_LEFT = renderIconHtml(chevronLeft);\nconst CHEVRON_RIGHT = renderIconHtml(chevronRight);\n\ntype DayState = {\n date: Date;\n monthAnchor: Date;\n outside: boolean;\n today: boolean;\n weekend: boolean;\n disabled: boolean;\n selected: boolean;\n rangeStart: boolean;\n rangeEnd: boolean;\n rangeInner: boolean;\n rangePreview: boolean;\n roving: boolean;\n};\n\n/**\n * Inline calendar grid — mirrors React `Calendar` ( `pk-date-picker` API).\n *\n * @slot previous-icon\n * @slot next-icon\n * @slot footer\n * @slot day-YYYY-MM-DD - Custom content for a specific day cell\n *\n * @event input - Value changes during interaction\n * @event change - User commits a new value\n * @event pk-focus-day - Focused day changed; `detail.date`\n * @event pk-view-change - View changed; `detail.view`, `detail.date`\n */\n@customElement('pk-calendar')\nexport class PkCalendar extends PkElement {\n static override styles = pkCalendarStyles;\n\n private readonly hasSlotController = new HasSlotController(this, 'footer', 'previous-icon', 'next-icon');\n\n @property({ reflect: true })\n mode: PkCalendarMode = 'single';\n\n @property({ reflect: true })\n size: PkCalendarSize = 'default';\n\n @property({ reflect: true })\n value = '';\n\n @property({ reflect: true })\n min = '';\n\n @property({ reflect: true })\n max = '';\n\n @property({ reflect: true })\n today = '';\n\n @property({ reflect: true })\n view: PkCalendarView = 'days';\n\n @property({ type: Number, reflect: true })\n months: 1 | 2 = 1;\n\n @property({ attribute: 'page-by', reflect: true })\n pageBy: PkCalendarPageBy = 'months';\n\n @property({ attribute: 'focused-date', reflect: true })\n focusedDate = '';\n\n @property({ attribute: 'first-day-of-week', reflect: true })\n firstDayOfWeek: PkCalendarFirstDayOfWeek = 'auto';\n\n @property({ attribute: 'with-outside-days', type: Boolean, reflect: true })\n withOutsideDays = true;\n\n @property({ attribute: 'with-week-numbers', type: Boolean, reflect: true })\n withWeekNumbers = false;\n\n @property({ attribute: 'weekday-format', reflect: true })\n weekdayFormat: 'narrow' | 'short' | 'long' = 'narrow';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n /** When false, omits the outer frame — use inside popovers (e.g. `pk-date-picker`). */\n @property({ type: Boolean, reflect: true })\n bordered = true;\n\n @property({ attribute: 'disabled-dates' })\n disabledDatesRaw = '';\n\n @property({ attribute: 'disabled-days-of-week', reflect: true })\n disabledDaysOfWeek = '';\n\n @property({ attribute: 'disable-past', type: Boolean, reflect: true })\n disablePast = false;\n\n @property({ attribute: 'disable-future', type: Boolean, reflect: true })\n disableFuture = false;\n\n @property({ attribute: 'min-range', type: Number })\n minRange = 0;\n\n @property({ attribute: 'max-range', type: Number })\n maxRange = 0;\n\n @property({ reflect: true })\n locale = '';\n\n @property({ attribute: false })\n isDateDisabled?: (date: Date) => boolean;\n\n @property({ attribute: false })\n dayContent?: PkCalendarDayContent;\n\n @state()\n private viewAnchor = startOfMonth(todayDate());\n\n @state()\n private rangeAnchor: Date | null = null;\n\n @state()\n private hoverDate: Date | null = null;\n\n @state()\n private liveAnnouncement = '';\n\n @state()\n private focusedMonth: number | null = null;\n\n @state()\n private focusedYear: number | null = null;\n\n @state()\n private daySlotNames: string[] = [];\n\n private childrenObserver?: MutationObserver;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncViewAnchor();\n this.syncCustomStates();\n this.updateDaySlots();\n this.childrenObserver = new MutationObserver(() => this.updateDaySlots());\n this.childrenObserver.observe(this, { childList: true, attributes: true, attributeFilter: ['slot'] });\n }\n\n override disconnectedCallback(): void {\n this.childrenObserver?.disconnect();\n super.disconnectedCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n if (changed.has('value') || changed.has('focusedDate') || changed.has('mode')) {\n this.syncViewAnchor();\n }\n\n if (changed.has('disabled') || changed.has('readonly') || changed.has('mode') || changed.has('withWeekNumbers')) {\n this.syncCustomStates();\n }\n\n if (changed.has('view')) {\n this.emitViewChange();\n }\n\n super.willUpdate(changed);\n }\n\n private updateDaySlots(): void {\n const names = [...this.children]\n .map((child) => child.getAttribute('slot'))\n .filter((name): name is string => Boolean(name?.startsWith('day-')));\n\n if (names.join(',') !== this.daySlotNames.join(',')) {\n this.daySlotNames = names;\n }\n }\n\n private syncCustomStates(): void {\n this.toggleAttribute('data-range', this.mode === 'range');\n this.toggleAttribute('data-multiple', this.mode === 'multiple');\n this.toggleAttribute('data-week-numbers', this.withWeekNumbers);\n }\n\n private get resolvedLocale(): string {\n return this.locale || this.lang || document.documentElement.lang || 'en';\n }\n\n private get resolvedToday(): Date {\n return parseIsoDate(this.today) ?? todayDate();\n }\n\n /** Representative selected date used to anchor the view/focus across all modes. */\n private get primarySelectedDate(): Date | null {\n if (this.mode === 'single') {\n return parseIsoDate(this.value);\n }\n\n if (this.mode === 'multiple') {\n return parseDateList(this.value)[0] ?? null;\n }\n\n return parseRange(this.value).from;\n }\n\n private get resolvedFocusedDate(): Date {\n return parseIsoDate(this.focusedDate)\n ?? coerceToDate(this.primarySelectedDate)\n ?? this.resolvedToday;\n }\n\n private get isDisabledMatcher(): (date: Date) => boolean {\n return buildDisabledMatcher({\n min: parseIsoDate(this.min),\n max: parseIsoDate(this.max),\n disabledDates: parseDisabledDates(this.disabledDatesRaw),\n disabledDaysOfWeek: parseDaysOfWeek(this.disabledDaysOfWeek),\n disablePast: this.disablePast,\n disableFuture: this.disableFuture,\n today: this.resolvedToday,\n isDateDisabled: this.isDateDisabled,\n });\n }\n\n private get weekendDays(): Set<number> {\n return new Set(intlWeekendToJsDays(getWeekInfo(this.resolvedLocale).weekend));\n }\n\n private get pageStep(): number {\n return this.pageBy === 'single' ? 1 : this.months;\n }\n\n private get visibleMonthAnchors(): Date[] {\n const anchors = [this.viewAnchor];\n\n if (this.months === 2) {\n anchors.push(startOfMonth(addMonths(this.viewAnchor, 1)));\n }\n\n return anchors;\n }\n\n private syncViewAnchor(): void {\n const focus = this.resolvedFocusedDate;\n\n if (!this.visibleMonthAnchors.some((anchor) => isSameMonth(focus, anchor))) {\n this.viewAnchor = startOfMonth(focus);\n }\n }\n\n get valueAsDate(): Date | null {\n return this.mode === 'single' ? parseIsoDate(this.value) : null;\n }\n\n get valueAsRange(): DateRange {\n return parseRange(this.value);\n }\n\n /** Sorted, deduped selection for `multiple` mode (empty otherwise). */\n get valueAsDates(): Date[] {\n return this.mode === 'multiple' ? parseDateList(this.value) : [];\n }\n\n focus(options?: FocusOptions): void {\n const selector = this.view === 'days'\n ? '.day.is-roving'\n : this.view === 'months'\n ? '.view-item.is-roving'\n : '.view-item.is-roving';\n\n this.renderRoot.querySelector<HTMLButtonElement>(selector)?.focus(options);\n }\n\n goToDate(date: string | Date): void {\n const parsed = coerceToDate(date);\n\n if (!parsed) {\n return;\n }\n\n this.viewAnchor = startOfMonth(parsed);\n this.focusedDate = formatIsoDate(parsed);\n this.view = 'days';\n }\n\n goToToday(): void {\n this.goToDate(this.resolvedToday);\n }\n\n clear(): void {\n if (this.disabled || this.readonly) {\n return;\n }\n\n this.value = '';\n this.rangeAnchor = null;\n this.hoverDate = null;\n this.emitInput();\n this.emitChange();\n }\n\n private emitInput(): void {\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n }\n\n private emitChange(): void {\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private emitFocusDay(date: Date): void {\n this.dispatchEvent(new CustomEvent('pk-focus-day', {\n detail: { date },\n bubbles: true,\n composed: true,\n }));\n }\n\n private emitViewChange(): void {\n this.dispatchEvent(new CustomEvent('pk-view-change', {\n detail: { view: this.view, date: this.resolvedFocusedDate },\n bubbles: true,\n composed: true,\n }));\n }\n\n private announce(message: string): void {\n this.liveAnnouncement = `${message}\\u200B`;\n }\n\n private setView(next: PkCalendarView): void {\n if (this.view === next) {\n return;\n }\n\n this.view = next;\n }\n\n private handlePrevious = (): void => {\n if (this.view === 'days') {\n this.viewAnchor = addMonths(this.viewAnchor, -this.pageStep);\n return;\n }\n\n if (this.view === 'months') {\n this.viewAnchor = addYears(this.viewAnchor, -1);\n return;\n }\n\n this.viewAnchor = addYears(this.viewAnchor, -12);\n };\n\n private handleNext = (): void => {\n if (this.view === 'days') {\n this.viewAnchor = addMonths(this.viewAnchor, this.pageStep);\n return;\n }\n\n if (this.view === 'months') {\n this.viewAnchor = addYears(this.viewAnchor, 1);\n return;\n }\n\n this.viewAnchor = addYears(this.viewAnchor, 12);\n };\n\n private handleTitleClick = (): void => {\n if (this.disabled) {\n return;\n }\n\n if (this.view === 'days') {\n this.setView('months');\n this.focusedMonth = this.resolvedFocusedDate.getMonth();\n return;\n }\n\n if (this.view === 'months') {\n this.setView('years');\n this.focusedYear = this.resolvedFocusedDate.getFullYear();\n }\n };\n\n private handleDayClick(date: Date, disabled: boolean): void {\n if (this.disabled || this.readonly || disabled) {\n return;\n }\n\n if (this.mode === 'single') {\n this.value = formatIsoDate(date);\n this.focusedDate = formatIsoDate(date);\n this.emitInput();\n this.emitChange();\n this.announce(formatDisplayDate(date, this.resolvedLocale));\n return;\n }\n\n if (this.mode === 'multiple') {\n // Each click toggles the day in/out of the set; the picker keeps the panel\n // open so several dates can be chosen before dismissing.\n const wasSelected = parseDateList(this.value).some((entry) => isSameDay(entry, date));\n this.value = toggleDateInList(this.value, date);\n this.focusedDate = formatIsoDate(date);\n this.emitInput();\n this.emitChange();\n this.announce(\n `${wasSelected ? 'Removed' : 'Added'} ${formatDisplayDate(date, this.resolvedLocale)}`,\n );\n return;\n }\n\n if (!this.rangeAnchor) {\n this.rangeAnchor = date;\n this.value = formatIsoDate(date);\n this.focusedDate = formatIsoDate(date);\n this.emitInput();\n return;\n }\n\n const from = this.rangeAnchor;\n const to = date;\n const ordered = from.getTime() <= to.getTime()\n ? { from, to }\n : { from: to, to: from };\n\n if (this.minRange > 0 && diffDays(ordered.to, ordered.from) + 1 < this.minRange) {\n this.announce(`Range must be at least ${this.minRange} days`);\n return;\n }\n\n if (this.maxRange > 0 && diffDays(ordered.to, ordered.from) + 1 > this.maxRange) {\n this.announce(`Range must be at most ${this.maxRange} days`);\n return;\n }\n\n this.value = formatRange(ordered);\n this.focusedDate = formatIsoDate(date);\n this.rangeAnchor = null;\n this.hoverDate = null;\n this.emitInput();\n this.emitChange();\n this.announce(`${formatDisplayDate(ordered.from, this.resolvedLocale)} – ${formatDisplayDate(ordered.to, this.resolvedLocale)}`);\n }\n\n private handleDayHover(date: Date): void {\n if (this.mode !== 'range' || !this.rangeAnchor) {\n return;\n }\n\n this.hoverDate = date;\n this.emitFocusDay(date);\n }\n\n private handleGridMouseLeave = (): void => {\n this.hoverDate = null;\n };\n\n private handleMonthPick(monthIndex: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n\n const next = new Date(this.viewAnchor.getFullYear(), monthIndex, 1);\n\n if (this.isMonthFullyDisabled(next)) {\n return;\n }\n\n this.viewAnchor = next;\n this.focusedDate = formatIsoDate(next);\n this.setView('days');\n }\n\n private handleYearPick(year: number): void {\n if (this.disabled || this.readonly) {\n return;\n }\n\n const next = new Date(year, this.viewAnchor.getMonth(), 1);\n\n if (this.isYearFullyDisabled(year)) {\n return;\n }\n\n this.viewAnchor = next;\n this.focusedDate = formatIsoDate(next);\n this.setView('months');\n this.focusedMonth = next.getMonth();\n }\n\n private handleDayKeyDown(event: KeyboardEvent, date: Date, disabled: boolean): void {\n if (disabled) {\n return;\n }\n\n let next: Date | null = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n next = addDays(date, -1);\n break;\n case 'ArrowRight':\n next = addDays(date, 1);\n break;\n case 'ArrowUp':\n next = addDays(date, -7);\n break;\n case 'ArrowDown':\n next = addDays(date, 7);\n break;\n case 'PageUp':\n next = addMonths(date, -1);\n break;\n case 'PageDown':\n next = addMonths(date, 1);\n break;\n case 'Home':\n next = startOfMonth(date);\n break;\n case 'End':\n next = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.handleDayClick(date, disabled);\n return;\n case 'Escape':\n if (this.rangeAnchor) {\n event.preventDefault();\n this.rangeAnchor = null;\n this.hoverDate = null;\n this.requestUpdate();\n }\n\n return;\n default:\n return;\n }\n\n event.preventDefault();\n\n if (!next) {\n return;\n }\n\n this.focusedDate = formatIsoDate(next);\n\n if (!this.visibleMonthAnchors.some((anchor) => isSameMonth(next!, anchor))) {\n this.viewAnchor = startOfMonth(next);\n }\n\n this.emitFocusDay(next);\n this.requestUpdate();\n queueMicrotask(() => this.focus());\n }\n\n private isMonthFullyDisabled(monthStart: Date): boolean {\n const end = new Date(monthStart.getFullYear(), monthStart.getMonth() + 1, 0);\n return allDisabledInRange(monthStart, end, this.isDisabledMatcher);\n }\n\n private isYearFullyDisabled(year: number): boolean {\n const start = new Date(year, 0, 1);\n const end = new Date(year, 11, 31);\n return allDisabledInRange(start, end, this.isDisabledMatcher);\n }\n\n private formatWeekdayLabel(date: Date): string {\n if (this.weekdayFormat === 'narrow') {\n // Match react-day-picker cccccc — two-letter labels (Su, Mo, Tu…)\n const short = new Intl.DateTimeFormat(this.resolvedLocale, { weekday: 'short' }).format(date);\n return short.slice(0, 2);\n }\n\n return new Intl.DateTimeFormat(this.resolvedLocale, { weekday: this.weekdayFormat }).format(date);\n }\n\n private buildWeekdayLabels(): string[] {\n const firstDay = resolveFirstDayOfWeek(this.firstDayOfWeek, this.resolvedLocale);\n const labels: string[] = [];\n\n for (let index = 0; index < 7; index += 1) {\n const day = (firstDay + index) % 7;\n const date = new Date(2024, 0, day === 0 ? 7 : day);\n labels.push(this.formatWeekdayLabel(date));\n }\n\n return labels;\n }\n\n private buildMonthDays(monthAnchor: Date): Date[] {\n const firstDay = resolveFirstDayOfWeek(this.firstDayOfWeek, this.resolvedLocale);\n const monthStart = startOfMonth(monthAnchor);\n const offset = (monthStart.getDay() - firstDay + 7) % 7;\n const gridStart = addDays(monthStart, -offset);\n const days: Date[] = [];\n\n for (let index = 0; index < 42; index += 1) {\n days.push(addDays(gridStart, index));\n }\n\n return days;\n }\n\n private computeDayState(date: Date, monthAnchor: Date): DayState {\n const isDisabled = this.isDisabledMatcher(date);\n const range = parseRange(this.value);\n const selectedSingle = this.mode === 'single' && isSameDay(parseIsoDate(this.value), date);\n const selectedMultiple = this.mode === 'multiple'\n && parseDateList(this.value).some((entry) => isSameDay(entry, date));\n const rangeStart = this.mode === 'range' && isSameDay(range.from, date);\n const rangeEnd = this.mode === 'range' && isSameDay(range.to, date);\n const rangeInner = this.mode === 'range'\n && range.from\n && range.to\n && date.getTime() > range.from.getTime()\n && date.getTime() < range.to.getTime();\n\n let rangePreview = false;\n\n if (this.mode === 'range' && this.rangeAnchor && this.hoverDate) {\n const anchor = this.rangeAnchor;\n const hover = this.hoverDate;\n const start = anchor.getTime() <= hover.getTime() ? anchor : hover;\n const end = anchor.getTime() <= hover.getTime() ? hover : anchor;\n\n rangePreview = date.getTime() >= start.getTime() && date.getTime() <= end.getTime();\n }\n\n return {\n date,\n monthAnchor,\n outside: !isSameMonth(date, monthAnchor),\n today: isSameDay(date, this.resolvedToday),\n weekend: this.weekendDays.has(date.getDay()),\n disabled: isDisabled,\n selected: selectedSingle || selectedMultiple || rangeStart || rangeEnd,\n rangeStart,\n rangeEnd,\n rangeInner: Boolean(rangeInner),\n rangePreview,\n roving: isSameDay(date, this.resolvedFocusedDate),\n };\n }\n\n private renderDayContent(state: DayState) {\n const slotName = `day-${formatIsoDate(state.date)}`;\n\n if (this.daySlotNames.includes(slotName)) {\n return html`<slot name=${slotName}></slot>`;\n }\n\n const custom = this.dayContent?.(state.date);\n\n if (custom) {\n return unsafeHTML(custom);\n }\n\n return html`<span part=\"day-label\">${state.date.getDate()}</span>`;\n }\n\n private renderDay(state: DayState) {\n if (!this.withOutsideDays && state.outside) {\n return html`<span part=\"day-placeholder\" class=\"day is-placeholder\" aria-hidden=\"true\"></span>`;\n }\n\n const label = formatDisplayDate(state.date, this.resolvedLocale);\n\n return html`\n <button\n type=\"button\"\n part=\"day\"\n class=${classMap({\n day: true,\n 'is-outside': state.outside,\n 'is-today': state.today,\n 'is-weekend': state.weekend,\n 'is-disabled': state.disabled,\n 'is-selected': state.selected,\n 'is-range-start': state.rangeStart,\n 'is-range-end': state.rangeEnd,\n 'is-range-inner': state.rangeInner,\n 'is-range-preview': state.rangePreview,\n 'is-roving': state.roving,\n })}\n tabindex=${state.roving ? '0' : '-1'}\n ?disabled=${state.disabled}\n aria-label=${label}\n aria-selected=${state.selected ? 'true' : 'false'}\n aria-current=${state.today ? 'date' : nothing}\n @click=${() => this.handleDayClick(state.date, state.disabled)}\n @mouseenter=${() => this.handleDayHover(state.date)}\n @keydown=${(event: KeyboardEvent) => this.handleDayKeyDown(event, state.date, state.disabled)}\n >\n ${this.renderDayContent(state)}\n </button>\n `;\n }\n\n private getMonthWeeks(monthAnchor: Date): Date[][] {\n const days = this.buildMonthDays(monthAnchor);\n const weeks: Date[][] = [];\n\n for (let index = 0; index < days.length; index += 7) {\n weeks.push(days.slice(index, index + 7));\n }\n\n if (this.withOutsideDays) {\n return weeks;\n }\n\n return weeks.filter((week) => week.some((date) => isSameMonth(date, monthAnchor)));\n }\n\n private renderMonth(monthAnchor: Date, showLabel = false) {\n const weekdays = this.buildWeekdayLabels();\n const title = new Intl.DateTimeFormat(this.resolvedLocale, {\n month: 'long',\n year: 'numeric',\n }).format(monthAnchor);\n\n const weeks = this.getMonthWeeks(monthAnchor);\n\n return html`\n <div part=\"month\" class=\"month\">\n ${showLabel\n ? html`<div part=\"month-label\" class=\"month-label\">${title}</div>`\n : nothing}\n <div part=\"weekdays\" class=\"weekdays\" role=\"row\">\n ${this.withWeekNumbers\n ? html`<span part=\"weeknumbers\" class=\"weeknumber-header\" role=\"columnheader\">#</span>`\n : nothing}\n ${weekdays.map((weekday) => html`\n <span part=\"weekday\" class=\"weekday\" role=\"columnheader\">${weekday}</span>\n `)}\n </div>\n <div\n part=\"grid\"\n class=\"grid\"\n role=\"grid\"\n aria-label=${title}\n @mouseleave=${this.handleGridMouseLeave}\n >\n ${weeks.map((week) => html`\n <div part=\"week\" class=\"week\" role=\"row\">\n ${this.withWeekNumbers\n ? html`<span part=\"weeknumber\" class=\"weeknumber\" role=\"gridcell\">${isoWeekNumber(week[0])}</span>`\n : nothing}\n ${week.map((date) => this.renderDay(this.computeDayState(date, monthAnchor)))}\n </div>\n `)}\n </div>\n </div>\n `;\n }\n\n private renderViewRows(items: Array<ReturnType<typeof html>>) {\n const rows: Array<ReturnType<typeof html>> = [];\n\n for (let index = 0; index < items.length; index += 3) {\n rows.push(html`\n <div part=\"view-row\" class=\"view-row\" role=\"row\">\n ${items.slice(index, index + 3)}\n </div>\n `);\n }\n\n return rows;\n }\n\n private renderMonthsView() {\n const year = this.viewAnchor.getFullYear();\n const formatter = new Intl.DateTimeFormat(this.resolvedLocale, { month: 'long' });\n const selectedDate = this.primarySelectedDate;\n const selectedMonth = selectedDate?.getMonth();\n const rovingMonth = this.focusedMonth ?? this.resolvedFocusedDate.getMonth();\n const items = [];\n\n for (let monthIndex = 0; monthIndex < 12; monthIndex += 1) {\n const monthStart = new Date(year, monthIndex, 1);\n const disabled = this.isMonthFullyDisabled(monthStart);\n const selected = selectedMonth === monthIndex;\n const todayMonth = this.resolvedToday.getFullYear() === year && this.resolvedToday.getMonth() === monthIndex;\n const roving = rovingMonth === monthIndex;\n\n items.push(html`\n <div part=\"view-cell\" class=\"view-cell\" role=\"gridcell\">\n <button\n type=\"button\"\n part=\"view-item ${todayMonth ? 'view-item-today' : ''} ${selected ? 'view-item-selected' : ''} ${disabled ? 'view-item-disabled' : ''}\"\n class=${classMap({\n 'view-item': true,\n 'is-today': todayMonth,\n 'is-selected': selected,\n 'is-disabled': disabled,\n 'is-roving': roving,\n })}\n tabindex=${roving ? '0' : '-1'}\n ?disabled=${disabled}\n @click=${() => this.handleMonthPick(monthIndex)}\n >\n ${formatter.format(monthStart)}\n </button>\n </div>\n `);\n }\n\n return html`\n <div part=\"view-grid\" class=\"view-grid\" role=\"grid\">\n ${this.renderViewRows(items)}\n </div>\n `;\n }\n\n private renderYearsView() {\n const centerYear = this.viewAnchor.getFullYear();\n const decadeStart = Math.floor(centerYear / 12) * 12;\n const selectedDate = this.primarySelectedDate;\n const selectedYear = selectedDate?.getFullYear();\n const rovingYear = this.focusedYear ?? this.resolvedFocusedDate.getFullYear();\n const items = [];\n\n for (let offset = 0; offset < 12; offset += 1) {\n const year = decadeStart + offset;\n const disabled = this.isYearFullyDisabled(year);\n const selected = selectedYear === year;\n const todayYear = this.resolvedToday.getFullYear() === year;\n const roving = rovingYear === year;\n\n items.push(html`\n <div part=\"view-cell\" class=\"view-cell\" role=\"gridcell\">\n <button\n type=\"button\"\n part=\"view-item ${todayYear ? 'view-item-today' : ''} ${selected ? 'view-item-selected' : ''} ${disabled ? 'view-item-disabled' : ''}\"\n class=${classMap({\n 'view-item': true,\n 'is-today': todayYear,\n 'is-selected': selected,\n 'is-disabled': disabled,\n 'is-roving': roving,\n })}\n tabindex=${roving ? '0' : '-1'}\n ?disabled=${disabled}\n @click=${() => this.handleYearPick(year)}\n >\n ${year}\n </button>\n </div>\n `);\n }\n\n return html`\n <div part=\"view-grid\" class=\"view-grid\" role=\"grid\">\n ${this.renderViewRows(items)}\n </div>\n `;\n }\n\n private renderHeaderTitle() {\n if (this.view === 'months') {\n return String(this.viewAnchor.getFullYear());\n }\n\n if (this.view === 'years') {\n const centerYear = this.viewAnchor.getFullYear();\n const decadeStart = Math.floor(centerYear / 12) * 12;\n return `${decadeStart} – ${decadeStart + 11}`;\n }\n\n if (this.months === 2) {\n const first = new Intl.DateTimeFormat(this.resolvedLocale, { month: 'long', year: 'numeric' }).format(this.viewAnchor);\n const second = new Intl.DateTimeFormat(this.resolvedLocale, { month: 'long', year: 'numeric' }).format(addMonths(this.viewAnchor, 1));\n return `${first} – ${second}`;\n }\n\n return new Intl.DateTimeFormat(this.resolvedLocale, {\n month: 'long',\n year: 'numeric',\n }).format(this.viewAnchor);\n }\n\n override render() {\n const showDualLabels = this.view === 'days' && this.months === 2;\n\n return html`\n <div part=\"base\" class=\"base\">\n <div part=\"header\" class=\"header\">\n <button\n type=\"button\"\n part=\"previous\"\n class=\"nav-button\"\n aria-label=\"Previous\"\n ?disabled=${this.disabled}\n @click=${this.handlePrevious}\n >\n <slot name=\"previous-icon\">\n <span class=\"icon\" aria-hidden=\"true\">${unsafeSVG(CHEVRON_LEFT)}</span>\n </slot>\n </button>\n <button\n type=\"button\"\n part=\"title\"\n class=\"title\"\n ?disabled=${this.disabled}\n @click=${this.view === 'years' ? undefined : this.handleTitleClick}\n >\n ${this.renderHeaderTitle()}\n </button>\n <button\n type=\"button\"\n part=\"next\"\n class=\"nav-button\"\n aria-label=\"Next\"\n ?disabled=${this.disabled}\n @click=${this.handleNext}\n >\n <slot name=\"next-icon\">\n <span class=\"icon\" aria-hidden=\"true\">${unsafeSVG(CHEVRON_RIGHT)}</span>\n </slot>\n </button>\n </div>\n\n <div part=\"months\" class=\"months\">\n ${this.view === 'days'\n ? this.visibleMonthAnchors.map((anchor) => this.renderMonth(anchor, showDualLabels))\n : this.view === 'months'\n ? this.renderMonthsView()\n : this.renderYearsView()}\n </div>\n\n ${this.hasSlotController.test('footer')\n ? html`<div part=\"footer\"><slot name=\"footer\"></slot></div>`\n : nothing}\n\n <div class=\"live-region\" aria-live=\"polite\" aria-atomic=\"true\">\n ${this.liveAnnouncement}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-calendar': PkCalendar;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-checkbox-Bavq3-9C.js","names":[],"sources":["../../src/icons/checkbox-indicators.ts","../../src/base/checkbox-control.styles.ts","../../src/components/checkbox/pk-checkbox.styles.ts","../../src/components/checkbox/pk-checkbox.ts"],"sourcesContent":["import { html, type TemplateResult } from 'lit';\n\n/** Craft checkbox tick — matches plugin-kit-react Checkbox.tsx */\nexport function renderCheckboxCheckIcon(): TemplateResult {\n return html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-hidden=\"true\" viewBox=\"0 0 640 640\">\n <path\n fill=\"currentColor\"\n d=\"M557.5 192L534.9 214.6L278.9 470.6C266.4 483.1 246.1 483.1 233.6 470.6L105.6 342.6L83 320L128.3 274.7C129.6 276 172.3 318.7 256.3 402.7L489.7 169.3L512.3 146.7L557.6 192z\"\n />\n </svg>\n `;\n}\n\n/** Craft checkbox indeterminate mark — matches plugin-kit-react Checkbox.tsx */\nexport function renderCheckboxIndeterminateIcon(): TemplateResult {\n return html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-hidden=\"true\" viewBox=\"0 0 640 640\">\n <path fill=\"currentColor\" d=\"M96 352V288H544V352H96z\" />\n </svg>\n `;\n}\n","import { css } from 'lit';\n\n/** Shared checkbox/radio control box — Craft tokens, border-box sizing. */\nexport const checkboxControlStyles = css`\n @layer pk-component {\n .control {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n position: relative;\n box-sizing: border-box;\n width: var(--pk-checkbox-size);\n height: var(--pk-checkbox-size);\n border: 1px solid var(--pk-checkbox-border-color, #c0cbd9);\n border-radius: var(--pk-radius-sm);\n background: var(--pk-color-white);\n cursor: pointer;\n transition: border-color 0.12s ease, box-shadow 0.12s ease;\n }\n\n :host([disabled]) .control {\n cursor: not-allowed;\n }\n\n .input:focus-visible + .control {\n border-color: var(--pk-color-sky-600);\n box-shadow: 0 0 0 1px var(--pk-color-sky-600), 0 0 4px 0 hsl(from var(--pk-color-sky-600) h s l / 0.7);\n }\n\n :host([invalid]) .control,\n .input[aria-invalid='true'] + .control {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([invalid]) .input:focus-visible + .control,\n .input[aria-invalid='true']:focus-visible + .control {\n border-color: var(--pk-color-rose-600);\n box-shadow: 0 0 0 1px var(--pk-color-rose-600), 0 0 4px 0 hsl(from var(--pk-color-rose-600) h s l / 0.7);\n }\n\n .indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--pk-color-gray-900);\n }\n\n .icon-check,\n .icon-indeterminate {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n pointer-events: none;\n }\n\n .icon-check svg {\n width: 14px;\n height: 14px;\n transform: translateY(1px) scale(1.2);\n }\n\n .icon-indeterminate svg {\n width: 12px;\n height: 12px;\n }\n\n :host([checked]) .icon-check,\n .input:checked + .control .icon-check {\n opacity: 1;\n }\n\n :host([indeterminate]) .icon-check,\n .input:indeterminate + .control .icon-check {\n opacity: 0;\n }\n\n :host([indeterminate]) .icon-indeterminate,\n .input:indeterminate + .control .icon-indeterminate {\n opacity: 1;\n }\n }\n`;\n","import { css } from 'lit';\n\nimport { checkboxControlStyles } from '../../base/checkbox-control.styles.js';\n\nconst pkCheckboxLayoutStyles = css`\n @layer pk-component {\n :host {\n display: inline-flex;\n vertical-align: middle;\n /* Hit target is the content-sized .root label (Craft checkbox-select), not the host. */\n cursor: default;\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-base);\n line-height: var(--pk-line-height);\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .root {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: flex-start;\n gap: var(--pk-control-label-gap);\n /* Content-sized like Craft's <label> beside the checkbox — not full-row. */\n width: fit-content;\n max-width: 100%;\n margin: 0;\n min-height: 0;\n cursor: pointer;\n user-select: none;\n position: relative;\n }\n\n :host([disabled]) .root {\n cursor: not-allowed;\n }\n\n .root--with-hint {\n align-items: flex-start;\n }\n\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n opacity: 0;\n appearance: none;\n }\n\n .text {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n min-width: 0;\n }\n\n .label {\n line-height: max(1rem, var(--pk-checkbox-size));\n /* Match form-control / Craft body labels (gray-700), not gray-900. */\n color: var(--pk-color-gray-700);\n cursor: pointer;\n }\n\n :host([disabled]) .label {\n cursor: not-allowed;\n }\n\n :host(.all-option) .label {\n font-weight: 700;\n }\n\n .hint {\n margin: 0;\n color: var(--pk-color-gray-500);\n font-size: var(--pk-font-size-sm);\n line-height: var(--pk-line-height);\n }\n\n .hint:empty {\n display: none;\n }\n }\n`;\n\nexport const pkCheckboxStyles = [checkboxControlStyles, pkCheckboxLayoutStyles];\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport type { PropertyValues } from 'lit';\n\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { renderCheckboxCheckIcon, renderCheckboxIndeterminateIcon } from '../../icons/checkbox-indicators.js';\nimport { HasSlotController } from '../../internal/has-slot.js';\nimport { RequiredValidator } from '../../validators/index.js';\nimport { pkCheckboxStyles } from './pk-checkbox.styles.js';\n\n/**\n * –aligned checkbox control.\n *\n * @slot - Checkbox label text\n * @slot hint - Descriptive hint (or use the `hint` attribute)\n *\n * @csspart base - Root label element\n * @csspart input - Native checkbox input\n * @csspart control - Visual checkbox box\n * @csspart label - Label text container\n * @csspart hint - Hint text container\n * @csspart checked-icon - Checked state icon\n * @csspart indeterminate-icon - Indeterminate state icon\n */\n@customElement('pk-checkbox')\nexport class PkCheckbox extends PkFormAssociatedElement {\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n static override styles = pkCheckboxStyles;\n\n static override get validators() {\n return [...super.validators, RequiredValidator({ validationProperty: 'checked' })];\n }\n\n override assumeInteractionOn = ['change'];\n\n private readonly hasSlotController = new HasSlotController(this, 'hint');\n\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n @property({ type: Boolean, reflect: true })\n indeterminate = false;\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n @property()\n checkboxValue = 'on';\n\n @property({ attribute: 'default-checked', type: Boolean })\n defaultChecked = false;\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n /** Descriptive hint — use the `hint` slot for HTML content. */\n @property()\n hint = '';\n\n /** Only required for SSR when slotting a hint. */\n @property({ type: Boolean, attribute: 'with-hint' })\n withHint = false;\n\n @query('.input')\n override input!: HTMLInputElement;\n\n @state()\n private hasDefaultSlotContent = false;\n\n protected override get validationTarget(): HTMLElement {\n return this.input;\n }\n\n protected override syncFormValue(): void {\n this.setFormValue(this.checked ? this.checkboxValue : null, this.checked ? 'on' : 'off');\n }\n\n protected override resetToDefaultValue(): void {\n this.checked = this.defaultChecked;\n this.indeterminate = false;\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (state === 'on' || state === this.checkboxValue) {\n this.checked = true;\n } else {\n this.checked = false;\n }\n }\n\n override updated(changed: PropertyValues): void {\n if (!this.input) {\n super.updated(changed);\n return;\n }\n\n if (changed.has('indeterminate') || changed.has('checked')) {\n this.input.indeterminate = this.indeterminate;\n this.input.checked = this.checked;\n }\n\n super.updated(changed);\n }\n\n private defaultSlotChanged(event: Event): void {\n const slot = event.target as HTMLSlotElement;\n this.hasDefaultSlotContent = slot.assignedNodes({ flatten: true }).some((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent?.trim();\n }\n\n return node.nodeType === Node.ELEMENT_NODE;\n });\n }\n\n private handleChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked = input.checked;\n this.indeterminate = false;\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { checked: this.checked },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n override render() {\n const hasLabel = this.hasDefaultSlotContent;\n const hasHint = Boolean(this.hint) || this.hasSlotController.test('hint', this.withHint);\n\n return html`\n <label\n part=\"base\"\n class=${classMap({\n root: true,\n 'root--with-hint': hasHint,\n })}\n >\n <input\n part=\"input\"\n class=\"input\"\n type=\"checkbox\"\n .checked=${this.checked}\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${this.name ?? nothing}\n value=${this.checkboxValue}\n aria-labelledby=${hasLabel ? 'label' : nothing}\n aria-describedby=${hasHint ? 'hint' : nothing}\n aria-label=${!hasLabel ? (this.ariaLabel ?? nothing) : nothing}\n aria-invalid=${this.invalid ? 'true' : nothing}\n @change=${this.handleChange}\n />\n <span part=\"control\" class=\"control\">\n <span part=\"checked-icon\" class=\"icon-check\">${renderCheckboxCheckIcon()}</span>\n <span part=\"indeterminate-icon\" class=\"icon-indeterminate\">${renderCheckboxIndeterminateIcon()}</span>\n </span>\n ${hasLabel || hasHint\n ? html`\n <span class=\"text\">\n ${hasLabel\n ? html`\n <span part=\"label\" class=\"label\" id=\"label\">\n <slot @slotchange=${this.defaultSlotChanged}></slot>\n </span>\n `\n : html`<slot @slotchange=${this.defaultSlotChanged} hidden></slot>`}\n ${hasHint\n ? html`\n <span part=\"hint\" class=\"hint\" id=\"hint\">\n <slot name=\"hint\">${this.hint}</slot>\n </span>\n `\n : nothing}\n </span>\n `\n : html`<slot @slotchange=${this.defaultSlotChanged} hidden></slot>`}\n </label>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-checkbox': PkCheckbox;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-checkbox-select-9lqd9Rwz.js","names":[],"sources":["../../src/components/checkbox-select/pk-checkbox-select.styles.ts","../../src/components/checkbox-select/pk-checkbox-select.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const pkCheckboxSelectStyles = css`\n @layer pk-component {\n :host {\n display: block;\n font-family: var(--pk-font-family);\n font-size: var(--pk-font-size-sm);\n line-height: var(--pk-line-height);\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .options {\n display: flex;\n flex-direction: column;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n .options--horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--pk-checkbox-select-gap, 0);\n }\n\n ::slotted(pk-checkbox),\n pk-checkbox {\n display: block;\n }\n\n .options--horizontal pk-checkbox.all-option {\n width: 100%;\n }\n }\n`;\n","import { html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { ComplexAttributeConverter, PropertyValues } from 'lit';\n\nimport { PkElement } from '../../base/pk-element.js';\n// Side-effect import — option rows are created as `pk-checkbox` in the shadow tree.\nimport '../checkbox/pk-checkbox.js';\nimport type { PkCheckbox } from '../checkbox/pk-checkbox.js';\nimport { pkCheckboxSelectStyles } from './pk-checkbox-select.styles.js';\n\nexport const ALL_VALUE = '*' as const;\n\nexport type PkCheckboxSelectOption = {\n label: string;\n value: string;\n};\n\nexport type PkCheckboxSelectValue = typeof ALL_VALUE | string[];\n\nexport type PkCheckboxSelectOrientation = 'horizontal' | 'vertical';\n\n/** JSON array for Craft/Twig + docs HTML; property assignment still preferred in JS. */\nconst optionsConverter: ComplexAttributeConverter<PkCheckboxSelectOption[]> = {\n fromAttribute(value) {\n if (!value) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed)\n ? parsed\n .filter((item): item is PkCheckboxSelectOption => Boolean(item && typeof item === 'object' && 'value' in item))\n .map((item) => ({\n label: String((item as PkCheckboxSelectOption).label ?? (item as PkCheckboxSelectOption).value),\n value: String((item as PkCheckboxSelectOption).value),\n }))\n : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return JSON.stringify(value ?? []);\n },\n};\n\n/** `*` for all-selected, otherwise a JSON string array. */\nconst valueConverter: ComplexAttributeConverter<PkCheckboxSelectValue> = {\n fromAttribute(value) {\n if (value == null || value === '') {\n return [];\n }\n\n if (value === '*') {\n return ALL_VALUE;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n if (parsed === '*') {\n return ALL_VALUE;\n }\n\n return Array.isArray(parsed) ? parsed.map(String) : [];\n } catch {\n return [];\n }\n },\n toAttribute(value) {\n return value === ALL_VALUE ? '*' : JSON.stringify(value ?? []);\n },\n};\n\n/**\n * Multi-select checkbox group — options via the `options` property/attribute (not slotted\n * checkboxes). Wrap in `pk-field` for label/instructions (mirrors React `CheckboxSelect` + `FieldLayout`).\n *\n * @fires pk-change - `{ value: string[] | '*' }`\n *\n * @csspart base - Checkbox options container\n */\n@customElement('pk-checkbox-select')\nexport class PkCheckboxSelect extends PkElement {\n static override styles = pkCheckboxSelectStyles;\n\n @property({ attribute: 'options', converter: optionsConverter })\n options: PkCheckboxSelectOption[] = [];\n\n /** Selected values, or `*` when the All option is active. */\n @property({ attribute: 'value', converter: valueConverter })\n value: PkCheckboxSelectValue = [];\n @property({ type: Boolean, attribute: 'show-all-option' })\n showAllOption = false;\n\n @property({ attribute: 'all-label' })\n allLabel = 'All';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ reflect: true })\n orientation: PkCheckboxSelectOrientation = 'vertical';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n @state()\n private optionElements: PkCheckbox[] = [];\n\n private allOptionElement: PkCheckbox | null = null;\n\n override connectedCallback(): void {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'group');\n }\n\n super.connectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('options') || changed.has('showAllOption')) {\n this.rebuildOptionElements();\n return;\n }\n\n if (changed.has('value') || changed.has('disabled')) {\n this.updateOptionStates();\n }\n }\n\n override firstUpdated(): void {\n this.rebuildOptionElements();\n }\n\n override focus(options?: FocusOptions): void {\n const first = this.optionElements.find((element) => !element.disabled);\n\n first?.focus(options);\n }\n\n private get isAllSelected(): boolean {\n return this.value === ALL_VALUE;\n }\n\n private get selectedValues(): string[] {\n if (this.isAllSelected) {\n return this.options.map((option) => option.value);\n }\n\n return Array.isArray(this.value) ? this.value : [];\n }\n\n private dispatchValueChange(): void {\n const detailValue = this.isAllSelected ? ALL_VALUE : [...this.selectedValues];\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value: detailValue },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleAllChange = (event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n this.value = event.detail.checked ? ALL_VALUE : [];\n this.dispatchValueChange();\n };\n\n private handleItemChange = (optionValue: string, event: CustomEvent<{ checked: boolean }>): void => {\n event.stopPropagation();\n\n if (this.isAllSelected) {\n return;\n }\n\n const checked = event.detail.checked;\n const current = this.selectedValues;\n this.value = checked\n ? [...current, optionValue]\n : current.filter((value) => value !== optionValue);\n\n this.dispatchValueChange();\n };\n\n private rebuildOptionElements(): void {\n const container = this.shadowRoot?.querySelector('.options');\n\n if (!container) {\n return;\n }\n\n for (const element of this.optionElements) {\n element.remove();\n }\n\n this.optionElements = [];\n this.allOptionElement = null;\n\n if (this.showAllOption) {\n const allCheckbox = document.createElement('pk-checkbox') as PkCheckbox;\n allCheckbox.classList.add('all-option');\n allCheckbox.append(this.allLabel);\n allCheckbox.addEventListener('pk-change', this.handleAllChange as EventListener);\n\n container.append(allCheckbox);\n this.allOptionElement = allCheckbox;\n this.optionElements.push(allCheckbox);\n }\n\n for (const option of this.options) {\n const checkbox = document.createElement('pk-checkbox') as PkCheckbox;\n checkbox.checkboxValue = option.value;\n checkbox.append(option.label);\n checkbox.addEventListener('pk-change', (event) => {\n this.handleItemChange(option.value, event as CustomEvent<{ checked: boolean }>);\n });\n\n container.append(checkbox);\n this.optionElements.push(checkbox);\n }\n\n this.updateOptionStates();\n }\n\n private updateOptionStates(): void {\n if (this.allOptionElement) {\n this.allOptionElement.checked = this.isAllSelected;\n this.allOptionElement.disabled = this.disabled;\n }\n\n for (const option of this.options) {\n const checkbox = this.optionElements.find(\n (element) => element !== this.allOptionElement && element.checkboxValue === option.value,\n );\n\n if (!checkbox) {\n continue;\n }\n\n checkbox.checked = this.isAllSelected || this.selectedValues.includes(option.value);\n checkbox.disabled = this.disabled || this.isAllSelected;\n }\n }\n\n override render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n options: true,\n 'options--horizontal': this.orientation === 'horizontal',\n })}\n ></div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-checkbox-select': PkCheckboxSelect;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-code-editor-DSG6AwLV.js","names":[],"sources":["../../src/components/code-editor/pk-code-editor.styles.ts","../../src/components/code-editor/pk-code-editor.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const pkCodeEditorStyles = css`\n @layer pk-component {\n :host {\n display: block;\n width: 100%;\n font-family: var(--pk-font-family);\n }\n\n .shell {\n overflow: hidden;\n border: 1px solid rgba(96, 125, 159, 0.4);\n border-radius: var(--pk-radius-sm);\n background: #ffffff;\n }\n\n .shell:focus-within {\n border-color: var(--pk-color-sky-600);\n box-shadow:\n 0 0 0 1px var(--pk-color-sky-600),\n 0 0 4px 0 color-mix(in srgb, var(--pk-color-sky-600) 70%, transparent);\n }\n\n :host([invalid]) .shell,\n :host(:state(user-invalid)) .shell {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([invalid]) .shell:focus-within,\n :host(:state(user-invalid)) .shell:focus-within {\n border-color: var(--pk-color-rose-600);\n box-shadow:\n 0 0 0 1px var(--pk-color-rose-600),\n 0 0 4px 0 color-mix(in srgb, var(--pk-color-rose-600) 70%, transparent);\n }\n\n :host([disabled]),\n :host([readonly]) {\n opacity: 0.7;\n }\n\n .editor-mount {\n min-height: var(--pk-code-editor-min-height, 12rem);\n }\n\n .editor-mount .cm-editor {\n min-height: inherit;\n }\n\n .mirror-input {\n display: none;\n }\n }\n`;\n","import { html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport type { PropertyValues } from 'lit';\nimport {\n CodeMirrorHost,\n computeCodeEditorMinHeight,\n type CodeEditorLanguage,\n} from '@verbb/plugin-kit-codemirror-core';\n\nimport { formControlStyles } from '../../base/form-control.styles.js';\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { MirrorValidator } from '../../validators/index.js';\nimport { pkCodeEditorStyles } from './pk-code-editor.styles.js';\n\n@customElement('pk-code-editor')\nexport class PkCodeEditor extends PkFormAssociatedElement {\n static override styles = [formControlStyles, pkCodeEditorStyles];\n\n static override get validators() {\n return [...super.validators, MirrorValidator()];\n }\n\n override assumeInteractionOn = ['blur', 'input'];\n\n @query('.editor-mount')\n private editorMount!: HTMLDivElement;\n\n @query('.mirror-input')\n override input!: HTMLInputElement;\n\n private readonly host = new CodeMirrorHost();\n\n private hasInitializedEditor = false;\n\n private _value: string | null = null;\n\n @property()\n language: CodeEditorLanguage = 'html';\n\n @property({ type: Number, attribute: 'tab-size' })\n tabSize = 4;\n\n @property({ type: Boolean, attribute: 'line-numbers' })\n lineNumbers = true;\n\n @property({ type: Number })\n rows = 12;\n\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n get value(): string {\n if (this.valueHasChanged) {\n return this._value ?? '';\n }\n\n return this._value ?? this.defaultValue ?? '';\n }\n\n @state()\n set value(val: string | null) {\n const next = val ?? '';\n\n if (this._value === next) {\n return;\n }\n\n this.valueHasChanged = true;\n this._value = next;\n }\n\n @property({ attribute: 'value', reflect: true })\n defaultValue: string | null = '';\n\n get editorView() {\n return this.host.view;\n }\n\n protected override syncFormValue(): void {\n this.setValue(this.value || '');\n\n if (this.input) {\n this.input.value = this.value || '';\n }\n }\n\n protected override resetToDefaultValue(): void {\n this.valueHasChanged = false;\n this._value = null;\n this.syncEditorContent();\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (typeof state === 'string') {\n this.value = state;\n this.syncEditorContent();\n }\n }\n\n override disconnectedCallback(): void {\n this.host.destroy();\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if ((changed.has('value') && !changed.has('defaultValue')) || (changed.has('defaultValue') && !this.valueHasChanged)) {\n this.syncEditorContent();\n }\n\n if (changed.has('disabled') || changed.has('readonly')) {\n this.host.setEditable(!this.disabled && !this.readonly);\n }\n\n if (\n this.hasInitializedEditor\n && (changed.has('language') || changed.has('tabSize') || changed.has('lineNumbers') || changed.has('rows'))\n ) {\n this.remountEditor();\n }\n\n super.updated(changed);\n }\n\n override firstUpdated(): void {\n this.style.setProperty('--pk-code-editor-min-height', computeCodeEditorMinHeight(this.rows));\n this.mountEditor();\n this.hasInitializedEditor = true;\n this.syncFormValue();\n }\n\n private mountEditor(): void {\n this.host.mount({\n parent: this.editorMount,\n value: this.value,\n language: this.language,\n tabSize: this.tabSize,\n lineNumbers: this.lineNumbers,\n rows: this.rows,\n editable: !this.disabled && !this.readonly,\n onUpdate: (nextValue) => {\n this.value = nextValue;\n\n if (this.input) {\n this.input.value = nextValue;\n }\n\n this.syncFormValue();\n this.emitValueChange(nextValue);\n },\n onBlur: () => {\n this.dispatchEvent(new Event('blur', { bubbles: true, composed: true }));\n },\n });\n }\n\n private remountEditor(): void {\n this.host.destroy();\n this.style.setProperty('--pk-code-editor-min-height', computeCodeEditorMinHeight(this.rows));\n this.mountEditor();\n }\n\n private syncEditorContent(): void {\n this.host.setValue(this.value);\n }\n\n private emitValueChange(value: string): void {\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value },\n bubbles: true,\n composed: true,\n }));\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n override render() {\n return html`\n <div class=\"shell\" part=\"shell\">\n <div class=\"editor-mount\" part=\"editor\"></div>\n <input class=\"mirror-input\" type=\"text\" .value=${this.value} readonly tabindex=\"-1\" aria-hidden=\"true\" />\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-code-editor': PkCodeEditor;\n }\n}\n"],"mappings":";;;;;;;;AAEA,IAAa,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACa9B,IAAA,eAAA,MAAM,qBAAqB,wBAAwB;;;6BAOvB,CAAC,QAAQ,QAAQ;cAQxB,IAAI,gBAAgB;8BAEb;gBAEC;kBAGD;iBAGrB;qBAGI;cAGP;kBAGI;iBAGD;sBAuBoB;;;gBA3DL,CAAC,mBAAmB,mBAAmB;;CAEhE,WAAoB,aAAa;AAC7B,SAAO,CAAC,GAAG,MAAM,YAAY,iBAAiB,CAAC;;CAmCnD,IAAI,QAAgB;AAChB,MAAI,KAAK,gBACL,QAAO,KAAK,UAAU;AAG1B,SAAO,KAAK,UAAU,KAAK,gBAAgB;;CAG/C,IACI,MAAM,KAAoB;EAC1B,MAAM,OAAO,OAAO;AAEpB,MAAI,KAAK,WAAW,KAChB;AAGJ,OAAK,kBAAkB;AACvB,OAAK,SAAS;;CAMlB,IAAI,aAAa;AACb,SAAO,KAAK,KAAK;;CAGrB,gBAAyC;AACrC,OAAK,SAAS,KAAK,SAAS,GAAG;AAE/B,MAAI,KAAK,MACL,MAAK,MAAM,QAAQ,KAAK,SAAS;;CAIzC,sBAA+C;AAC3C,OAAK,kBAAkB;AACvB,OAAK,SAAS;AACd,OAAK,mBAAmB;;CAG5B,iBAAoC,OAA8C;AAC9E,MAAI,OAAO,UAAU,UAAU;AAC3B,QAAK,QAAQ;AACb,QAAK,mBAAmB;;;CAIhC,uBAAsC;AAClC,OAAK,KAAK,SAAS;AACnB,QAAM,sBAAsB;;CAGhC,QAAiB,SAA+B;AAC5C,MAAK,QAAQ,IAAI,QAAQ,IAAI,CAAC,QAAQ,IAAI,eAAe,IAAM,QAAQ,IAAI,eAAe,IAAI,CAAC,KAAK,gBAChG,MAAK,mBAAmB;AAG5B,MAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,WAAW,CAClD,MAAK,KAAK,YAAY,CAAC,KAAK,YAAY,CAAC,KAAK,SAAS;AAG3D,MACI,KAAK,yBACD,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,cAAc,IAAI,QAAQ,IAAI,OAAO,EAE1G,MAAK,eAAe;AAGxB,QAAM,QAAQ,QAAQ;;CAG1B,eAA8B;AAC1B,OAAK,MAAM,YAAY,+BAA+B,2BAA2B,KAAK,KAAK,CAAC;AAC5F,OAAK,aAAa;AAClB,OAAK,uBAAuB;AAC5B,OAAK,eAAe;;CAGxB,cAA4B;AACxB,OAAK,KAAK,MAAM;GACZ,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,UAAU,KAAK;GACf,SAAS,KAAK;GACd,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,UAAU,CAAC,KAAK,YAAY,CAAC,KAAK;GAClC,WAAW,cAAc;AACrB,SAAK,QAAQ;AAEb,QAAI,KAAK,MACL,MAAK,MAAM,QAAQ;AAGvB,SAAK,eAAe;AACpB,SAAK,gBAAgB,UAAU;;GAEnC,cAAc;AACV,SAAK,cAAc,IAAI,MAAM,QAAQ;KAAE,SAAS;KAAM,UAAU;KAAM,CAAC,CAAC;;GAE/E,CAAC;;CAGN,gBAA8B;AAC1B,OAAK,KAAK,SAAS;AACnB,OAAK,MAAM,YAAY,+BAA+B,2BAA2B,KAAK,KAAK,CAAC;AAC5F,OAAK,aAAa;;CAGtB,oBAAkC;AAC9B,OAAK,KAAK,SAAS,KAAK,MAAM;;CAGlC,gBAAwB,OAAqB;AACzC,OAAK,cAAc,IAAI,YAAY,aAAa;GAC5C,QAAQ,EAAE,OAAO;GACjB,SAAS;GACT,UAAU;GACb,CAAC,CAAC;AACH,OAAK,cAAc,IAAI,MAAM,SAAS;GAAE,SAAS;GAAM,UAAU;GAAM,CAAC,CAAC;AACzE,OAAK,cAAc,IAAI,MAAM,UAAU;GAAE,SAAS;GAAM,UAAU;GAAM,CAAC,CAAC;;CAG9E,SAAkB;AACd,SAAO,IAAI;;;iEAG8C,KAAK,MAAM;;;;;YA9JvE,MAAM,gBAAgB,CAAA,EAAA,aAAA,WAAA,eAAA,KAAA,EAAA;YAGtB,MAAM,gBAAgB,CAAA,EAAA,aAAA,WAAA,SAAA,KAAA,EAAA;YAStB,UAAU,CAAA,EAAA,aAAA,WAAA,YAAA,KAAA,EAAA;YAGV,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAY,CAAC,CAAA,EAAA,aAAA,WAAA,WAAA,KAAA,EAAA;YAGjD,SAAS;CAAE,MAAM;CAAS,WAAW;CAAgB,CAAC,CAAA,EAAA,aAAA,WAAA,eAAA,KAAA,EAAA;YAGtD,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,aAAA,WAAA,QAAA,KAAA,EAAA;YAG1B,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,aAAA,WAAA,YAAA,KAAA,EAAA;YAG1C,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,aAAA,WAAA,WAAA,KAAA,EAAA;YAW1C,OAAO,CAAA,EAAA,aAAA,WAAA,SAAA,KAAA;YAYP,SAAS;CAAE,WAAW;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,aAAA,WAAA,gBAAA,KAAA,EAAA;2BA5DnD,cAAc,iBAAiB,CAAA,EAAA,aAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pk-color-input-BCCXCZMA.js","names":[],"sources":["../../src/components/color-input/pk-color-input.styles.ts","../../src/components/color-input/pk-color-input.ts"],"sourcesContent":["import { css } from 'lit';\n\n/**\n * Size scale matches pk-input (xs / sm / default / lg). Metrics are shifted so\n * former `lg` (2.125rem / ~34px) is default — aligned with base input chrome.\n * `xl` is kept as a deprecated alias of `lg`.\n */\nexport const pkColorInputStyles = css`\n @layer pk-component {\n :host {\n display: inline-block;\n position: relative;\n /* Former lg min-width — default now matches input default chrome. */\n min-width: 6.75rem;\n font-family: var(--pk-font-family);\n vertical-align: middle;\n }\n\n :host([size='xs']) {\n min-width: 5.5rem;\n }\n\n :host([size='sm']) {\n min-width: 6.125rem;\n }\n\n :host([size='lg']),\n :host([size='xl']) {\n min-width: 7.375rem;\n }\n\n :host([fit-cell]) {\n display: block;\n width: 100%;\n min-width: 0;\n max-width: 100%;\n height: 100%;\n }\n\n :host([fit-cell]) .root {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .root {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n .swatch {\n position: absolute;\n top: 50%;\n left: 0.5rem;\n z-index: 2;\n width: 1.25rem;\n height: 1.25rem;\n transform: translateY(-50%);\n border-radius: var(--pk-radius-sm);\n }\n\n :host([size='xs']) .swatch {\n left: 0.375rem;\n width: 1rem;\n height: 1rem;\n }\n\n :host([size='sm']) .swatch {\n left: 0.375rem;\n width: 1.25rem;\n height: 1.25rem;\n }\n\n :host([size='lg']) .swatch,\n :host([size='xl']) .swatch {\n left: 0.5rem;\n width: 1.5rem;\n height: 1.5rem;\n }\n\n :host([fit-cell]) .swatch {\n left: 0.5rem;\n width: 1rem;\n height: 1rem;\n }\n\n .swatch-preview {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.15);\n }\n\n .swatch-preview.is-transparent {\n background-color: #fff;\n background-image:\n linear-gradient(45deg, #d1d5db 25%, transparent 25%),\n linear-gradient(-45deg, #d1d5db 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, #d1d5db 75%),\n linear-gradient(-45deg, transparent 75%, #d1d5db 75%);\n background-size: 8px 8px;\n background-position: 0 0, 0 4px, 4px -4px, -4px 0;\n }\n\n .swatch-picker {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border: 0;\n opacity: 0;\n cursor: pointer;\n appearance: none;\n }\n\n .swatch-picker:disabled {\n cursor: not-allowed;\n }\n\n .hash {\n position: absolute;\n top: 50%;\n left: 2.125rem;\n z-index: 1;\n transform: translateY(-50%);\n color: var(--pk-color-gray-300);\n font-family: var(--pk-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);\n font-size: var(--pk-font-size-mono, 0.9em);\n line-height: var(--pk-line-height-mono, 1.5);\n pointer-events: none;\n user-select: none;\n }\n\n :host([size='xs']) .hash {\n left: 1.625rem;\n }\n\n :host([size='sm']) .hash {\n left: 2rem;\n }\n\n :host([size='lg']) .hash,\n :host([size='xl']) .hash {\n left: 2.5rem;\n }\n\n :host([fit-cell]) .hash {\n left: 1.75rem;\n }\n\n .hex-input {\n display: block;\n width: 100%;\n /* Former lg — matches pk-input default chrome (~34px). */\n height: 2.125rem;\n margin: 0;\n padding-inline: 3rem 0.75rem;\n border: var(--pk-input-border);\n border-radius: var(--pk-input-border-radius);\n background: var(--pk-input-bg);\n color: var(--pk-color-gray-700);\n font-family: var(--pk-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);\n font-size: var(--pk-font-size-mono, 0.9em);\n line-height: var(--pk-line-height-mono, 1.5);\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.12s ease, box-shadow 0.12s ease;\n }\n\n :host([size='xs']) .hex-input {\n height: 1.625rem;\n padding-inline: 2.25rem 0.625rem;\n }\n\n :host([size='sm']) .hex-input {\n height: 1.875rem;\n padding-inline: 2.75rem 0.75rem;\n }\n\n :host([size='lg']) .hex-input,\n :host([size='xl']) .hex-input {\n height: 2.375rem;\n padding-inline: 3.25rem 0.875rem;\n }\n\n :host([fit-cell]) .hex-input {\n width: 100%;\n max-width: 100%;\n height: 100%;\n padding-inline: 2.25rem 0.5rem;\n border: 0;\n border-radius: 0;\n background: transparent;\n }\n\n .hex-input:focus,\n .hex-input:focus-visible {\n border-color: var(--pk-color-sky-600);\n box-shadow: var(--pk-input-focus-shadow);\n }\n\n :host([invalid]) .hex-input:focus,\n :host([invalid]) .hex-input:focus-visible {\n border-color: var(--pk-color-rose-600);\n box-shadow: var(--pk-input-invalid-focus-shadow);\n }\n\n :host([fit-cell]:not([invalid])) .hex-input:focus,\n :host([fit-cell]:not([invalid])) .hex-input:focus-visible {\n box-shadow: inset 0 0 0 1px var(--pk-color-gray-200);\n }\n\n :host([fit-cell][invalid]) .hex-input,\n :host([fit-cell][invalid]) .hex-input:focus,\n :host([fit-cell][invalid]) .hex-input:focus-visible {\n box-shadow: inset 0 0 0 1px var(--pk-color-rose-600);\n }\n\n .hex-input:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n :host([invalid]) .hex-input {\n border-color: var(--pk-color-rose-600);\n }\n\n :host([disabled]) .swatch {\n opacity: 0.5;\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport type { PropertyValues } from 'lit';\n\nimport { PkFormAssociatedElement } from '../../base/pk-form-associated-element.js';\nimport { MirrorValidator, RequiredValidator } from '../../validators/index.js';\nimport { pkColorInputStyles } from './pk-color-input.styles.js';\n\n/** Public scale is xs / sm / default / lg (`xl` aliases `lg` for compatibility). */\nexport type PkColorInputSize = 'xs' | 'sm' | 'default' | 'lg' | 'xl';\n\nconst DEFAULT_COLOR = '#000000';\n\nfunction sanitizeHex(value: string): string {\n return String(value || '')\n .replace(/^#/, '')\n .replace(/[^0-9a-fA-F]/g, '')\n .slice(0, 6)\n .toLowerCase();\n}\n\nfunction isCompleteHex(value: string): boolean {\n return value.length === 3 || value.length === 6;\n}\n\nfunction expandShortHex(value: string): string {\n if (value.length !== 3) {\n return value;\n }\n\n return value.split('').map((char) => `${char}${char}`).join('');\n}\n\nfunction toPickerValue(hex: string): string {\n if (hex.length === 6) {\n return `#${hex}`;\n }\n\n if (hex.length === 3) {\n return `#${expandShortHex(hex)}`;\n }\n\n return DEFAULT_COLOR;\n}\n\n/**\n * Color input — swatch picker + hex text field (Craft ColorInput parity).\n * Form-associated; submits `#rrggbb` or empty string.\n *\n * @csspart swatch - Swatch container\n * @csspart input - Hex text input\n */\n@customElement('pk-color-input')\nexport class PkColorInput extends PkFormAssociatedElement {\n static override styles = pkColorInputStyles;\n\n static override get validators() {\n return [...super.validators, MirrorValidator(), RequiredValidator()];\n }\n\n override assumeInteractionOn = ['blur', 'input'];\n\n @property({ reflect: true })\n size: PkColorInputSize = 'default';\n\n @property({ type: Boolean, reflect: true, attribute: 'fit-cell' })\n fitCell = false;\n\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n @property()\n value = '';\n\n @property({ attribute: 'default-value' })\n defaultValue = '';\n\n @property({ attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n @query('.hex-input')\n override input!: HTMLInputElement;\n\n @state()\n private hexValue = '';\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.syncHexFromValue();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n if (changed.has('value')) {\n this.syncHexFromValue();\n }\n\n super.willUpdate(changed);\n }\n\n private syncHexFromValue(): void {\n this.hexValue = sanitizeHex(this.value);\n }\n\n protected override get validationTarget(): HTMLElement {\n return this.input;\n }\n\n protected override syncFormValue(): void {\n const submitted = this.hexValue ? `#${this.hexValue}` : '';\n this.setFormValue(submitted, submitted);\n }\n\n protected override resetToDefaultValue(): void {\n this.value = this.defaultValue;\n this.hexValue = sanitizeHex(this.defaultValue);\n }\n\n protected override restoreFormState(state: string | File | FormData | null): void {\n if (typeof state === 'string') {\n this.value = state;\n this.hexValue = sanitizeHex(state);\n }\n }\n\n private emitChange(): void {\n const next = this.hexValue ? `#${this.hexValue}` : '';\n this.value = next;\n\n this.dispatchEvent(new CustomEvent('pk-change', {\n detail: { value: next },\n bubbles: true,\n composed: true,\n }));\n\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n }\n\n private handleHexInput(event: Event): void {\n // Readonly must not mutate the value even if a stray input event slips through.\n if (this.disabled || this.readonly) {\n return;\n }\n\n const nextHex = sanitizeHex((event.target as HTMLInputElement).value);\n this.hexValue = nextHex;\n this.emitChange();\n }\n\n private handlePickerChange(event: Event): void {\n if (this.disabled || this.readonly) {\n return;\n }\n\n const nextHex = sanitizeHex((event.target as HTMLInputElement).value);\n this.hexValue = nextHex;\n this.emitChange();\n }\n\n override render() {\n const previewColor = toPickerValue(this.hexValue);\n const isTransparent = !isCompleteHex(this.hexValue);\n\n return html`\n <div class=\"root\">\n <div part=\"swatch\" class=\"swatch\">\n <div\n class=${classMap({\n 'swatch-preview': true,\n 'is-transparent': isTransparent,\n })}\n style=${isTransparent ? nothing : `background-color: ${previewColor}`}\n ></div>\n <input\n part=\"picker\"\n class=\"swatch-picker\"\n type=\"color\"\n .value=${previewColor}\n ?disabled=${this.disabled || this.readonly}\n aria-label=\"Color picker\"\n @input=${this.handlePickerChange}\n />\n </div>\n <span class=\"hash\" aria-hidden=\"true\">#</span>\n <input\n part=\"input\"\n class=\"hex-input\"\n type=\"text\"\n inputmode=\"text\"\n autocomplete=\"off\"\n maxlength=\"6\"\n .value=${this.hexValue}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n aria-label=${this.ariaLabel ?? nothing}\n aria-invalid=${this.invalid ? 'true' : nothing}\n @input=${this.handleHexInput}\n />\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pk-color-input': PkColorInput;\n }\n}\n"],"mappings":"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"}