@verbb/plugin-kit-web 2.0.22 → 2.0.24
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.
- package/CHANGELOG.md +20 -0
- package/custom-elements.json +8414 -7031
- package/dist/chunks/{active-elements-BwpXu8Lb.js → active-elements-739kISON.js} +1 -1
- package/dist/chunks/{active-elements-BwpXu8Lb.js.map → active-elements-739kISON.js.map} +1 -1
- package/dist/chunks/{animate-with-class-CsDwYnXL.js → animate-with-class-CjTZI0NU.js} +1 -1
- package/dist/chunks/{animate-with-class-CsDwYnXL.js.map → animate-with-class-CjTZI0NU.js.map} +1 -1
- package/dist/chunks/{autoloader-dJO3tYOX.js → autoloader-DcwybeWc.js} +3 -3
- package/dist/chunks/{autoloader-dJO3tYOX.js.map → autoloader-DcwybeWc.js.map} +1 -1
- package/dist/chunks/{button-group-item.styles-DYmBR28a.js → button-group-item.styles-D7tuu-sr.js} +1 -1
- package/dist/chunks/{button-group-item.styles-DYmBR28a.js.map → button-group-item.styles-D7tuu-sr.js.map} +1 -1
- package/dist/chunks/{component-registry-D34fm8xW.js → component-registry-B5pnAZsb.js} +6 -1
- package/dist/chunks/component-registry-B5pnAZsb.js.map +1 -0
- package/dist/chunks/{control-aria-B2QMq4ji.js → control-aria-CtNg2izr.js} +1 -1
- package/dist/chunks/{control-aria-B2QMq4ji.js.map → control-aria-CtNg2izr.js.map} +1 -1
- package/dist/chunks/{decorate-R0X811qp.js → decorate-Br_PE9pq.js} +3 -4
- package/dist/chunks/{decorate-R0X811qp.js.map → decorate-Br_PE9pq.js.map} +1 -1
- package/dist/chunks/decorators-BkErmuYK.js +2 -0
- package/dist/chunks/{dismissible-stack-XQUMfKO3.js → dismissible-stack-CwhtwAyo.js} +1 -1
- package/dist/chunks/{dismissible-stack-XQUMfKO3.js.map → dismissible-stack-CwhtwAyo.js.map} +1 -1
- package/dist/chunks/{field-labels-CmuAW8Cl.js → field-labels-pY-gQDwQ.js} +1 -1
- package/dist/chunks/{field-labels-CmuAW8Cl.js.map → field-labels-pY-gQDwQ.js.map} +1 -1
- package/dist/chunks/{focus-aa5dlv8k.js → focus-DcVUPVqn.js} +2 -2
- package/dist/chunks/{focus-aa5dlv8k.js.map → focus-DcVUPVqn.js.map} +1 -1
- package/dist/chunks/{form-control.styles-BQdimE5o.js → form-control.styles-CQ93gnVf.js} +1 -1
- package/dist/chunks/{form-control.styles-BQdimE5o.js.map → form-control.styles-CQ93gnVf.js.map} +1 -1
- package/dist/chunks/{has-slot-8BvCt_qo.js → has-slot-DJv86HKx.js} +1 -1
- package/dist/chunks/{has-slot-8BvCt_qo.js.map → has-slot-DJv86HKx.js.map} +1 -1
- package/dist/chunks/{icon.styles-BLTWLqYp.js → icon.styles-KWvfi7RV.js} +1 -1
- package/dist/chunks/{icon.styles-BLTWLqYp.js.map → icon.styles-KWvfi7RV.js.map} +1 -1
- package/dist/chunks/{icons-BR8JcQj2.js → icons-k1pvx6yX.js} +2 -2
- package/dist/chunks/{icons-BR8JcQj2.js.map → icons-k1pvx6yX.js.map} +1 -1
- package/dist/chunks/{mirror-validator-DCjNYrrx.js → mirror-validator-BkZlEv1Z.js} +1 -1
- package/dist/chunks/{mirror-validator-DCjNYrrx.js.map → mirror-validator-BkZlEv1Z.js.map} +1 -1
- package/dist/chunks/{option-filter-BQqr8Z21.js → option-filter-BkKyBg8L.js} +2 -2
- package/dist/chunks/{option-filter-BQqr8Z21.js.map → option-filter-BkKyBg8L.js.map} +1 -1
- package/dist/chunks/{overlay-lifecycle-D0pkTQyI.js → overlay-lifecycle-C582MGBJ.js} +1 -1
- package/dist/chunks/{overlay-lifecycle-D0pkTQyI.js.map → overlay-lifecycle-C582MGBJ.js.map} +1 -1
- package/dist/chunks/pk-alert-BQAb4lJc.js +666 -0
- package/dist/chunks/pk-alert-BQAb4lJc.js.map +1 -0
- package/dist/chunks/{pk-autocomplete-qy2Psvqm.js → pk-autocomplete-DUXhs1hi.js} +21 -20
- package/dist/chunks/pk-autocomplete-DUXhs1hi.js.map +1 -0
- package/dist/chunks/{pk-button-group-BSz5T5iS.js → pk-button-group-BY12Lbk7.js} +10 -7
- package/dist/chunks/pk-button-group-BY12Lbk7.js.map +1 -0
- package/dist/chunks/{pk-button-group-separator-DH3Rl24b.js → pk-button-group-separator-B1a8dP9A.js} +3 -2
- package/dist/chunks/pk-button-group-separator-B1a8dP9A.js.map +1 -0
- package/dist/chunks/{pk-button-group-text-Qro_KmZb.js → pk-button-group-text-CWNlZkyV.js} +3 -3
- package/dist/chunks/pk-button-group-text-CWNlZkyV.js.map +1 -0
- package/dist/chunks/{pk-button-BrH4u4Qr.js → pk-button-ntSVrer_.js} +8 -7
- package/dist/chunks/pk-button-ntSVrer_.js.map +1 -0
- package/dist/chunks/{pk-calendar-Z7Y0PjeY.js → pk-calendar-Df0c5u79.js} +12 -11
- package/dist/chunks/pk-calendar-Df0c5u79.js.map +1 -0
- package/dist/chunks/{pk-checkbox-13ArHSmt.js → pk-checkbox-L5uRex3b.js} +6 -5
- package/dist/chunks/pk-checkbox-L5uRex3b.js.map +1 -0
- package/dist/chunks/{pk-checkbox-select-Ckvfbu83.js → pk-checkbox-select-6OS0wFYO.js} +4 -3
- package/dist/chunks/pk-checkbox-select-6OS0wFYO.js.map +1 -0
- package/dist/chunks/{pk-clear--mPWZP7H.js → pk-clear-DHxP_2cm.js} +1 -1
- package/dist/chunks/{pk-clear--mPWZP7H.js.map → pk-clear-DHxP_2cm.js.map} +1 -1
- package/dist/chunks/{pk-code-editor-BlG6O5qB.js → pk-code-editor-vZriNR67.js} +6 -5
- package/dist/chunks/pk-code-editor-vZriNR67.js.map +1 -0
- package/dist/chunks/{pk-color-input-BRgQ5-vB.js → pk-color-input-Csbm4ROT.js} +6 -5
- package/dist/chunks/pk-color-input-Csbm4ROT.js.map +1 -0
- package/dist/chunks/{pk-combobox-ag89QEX2.js → pk-combobox-BrSBrldb.js} +25 -23
- package/dist/chunks/pk-combobox-BrSBrldb.js.map +1 -0
- package/dist/chunks/{pk-connect.styles-BhW406jt.js → pk-connect.styles-oKhxa_m2.js} +1 -1
- package/dist/chunks/{pk-connect.styles-BhW406jt.js.map → pk-connect.styles-oKhxa_m2.js.map} +1 -1
- package/dist/chunks/{pk-copy-button-BVaOLtYG.js → pk-copy-button-5i9v_zmu.js} +31 -9
- package/dist/chunks/pk-copy-button-5i9v_zmu.js.map +1 -0
- package/dist/chunks/{pk-date-picker-C2YvDPNm.js → pk-date-picker-C-w6Mn6j.js} +21 -20
- package/dist/chunks/pk-date-picker-C-w6Mn6j.js.map +1 -0
- package/dist/chunks/{pk-dialog-VMQqLW1f.js → pk-dialog-C7KZGpQs.js} +10 -9
- package/dist/chunks/pk-dialog-C7KZGpQs.js.map +1 -0
- package/dist/chunks/{pk-dropdown-item-D9OaG5o-.js → pk-dropdown-item-Ck2N_suK.js} +11 -8
- package/dist/chunks/pk-dropdown-item-Ck2N_suK.js.map +1 -0
- package/dist/chunks/{pk-dropdown-label-CRNWMWQd.js → pk-dropdown-label-BdZLeizJ.js} +2 -2
- package/dist/chunks/pk-dropdown-label-BdZLeizJ.js.map +1 -0
- package/dist/chunks/{pk-dropdown-menu-DW1wI8xQ.js → pk-dropdown-menu-DBsO1uYR.js} +22 -18
- package/dist/chunks/pk-dropdown-menu-DBsO1uYR.js.map +1 -0
- package/dist/chunks/{pk-editable-table-DDnu1I8Y.js → pk-editable-table-Cd8K6vT4.js} +26 -23
- package/dist/chunks/pk-editable-table-Cd8K6vT4.js.map +1 -0
- package/dist/chunks/{pk-field-UAlMq6mQ.js → pk-field--PCE9nOd.js} +9 -8
- package/dist/chunks/pk-field--PCE9nOd.js.map +1 -0
- package/dist/chunks/{pk-form-associated-element-GxX5lbnk.js → pk-form-associated-element-Doh2K3pG.js} +3 -3
- package/dist/chunks/pk-form-associated-element-Doh2K3pG.js.map +1 -0
- package/dist/chunks/{pk-image-browser-Bj8LhWfk.js → pk-image-browser-iUqdcLKs.js} +21 -21
- package/dist/chunks/pk-image-browser-iUqdcLKs.js.map +1 -0
- package/dist/chunks/{pk-input-BywmK5n2.js → pk-input-BUbXj9We.js} +14 -13
- package/dist/chunks/pk-input-BUbXj9We.js.map +1 -0
- package/dist/chunks/{pk-input-group-BLqKPnfc.js → pk-input-group-CN79c5HT.js} +5 -4
- package/dist/chunks/pk-input-group-CN79c5HT.js.map +1 -0
- package/dist/chunks/{pk-input-group-addon-ClBkGmAw.js → pk-input-group-addon-DpxfuYp1.js} +3 -2
- package/dist/chunks/pk-input-group-addon-DpxfuYp1.js.map +1 -0
- package/dist/chunks/{pk-input-group-button-CHQHsWd4.js → pk-input-group-button-D5Hm4saA.js} +3 -2
- package/dist/chunks/pk-input-group-button-D5Hm4saA.js.map +1 -0
- package/dist/chunks/{pk-input-group-input-oNnqMBGU.js → pk-input-group-input-Cm1MoHgN.js} +3 -2
- package/dist/chunks/pk-input-group-input-Cm1MoHgN.js.map +1 -0
- package/dist/chunks/{pk-input-group-text-HUxlXROB.js → pk-input-group-text-CtyJZ_Kg.js} +2 -2
- package/dist/chunks/pk-input-group-text-CtyJZ_Kg.js.map +1 -0
- package/dist/chunks/{pk-input-group-textarea-Cl2FNuw-.js → pk-input-group-textarea-BxmKGjdt.js} +3 -2
- package/dist/chunks/pk-input-group-textarea-BxmKGjdt.js.map +1 -0
- package/dist/chunks/{pk-lightswitch-VHfJizBW.js → pk-lightswitch-CSvgiHVQ.js} +9 -8
- package/dist/chunks/pk-lightswitch-CSvgiHVQ.js.map +1 -0
- package/dist/chunks/{pk-option-DQZHV9jL.js → pk-option-B_PF4v_Z.js} +9 -7
- package/dist/chunks/pk-option-B_PF4v_Z.js.map +1 -0
- package/dist/chunks/{pk-option-group-CCzJkBFp.js → pk-option-group-D6bHfn0j.js} +4 -3
- package/dist/chunks/pk-option-group-D6bHfn0j.js.map +1 -0
- package/dist/chunks/{pk-popover-D3jkHfwB.js → pk-popover-BOoGfR7I.js} +11 -10
- package/dist/chunks/pk-popover-BOoGfR7I.js.map +1 -0
- package/dist/chunks/{pk-popup-B65tZMQH.js → pk-popup-DVE93VSV.js} +32 -28
- package/dist/chunks/pk-popup-DVE93VSV.js.map +1 -0
- package/dist/chunks/{pk-radio-B5XkMHy3.js → pk-radio-D0eqmnlH.js} +3 -2
- package/dist/chunks/pk-radio-D0eqmnlH.js.map +1 -0
- package/dist/chunks/{pk-radio-group-Dzd-3HaQ.js → pk-radio-group-BehEZG_k.js} +8 -7
- package/dist/chunks/pk-radio-group-BehEZG_k.js.map +1 -0
- package/dist/chunks/{pk-scroll-area-CdfNxYz8.js → pk-scroll-area-BeaLZ6k-.js} +3 -2
- package/dist/chunks/pk-scroll-area-BeaLZ6k-.js.map +1 -0
- package/dist/chunks/{pk-select-b5S5WKc-.js → pk-select-DZNpEk5Z.js} +20 -19
- package/dist/chunks/pk-select-DZNpEk5Z.js.map +1 -0
- package/dist/chunks/{pk-separator-N-VyjYE6.js → pk-separator-ZkRowI5Y.js} +3 -2
- package/dist/chunks/pk-separator-ZkRowI5Y.js.map +1 -0
- package/dist/chunks/{pk-spinner-DweuYJ_Z.js → pk-spinner-Bxkn4iVO.js} +3 -2
- package/dist/chunks/pk-spinner-Bxkn4iVO.js.map +1 -0
- package/dist/chunks/pk-state-panel-BTo2xiug.js +604 -0
- package/dist/chunks/pk-state-panel-BTo2xiug.js.map +1 -0
- package/dist/chunks/{pk-status-BehQARDv.js → pk-status-CdiRBRyh.js} +3 -2
- package/dist/chunks/pk-status-CdiRBRyh.js.map +1 -0
- package/dist/chunks/{pk-tab-CTloD18e.js → pk-tab-CSbI3XxX.js} +2 -2
- package/dist/chunks/pk-tab-CSbI3XxX.js.map +1 -0
- package/dist/chunks/{pk-tab-heading-Cjcgebxn.js → pk-tab-heading-BMyLTBNc.js} +2 -2
- package/dist/chunks/pk-tab-heading-BMyLTBNc.js.map +1 -0
- package/dist/chunks/{pk-tab-panel-CkKU5-Ah.js → pk-tab-panel-sgdRjV8o.js} +2 -2
- package/dist/chunks/pk-tab-panel-sgdRjV8o.js.map +1 -0
- package/dist/chunks/{pk-tabs-BgEBki1q.js → pk-tabs-bBNCu_4h.js} +10 -7
- package/dist/chunks/pk-tabs-bBNCu_4h.js.map +1 -0
- package/dist/chunks/{pk-textarea-Dhj1WFLH.js → pk-textarea-B401dUWa.js} +11 -10
- package/dist/chunks/pk-textarea-B401dUWa.js.map +1 -0
- package/dist/chunks/{pk-time-picker-ChRbKHNB.js → pk-time-picker-DnNZVwRk.js} +6 -6
- package/dist/chunks/pk-time-picker-DnNZVwRk.js.map +1 -0
- package/dist/chunks/{pk-tiptap-content-CL8smjGi.js → pk-tiptap-content-C2qzGQKj.js} +4 -3
- package/dist/chunks/pk-tiptap-content-C2qzGQKj.js.map +1 -0
- package/dist/chunks/{pk-tiptap-editor-BMwedkPt.js → pk-tiptap-editor-y_QyNSR-.js} +20 -21
- package/dist/chunks/pk-tiptap-editor-y_QyNSR-.js.map +1 -0
- package/dist/chunks/{pk-tiptap-input-YKg4VLp_.js → pk-tiptap-input-0Xy6rrot.js} +7 -6
- package/dist/chunks/pk-tiptap-input-0Xy6rrot.js.map +1 -0
- package/dist/chunks/{pk-toggle-BthhH7vl.js → pk-toggle-Co8GsHuK.js} +4 -3
- package/dist/chunks/pk-toggle-Co8GsHuK.js.map +1 -0
- package/dist/chunks/{pk-toggle-group-D2Quux8D.js → pk-toggle-group-Ct1ljI-7.js} +7 -4
- package/dist/chunks/pk-toggle-group-Ct1ljI-7.js.map +1 -0
- package/dist/chunks/{pk-tooltip--QBV6puX.js → pk-tooltip-Cvv2f7T5.js} +7 -6
- package/dist/chunks/pk-tooltip-Cvv2f7T5.js.map +1 -0
- package/dist/chunks/{popup-content-animation.styles-BnNiguJo.js → popup-content-animation.styles-CJ8zGJz-.js} +1 -1
- package/dist/chunks/{popup-content-animation.styles-BnNiguJo.js.map → popup-content-animation.styles-CJ8zGJz-.js.map} +1 -1
- package/dist/chunks/{popup-placement-animation-WlEXnS85.js → popup-placement-animation-ClUYI79z.js} +1 -1
- package/dist/chunks/{popup-placement-animation-WlEXnS85.js.map → popup-placement-animation-ClUYI79z.js.map} +1 -1
- package/dist/chunks/{popup-pointer-CuLjk1th.js → popup-pointer-Bh_d205v.js} +1 -1
- package/dist/chunks/{popup-pointer-CuLjk1th.js.map → popup-pointer-Bh_d205v.js.map} +1 -1
- package/dist/chunks/{register-components-BT9THgdh.js → register-components-CZtpgZe3.js} +1 -1
- package/dist/chunks/{register-components-BT9THgdh.js.map → register-components-CZtpgZe3.js.map} +1 -1
- package/dist/chunks/{render-Dvc3MHQR.js → render-DQZp_Rak.js} +1 -1
- package/dist/chunks/{render-Dvc3MHQR.js.map → render-DQZp_Rak.js.map} +1 -1
- package/dist/chunks/{required-validator-CEg8dvjS.js → required-validator-I58oJGZ3.js} +1 -1
- package/dist/chunks/{required-validator-CEg8dvjS.js.map → required-validator-I58oJGZ3.js.map} +1 -1
- package/dist/chunks/{scroll-lock-Bbh3Sc5g.js → scroll-lock-DE1pElMQ.js} +2 -2
- package/dist/chunks/{scroll-lock-Bbh3Sc5g.js.map → scroll-lock-DE1pElMQ.js.map} +1 -1
- package/dist/chunks/{spinner-utils-CDfHypTv.js → spinner-utils-DXwIxQ6z.js} +1 -1
- package/dist/chunks/{spinner-utils-CDfHypTv.js.map → spinner-utils-DXwIxQ6z.js.map} +1 -1
- package/dist/chunks/{supports-popover-CUBsbHpS.js → supports-popover-BCqyOPtO.js} +1 -1
- package/dist/chunks/{supports-popover-CUBsbHpS.js.map → supports-popover-BCqyOPtO.js.map} +1 -1
- package/dist/chunks/{sync-listbox-separators-B1-V0oJi.js → sync-listbox-separators-saLEtPpJ.js} +2 -2
- package/dist/chunks/{sync-listbox-separators-B1-V0oJi.js.map → sync-listbox-separators-saLEtPpJ.js.map} +1 -1
- package/dist/chunks/{tiptap.styles-CPRows--.js → tiptap.styles-Q4ED1nBw.js} +2 -2
- package/dist/chunks/{tiptap.styles-CPRows--.js.map → tiptap.styles-Q4ED1nBw.js.map} +1 -1
- package/dist/component-registry.d.ts.map +1 -1
- package/dist/components/alert/index.d.ts +2 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/pk-alert.d.ts +95 -0
- package/dist/components/alert/pk-alert.d.ts.map +1 -0
- package/dist/components/alert/pk-alert.js +2 -0
- package/dist/components/alert/pk-alert.styles.d.ts +2 -0
- package/dist/components/alert/pk-alert.styles.d.ts.map +1 -0
- package/dist/components/alert.d.ts +2 -0
- package/dist/components/alert.js +2 -0
- package/dist/components/autocomplete/pk-autocomplete.js +1 -1
- package/dist/components/autocomplete.js +1 -1
- package/dist/components/button/pk-button.js +1 -1
- package/dist/components/button-group/pk-button-group-separator.js +1 -1
- package/dist/components/button-group/pk-button-group-text.js +1 -1
- package/dist/components/button-group/pk-button-group.js +1 -1
- package/dist/components/button-group.js +3 -3
- package/dist/components/button.js +1 -1
- package/dist/components/calendar/pk-calendar.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/checkbox/pk-checkbox.js +1 -1
- package/dist/components/checkbox-select/pk-checkbox-select.js +1 -1
- package/dist/components/checkbox-select.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-editor/pk-code-editor.js +1 -1
- package/dist/components/code-editor.js +1 -1
- package/dist/components/color-input/pk-color-input.js +1 -1
- package/dist/components/color-input.js +1 -1
- package/dist/components/combobox/pk-combobox.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/connect/pk-connect-oauth.js +5 -4
- package/dist/components/connect/pk-connect-oauth.js.map +1 -1
- package/dist/components/connect/pk-connect.d.ts +0 -1
- package/dist/components/connect/pk-connect.d.ts.map +1 -1
- package/dist/components/connect/pk-connect.js +27 -49
- package/dist/components/connect/pk-connect.js.map +1 -1
- package/dist/components/copy-button/pk-copy-button.d.ts +17 -2
- package/dist/components/copy-button/pk-copy-button.d.ts.map +1 -1
- package/dist/components/copy-button/pk-copy-button.js +1 -1
- package/dist/components/copy-button/pk-copy-button.styles.d.ts.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/date-picker/pk-date-picker.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/dialog/pk-dialog.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-item.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-label.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-menu.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-separator.js +1 -1
- package/dist/components/dropdown-menu/pk-dropdown-separator.js.map +1 -1
- package/dist/components/dropdown-menu.js +3 -3
- package/dist/components/editable-table/pk-editable-table.js +1 -1
- package/dist/components/editable-table.js +1 -1
- package/dist/components/field/pk-field.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/icon/pk-icon.js +2 -1
- package/dist/components/icon/pk-icon.js.map +1 -1
- package/dist/components/image-browser/pk-image-browser.js +1 -1
- package/dist/components/image-browser.js +1 -1
- package/dist/components/input/pk-input.js +1 -1
- package/dist/components/input-group/pk-input-group-addon.js +1 -1
- package/dist/components/input-group/pk-input-group-button.js +1 -1
- package/dist/components/input-group/pk-input-group-input.js +1 -1
- package/dist/components/input-group/pk-input-group-text.js +1 -1
- package/dist/components/input-group/pk-input-group-textarea.js +1 -1
- package/dist/components/input-group/pk-input-group.js +1 -1
- package/dist/components/input-group.js +6 -6
- package/dist/components/input.js +1 -1
- package/dist/components/lightswitch/pk-lightswitch.js +1 -1
- package/dist/components/lightswitch.js +1 -1
- package/dist/components/popover/pk-popover.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/popup/pk-popup.js +1 -1
- package/dist/components/popup.js +1 -1
- package/dist/components/radio-group/pk-radio-group.js +1 -1
- package/dist/components/radio-group/pk-radio.js +1 -1
- package/dist/components/radio-group.js +2 -2
- package/dist/components/scroll-area/pk-scroll-area.js +1 -1
- package/dist/components/scroll-area.js +1 -1
- package/dist/components/select/pk-option-group.js +1 -1
- package/dist/components/select/pk-option.js +1 -1
- package/dist/components/select/pk-select.js +1 -1
- package/dist/components/select.js +3 -3
- package/dist/components/separator/pk-separator.js +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/spinner/pk-spinner.js +1 -1
- package/dist/components/spinner.js +2 -2
- package/dist/components/state-panel/index.d.ts +2 -0
- package/dist/components/state-panel/index.d.ts.map +1 -0
- package/dist/components/state-panel/pk-state-panel.d.ts +89 -0
- package/dist/components/state-panel/pk-state-panel.d.ts.map +1 -0
- package/dist/components/state-panel/pk-state-panel.js +2 -0
- package/dist/components/state-panel/pk-state-panel.styles.d.ts +2 -0
- package/dist/components/state-panel/pk-state-panel.styles.d.ts.map +1 -0
- package/dist/components/state-panel.d.ts +2 -0
- package/dist/components/state-panel.js +2 -0
- package/dist/components/status/pk-status.js +1 -1
- package/dist/components/status.js +1 -1
- package/dist/components/tabs/pk-tab-heading.js +1 -1
- package/dist/components/tabs/pk-tab-panel.js +1 -1
- package/dist/components/tabs/pk-tab.js +1 -1
- package/dist/components/tabs/pk-tabs.js +1 -1
- package/dist/components/tabs.js +4 -4
- package/dist/components/textarea/pk-textarea.js +1 -1
- package/dist/components/textarea.js +1 -1
- package/dist/components/time-picker/pk-time-picker.js +1 -1
- package/dist/components/time-picker.js +1 -1
- package/dist/components/tiptap/pk-tiptap-content.js +1 -1
- package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
- package/dist/components/tiptap/pk-tiptap-input.js +1 -1
- package/dist/components/tiptap-content.js +1 -1
- package/dist/components/tiptap-editor.js +1 -1
- package/dist/components/tiptap-input.js +1 -1
- package/dist/components/toggle/pk-toggle.js +1 -1
- package/dist/components/toggle-group/pk-toggle-group.js +1 -1
- package/dist/components/toggle-group.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/tooltip/pk-tooltip.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/connect/register-cp-connect.d.ts.map +1 -1
- package/dist/connect/register-cp-connect.js +8 -9
- package/dist/connect/register-cp-connect.js.map +1 -1
- package/dist/events/pk-dismiss.d.ts +10 -0
- package/dist/events/pk-dismiss.d.ts.map +1 -0
- package/dist/icons/index.js +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -67
- package/dist/index.js.map +1 -1
- package/dist/plugin-kit.css +2 -0
- package/dist/plugin-kit.js +4 -4
- package/dist/plugin-kit.js.map +1 -1
- package/dist/register-components.js +1 -1
- package/dist/register-pk.generated.d.ts +4 -0
- package/dist/register-pk.generated.d.ts.map +1 -1
- package/dist/register.d.ts +5 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +124 -55
- package/dist/register.js.map +1 -0
- package/dist/styles/connect/pk-connect.css +6 -107
- package/dist/utilities/fouce.css +2 -0
- package/dist-loader/chunks/{button-group-item.styles-CsBQ3Cyh.js → button-group-item.styles-BQbvE3sC.js} +1 -1
- package/dist-loader/chunks/{codemirror-CSgOT0QM.js → codemirror-C_TTKlG1.js} +584 -436
- package/dist-loader/chunks/editor-CS16rBkM.js +110 -0
- package/dist-loader/chunks/{floating-ui-Cj0imr6d.js → floating-ui-BJQPB-Ip.js} +9 -11
- package/dist-loader/chunks/{lit-DpLik9Rf.js → lit-B6nFKgbW.js} +127 -89
- package/dist-loader/chunks/{option-filter-Bc5aNNT0.js → option-filter-BkKyBg8L.js} +1 -1
- package/dist-loader/chunks/{pk-a11y-CjB4-U-R.js → pk-a11y-mGj0G5AE.js} +1 -1
- package/dist-loader/chunks/{pk-base-B2MqxErC.js → pk-base-BGegy7-X.js} +2 -2
- package/dist-loader/chunks/{pk-button-Dfm23jEC.js → pk-button-DV9Tk5Pd.js} +5 -5
- package/dist-loader/chunks/{pk-calendar-BuSULJCU.js → pk-calendar-C0xpIVIw.js} +9 -9
- package/dist-loader/chunks/{pk-checkbox-BDoq3xg0.js → pk-checkbox-DhP0iMoP.js} +9 -6
- package/dist-loader/chunks/{pk-color-input-eLjO9zfn.js → pk-color-input-B02cYzyr.js} +4 -4
- package/dist-loader/chunks/{pk-combobox-DBvcyxRC.js → pk-combobox-S_tpNUHK.js} +19 -18
- package/dist-loader/chunks/{pk-connect.styles-k61snd3X.js → pk-connect.styles-B5qe5yQB.js} +1 -1
- package/dist-loader/chunks/pk-copy-button-D6tPuhJ3.js +198 -0
- package/dist-loader/chunks/{pk-date-picker-CYLpYIji.js → pk-date-picker-C0y4sfSf.js} +15 -15
- package/dist-loader/chunks/{pk-dialog-BtrH5Ke0.js → pk-dialog-BJs5fVHS.js} +7 -7
- package/dist-loader/chunks/{pk-dropdown-item-D8tfEU-k.js → pk-dropdown-item-Bs5NZDRh.js} +11 -9
- package/dist-loader/chunks/{pk-dropdown-label-TbLj4bHK.js → pk-dropdown-label-Cpl9-bzB.js} +2 -2
- package/dist-loader/chunks/{pk-dropdown-menu-C4GDW5pE.js → pk-dropdown-menu-CLrfuD3i.js} +20 -17
- package/dist-loader/chunks/{pk-field-BM0XD9Ij.js → pk-field-Pg61fxBR.js} +140 -74
- package/dist-loader/chunks/{pk-icon-_1F1aL74.js → pk-icon-B7ywfPb6.js} +4 -4
- package/dist-loader/chunks/{pk-input-DvBrD7Md.js → pk-input-Cj5s8eBT.js} +10 -10
- package/dist-loader/chunks/{pk-lightswitch-CcwlLQ9f.js → pk-lightswitch-rUGB1p8q.js} +6 -6
- package/dist-loader/chunks/{pk-option-DATPm0Bo.js → pk-option-B-MeLvZf.js} +8 -7
- package/dist-loader/chunks/{pk-popup-CUuGs8r_.js → pk-popup-CeyruJFh.js} +35 -29
- package/dist-loader/chunks/{pk-select-DpcvbzUL.js → pk-select-JUx3mxRS.js} +14 -14
- package/dist-loader/chunks/{pk-spinner-Dk_LbvHW.js → pk-spinner-B8iuHDQ9.js} +2 -2
- package/dist-loader/chunks/pk-state-panel-BhdZGllL.js +600 -0
- package/dist-loader/chunks/{pk-status-B8UvjIp2.js → pk-status-D3qVwWlR.js} +2 -2
- package/dist-loader/chunks/{pk-textarea-DeSuxufJ.js → pk-textarea-KnpJMQX2.js} +7 -7
- package/dist-loader/chunks/{pk-time-picker-DpJt8biN.js → pk-time-picker-DCqZ5z7M.js} +6 -6
- package/dist-loader/chunks/{pk-tooltip-DcF9J5GT.js → pk-tooltip-DStkplzy.js} +6 -6
- package/dist-loader/chunks/{popup-content-animation.styles-duCg9-CH.js → popup-content-animation.styles-BtUVJg82.js} +1 -1
- package/dist-loader/chunks/{render-Bnzcxfss.js → render-D9G_a_c2.js} +1 -1
- package/dist-loader/chunks/{svg-Bz-bXZn7.js → svg-BRgqS9vA.js} +8 -1
- package/dist-loader/chunks/{sync-listbox-separators-Ch5krDUs.js → sync-listbox-separators-saLEtPpJ.js} +1 -1
- package/dist-loader/chunks/{tiptap-CgXkiK8d.js → tiptap-uppXgD5k.js} +16099 -9213
- package/dist-loader/chunks/tiptap.styles-CyqI_Wrl.js +896 -0
- package/dist-loader/components/alert/alert.js +662 -0
- package/dist-loader/components/autocomplete/autocomplete.js +15 -15
- package/dist-loader/components/button/button.js +1 -1
- package/dist-loader/components/button-group/button-group-separator.js +2 -2
- package/dist-loader/components/button-group/button-group-text.js +3 -3
- package/dist-loader/components/button-group/button-group.js +9 -7
- package/dist-loader/components/calendar/calendar.js +1 -1
- package/dist-loader/components/checkbox/checkbox.js +1 -1
- package/dist-loader/components/checkbox-select/checkbox-select.js +3 -3
- package/dist-loader/components/code-editor/code-editor.js +4 -4
- package/dist-loader/components/color-input/color-input.js +1 -1
- package/dist-loader/components/combobox/combobox.js +1 -1
- package/dist-loader/components/connect/connect-oauth.js +5 -5
- package/dist-loader/components/connect/connect.js +28 -51
- package/dist-loader/components/copy-button/copy-button.js +1 -176
- package/dist-loader/components/date-picker/date-picker.js +1 -1
- package/dist-loader/components/dialog/dialog.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-item.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-label.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
- package/dist-loader/components/dropdown-menu/dropdown-separator.js +2 -2
- package/dist-loader/components/editable-table/editable-table.js +25 -23
- package/dist-loader/components/field/field.js +1 -1
- package/dist-loader/components/icon/icon.js +3 -3
- package/dist-loader/components/image-browser/image-browser.js +15 -16
- package/dist-loader/components/input/input.js +1 -1
- package/dist-loader/components/input-group/input-group-addon.js +2 -2
- package/dist-loader/components/input-group/input-group-button.js +2 -2
- package/dist-loader/components/input-group/input-group-input.js +2 -2
- package/dist-loader/components/input-group/input-group-text.js +2 -2
- package/dist-loader/components/input-group/input-group-textarea.js +2 -2
- package/dist-loader/components/input-group/input-group.js +3 -3
- package/dist-loader/components/lightswitch/lightswitch.js +1 -1
- package/dist-loader/components/popover/popover.js +9 -9
- package/dist-loader/components/popup/popup.js +1 -1
- package/dist-loader/components/radio-group/radio-group.js +5 -5
- package/dist-loader/components/radio-group/radio.js +2 -2
- package/dist-loader/components/scroll-area/scroll-area.js +2 -2
- package/dist-loader/components/select/option-group.js +3 -3
- package/dist-loader/components/select/option.js +1 -1
- package/dist-loader/components/select/select.js +1 -1
- package/dist-loader/components/separator/separator.js +2 -2
- package/dist-loader/components/spinner/spinner.js +1 -1
- package/dist-loader/components/state-panel/state-panel.js +2 -0
- package/dist-loader/components/status/status.js +1 -1
- package/dist-loader/components/tabs/tab-heading.js +2 -2
- package/dist-loader/components/tabs/tab-panel.js +2 -2
- package/dist-loader/components/tabs/tab.js +2 -2
- package/dist-loader/components/tabs/tabs.js +9 -7
- package/dist-loader/components/textarea/textarea.js +1 -1
- package/dist-loader/components/time-picker/time-picker.js +1 -1
- package/dist-loader/components/tiptap/tiptap-content.js +5 -4
- package/dist-loader/components/tiptap/tiptap-editor.js +595 -21
- package/dist-loader/components/tiptap/tiptap-input.js +273 -5
- package/dist-loader/components/toggle/toggle.js +3 -3
- package/dist-loader/components/toggle-group/toggle-group.js +6 -4
- package/dist-loader/components/tooltip/tooltip.js +1 -1
- package/dist-loader/plugin-kit.css +2 -0
- package/dist-loader/plugin-kit.loader.js +6 -1
- package/dist-loader/styles/connect/pk-connect.css +6 -107
- package/dist-loader/utilities/fouce.css +2 -0
- package/package.json +49 -9
- package/dist/chunks/component-registry-D34fm8xW.js.map +0 -1
- package/dist/chunks/pk-autocomplete-qy2Psvqm.js.map +0 -1
- package/dist/chunks/pk-button-BrH4u4Qr.js.map +0 -1
- package/dist/chunks/pk-button-group-BSz5T5iS.js.map +0 -1
- package/dist/chunks/pk-button-group-separator-DH3Rl24b.js.map +0 -1
- package/dist/chunks/pk-button-group-text-Qro_KmZb.js.map +0 -1
- package/dist/chunks/pk-calendar-Z7Y0PjeY.js.map +0 -1
- package/dist/chunks/pk-checkbox-13ArHSmt.js.map +0 -1
- package/dist/chunks/pk-checkbox-select-Ckvfbu83.js.map +0 -1
- package/dist/chunks/pk-code-editor-BlG6O5qB.js.map +0 -1
- package/dist/chunks/pk-color-input-BRgQ5-vB.js.map +0 -1
- package/dist/chunks/pk-combobox-ag89QEX2.js.map +0 -1
- package/dist/chunks/pk-copy-button-BVaOLtYG.js.map +0 -1
- package/dist/chunks/pk-date-picker-C2YvDPNm.js.map +0 -1
- package/dist/chunks/pk-dialog-VMQqLW1f.js.map +0 -1
- package/dist/chunks/pk-dropdown-item-D9OaG5o-.js.map +0 -1
- package/dist/chunks/pk-dropdown-label-CRNWMWQd.js.map +0 -1
- package/dist/chunks/pk-dropdown-menu-DW1wI8xQ.js.map +0 -1
- package/dist/chunks/pk-editable-table-DDnu1I8Y.js.map +0 -1
- package/dist/chunks/pk-field-UAlMq6mQ.js.map +0 -1
- package/dist/chunks/pk-form-associated-element-GxX5lbnk.js.map +0 -1
- package/dist/chunks/pk-image-browser-Bj8LhWfk.js.map +0 -1
- package/dist/chunks/pk-input-BywmK5n2.js.map +0 -1
- package/dist/chunks/pk-input-group-BLqKPnfc.js.map +0 -1
- package/dist/chunks/pk-input-group-addon-ClBkGmAw.js.map +0 -1
- package/dist/chunks/pk-input-group-button-CHQHsWd4.js.map +0 -1
- package/dist/chunks/pk-input-group-input-oNnqMBGU.js.map +0 -1
- package/dist/chunks/pk-input-group-text-HUxlXROB.js.map +0 -1
- package/dist/chunks/pk-input-group-textarea-Cl2FNuw-.js.map +0 -1
- package/dist/chunks/pk-lightswitch-VHfJizBW.js.map +0 -1
- package/dist/chunks/pk-option-DQZHV9jL.js.map +0 -1
- package/dist/chunks/pk-option-group-CCzJkBFp.js.map +0 -1
- package/dist/chunks/pk-popover-D3jkHfwB.js.map +0 -1
- package/dist/chunks/pk-popup-B65tZMQH.js.map +0 -1
- package/dist/chunks/pk-radio-B5XkMHy3.js.map +0 -1
- package/dist/chunks/pk-radio-group-Dzd-3HaQ.js.map +0 -1
- package/dist/chunks/pk-scroll-area-CdfNxYz8.js.map +0 -1
- package/dist/chunks/pk-select-b5S5WKc-.js.map +0 -1
- package/dist/chunks/pk-separator-N-VyjYE6.js.map +0 -1
- package/dist/chunks/pk-spinner-DweuYJ_Z.js.map +0 -1
- package/dist/chunks/pk-status-BehQARDv.js.map +0 -1
- package/dist/chunks/pk-tab-CTloD18e.js.map +0 -1
- package/dist/chunks/pk-tab-heading-Cjcgebxn.js.map +0 -1
- package/dist/chunks/pk-tab-panel-CkKU5-Ah.js.map +0 -1
- package/dist/chunks/pk-tabs-BgEBki1q.js.map +0 -1
- package/dist/chunks/pk-textarea-Dhj1WFLH.js.map +0 -1
- package/dist/chunks/pk-time-picker-ChRbKHNB.js.map +0 -1
- package/dist/chunks/pk-tiptap-content-CL8smjGi.js.map +0 -1
- package/dist/chunks/pk-tiptap-editor-BMwedkPt.js.map +0 -1
- package/dist/chunks/pk-tiptap-input-YKg4VLp_.js.map +0 -1
- package/dist/chunks/pk-toggle-BthhH7vl.js.map +0 -1
- package/dist/chunks/pk-toggle-group-D2Quux8D.js.map +0 -1
- package/dist/chunks/pk-tooltip--QBV6puX.js.map +0 -1
- package/dist/chunks/register-BqkU5JNH.js +0 -148
- package/dist/chunks/register-BqkU5JNH.js.map +0 -1
- package/dist-loader/chunks/rolldown-runtime-CzwdidQP.js +0 -13
- package/dist-loader/chunks/supports-popover-COjbi2RP.js +0 -5
- package/dist-loader/chunks/tiptap.styles-C0E1NpSx.js +0 -1848
- /package/dist-loader/chunks/{animate-with-class-DT0jwaR_.js → animate-with-class-CjTZI0NU.js} +0 -0
- /package/dist-loader/chunks/{field-labels-D3lKQ2nq.js → field-labels-pY-gQDwQ.js} +0 -0
- /package/dist-loader/chunks/{has-slot-BGJeJdHr.js → has-slot-DJv86HKx.js} +0 -0
- /package/dist-loader/chunks/{mirror-validator-C5XrXPaq.js → mirror-validator-BkZlEv1Z.js} +0 -0
- /package/dist-loader/chunks/{overlay-lifecycle-C3tSQ3UR.js → overlay-lifecycle-C582MGBJ.js} +0 -0
- /package/dist-loader/chunks/{pk-clear-BMZUzwDt.js → pk-clear-DHxP_2cm.js} +0 -0
- /package/dist-loader/chunks/{popup-placement-animation-WlEXnS85.js → popup-placement-animation-ClUYI79z.js} +0 -0
- /package/dist-loader/chunks/{popup-pointer-Ck28WdVP.js → popup-pointer-Bh_d205v.js} +0 -0
- /package/dist-loader/chunks/{registry-BanyScVR.js → registry-CJc164pT.js} +0 -0
- /package/dist-loader/chunks/{required-validator-0XwZtX9k.js → required-validator-I58oJGZ3.js} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { t as icons_exports } from "./icons-
|
|
2
|
-
import { i as
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { t as icons_exports } from "./icons-k1pvx6yX.js";
|
|
2
|
+
import { i as customElement, n as PkElement, t as __decorate } from "./decorate-Br_PE9pq.js";
|
|
3
|
+
import { r as state, t as property } from "./decorators-BkErmuYK.js";
|
|
4
|
+
import { n as renderIconHtml } from "./render-DQZp_Rak.js";
|
|
5
|
+
import { t as HasSlotController } from "./has-slot-DJv86HKx.js";
|
|
6
|
+
import { t as iconStyles } from "./icon.styles-KWvfi7RV.js";
|
|
6
7
|
import { css, html, nothing } from "lit";
|
|
7
|
-
import { classMap } from "lit/directives/class-map.js";
|
|
8
8
|
import { unsafeSVG } from "lit/directives/unsafe-svg.js";
|
|
9
9
|
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
10
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
10
11
|
//#region src/utils/date.ts
|
|
11
12
|
/** ISO date helpers — ported from `date-picker/internal/iso`. */
|
|
12
13
|
var ISO_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
@@ -142,7 +143,7 @@ function isoWeekNumber(date) {
|
|
|
142
143
|
const firstThursday = new Date(target.getFullYear(), 0, 4);
|
|
143
144
|
const firstDayNum = (firstThursday.getDay() + 6) % 7;
|
|
144
145
|
firstThursday.setDate(firstThursday.getDate() - firstDayNum + 3);
|
|
145
|
-
return 1 + Math.round((target.getTime() - firstThursday.getTime()) /
|
|
146
|
+
return 1 + Math.round((target.getTime() - firstThursday.getTime()) / 6048e5);
|
|
146
147
|
}
|
|
147
148
|
function formatDisplayDate(date, locale) {
|
|
148
149
|
return new Intl.DateTimeFormat(locale || void 0, {
|
|
@@ -214,7 +215,7 @@ function allDisabledInRange(start, end, isDisabled) {
|
|
|
214
215
|
}
|
|
215
216
|
//#endregion
|
|
216
217
|
//#region src/utils/week-info.ts
|
|
217
|
-
var SUNDAY_FIRST = new Set([
|
|
218
|
+
var SUNDAY_FIRST = /* @__PURE__ */ new Set([
|
|
218
219
|
"US",
|
|
219
220
|
"CA",
|
|
220
221
|
"MX",
|
|
@@ -252,7 +253,7 @@ var SUNDAY_FIRST = new Set([
|
|
|
252
253
|
"ET",
|
|
253
254
|
"KE"
|
|
254
255
|
]);
|
|
255
|
-
var SATURDAY_FIRST = new Set([
|
|
256
|
+
var SATURDAY_FIRST = /* @__PURE__ */ new Set([
|
|
256
257
|
"SA",
|
|
257
258
|
"AE",
|
|
258
259
|
"QA",
|
|
@@ -268,7 +269,7 @@ var SATURDAY_FIRST = new Set([
|
|
|
268
269
|
"DZ",
|
|
269
270
|
"LY"
|
|
270
271
|
]);
|
|
271
|
-
var FRI_SAT_WEEKEND = new Set([
|
|
272
|
+
var FRI_SAT_WEEKEND = /* @__PURE__ */ new Set([
|
|
272
273
|
"SA",
|
|
273
274
|
"AE",
|
|
274
275
|
"QA",
|
|
@@ -1461,4 +1462,4 @@ PkCalendar = __decorate([customElement("pk-calendar")], PkCalendar);
|
|
|
1461
1462
|
//#endregion
|
|
1462
1463
|
export { parseIsoDate as a, parseDateList as i, coerceToDate as n, parseRange as o, formatIsoDate as r, PkCalendar as t };
|
|
1463
1464
|
|
|
1464
|
-
//# sourceMappingURL=pk-calendar-
|
|
1465
|
+
//# sourceMappingURL=pk-calendar-Df0c5u79.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-calendar-Df0c5u79.js","names":["chevronLeft","chevronRight","_decorate"],"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 '../../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,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
1
|
+
import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
|
|
2
|
+
import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
|
|
3
|
+
import { t as HasSlotController } from "./has-slot-DJv86HKx.js";
|
|
4
|
+
import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
|
|
5
|
+
import { t as RequiredValidator } from "./required-validator-I58oJGZ3.js";
|
|
5
6
|
import { css, html, nothing } from "lit";
|
|
6
7
|
import { classMap } from "lit/directives/class-map.js";
|
|
7
8
|
//#region src/icons/checkbox-indicators.ts
|
|
@@ -357,4 +358,4 @@ PkCheckbox = __decorate([customElement("pk-checkbox")], PkCheckbox);
|
|
|
357
358
|
//#endregion
|
|
358
359
|
export { PkCheckbox as t };
|
|
359
360
|
|
|
360
|
-
//# sourceMappingURL=pk-checkbox-
|
|
361
|
+
//# sourceMappingURL=pk-checkbox-L5uRex3b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-checkbox-L5uRex3b.js","names":["_decorate"],"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 '../../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('checkboxValue')) {\n this.syncFormValue();\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,5 +1,6 @@
|
|
|
1
|
-
import { i as
|
|
2
|
-
import "./
|
|
1
|
+
import { i as customElement, n as PkElement, t as __decorate } from "./decorate-Br_PE9pq.js";
|
|
2
|
+
import { r as state, t as property } from "./decorators-BkErmuYK.js";
|
|
3
|
+
import "./pk-checkbox-L5uRex3b.js";
|
|
3
4
|
import { css, html } from "lit";
|
|
4
5
|
import { classMap } from "lit/directives/class-map.js";
|
|
5
6
|
//#region src/components/checkbox-select/pk-checkbox-select.styles.ts
|
|
@@ -218,4 +219,4 @@ PkCheckboxSelect = __decorate([customElement("pk-checkbox-select")], PkCheckboxS
|
|
|
218
219
|
//#endregion
|
|
219
220
|
export { PkCheckboxSelect as n, ALL_VALUE as t };
|
|
220
221
|
|
|
221
|
-
//# sourceMappingURL=pk-checkbox-select-
|
|
222
|
+
//# sourceMappingURL=pk-checkbox-select-6OS0wFYO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-checkbox-select-6OS0wFYO.js","names":["_decorate"],"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 '../../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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pk-clear
|
|
1
|
+
{"version":3,"file":"pk-clear-DHxP_2cm.js","names":[],"sources":["../../src/events/pk-clear.ts"],"sourcesContent":["/** Fired when a form control's value is cleared — mirrors `pk-clear`. */\nexport class PkClearEvent extends Event {\n constructor() {\n super('pk-clear', { bubbles: true, cancelable: false, composed: true });\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'pk-clear': PkClearEvent;\n }\n}\n"],"mappings":";;AACA,IAAa,eAAb,cAAkC,MAAM;CACpC,cAAc;EACV,MAAM,YAAY;GAAE,SAAS;GAAM,YAAY;GAAO,UAAU;EAAK,CAAC;CAC1E;AACJ"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
1
|
+
import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
|
|
2
|
+
import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
|
|
3
|
+
import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
|
|
4
|
+
import { t as MirrorValidator } from "./mirror-validator-BkZlEv1Z.js";
|
|
5
|
+
import { t as formControlStyles } from "./form-control.styles-CQ93gnVf.js";
|
|
5
6
|
import { css, html } from "lit";
|
|
6
7
|
import { CodeMirrorHost, computeCodeEditorMinHeight } from "@verbb/plugin-kit-codemirror-core";
|
|
7
8
|
//#region src/components/code-editor/pk-code-editor.styles.ts
|
|
@@ -209,4 +210,4 @@ PkCodeEditor = __decorate([customElement("pk-code-editor")], PkCodeEditor);
|
|
|
209
210
|
//#endregion
|
|
210
211
|
export { PkCodeEditor as t };
|
|
211
212
|
|
|
212
|
-
//# sourceMappingURL=pk-code-editor-
|
|
213
|
+
//# sourceMappingURL=pk-code-editor-vZriNR67.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-code-editor-vZriNR67.js","names":["_decorate"],"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 '../../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":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
1
|
+
import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
|
|
2
|
+
import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
|
|
3
|
+
import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
|
|
4
|
+
import { t as MirrorValidator } from "./mirror-validator-BkZlEv1Z.js";
|
|
5
|
+
import { t as RequiredValidator } from "./required-validator-I58oJGZ3.js";
|
|
5
6
|
import { css, html, nothing } from "lit";
|
|
6
7
|
import { classMap } from "lit/directives/class-map.js";
|
|
7
8
|
//#region src/components/color-input/pk-color-input.styles.ts
|
|
@@ -402,4 +403,4 @@ PkColorInput = __decorate([customElement("pk-color-input")], PkColorInput);
|
|
|
402
403
|
//#endregion
|
|
403
404
|
export { PkColorInput as t };
|
|
404
405
|
|
|
405
|
-
//# sourceMappingURL=pk-color-input-
|
|
406
|
+
//# sourceMappingURL=pk-color-input-Csbm4ROT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-color-input-Csbm4ROT.js","names":["_decorate"],"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 '../../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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"}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
import { t as icons_exports } from "./icons-
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import { t as
|
|
6
|
-
import { t as
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { i as
|
|
10
|
-
import { i as
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import "./
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { n as
|
|
18
|
-
import { t as
|
|
1
|
+
import { t as icons_exports } from "./icons-k1pvx6yX.js";
|
|
2
|
+
import { i as customElement, t as __decorate } from "./decorate-Br_PE9pq.js";
|
|
3
|
+
import { n as query, r as state, t as property } from "./decorators-BkErmuYK.js";
|
|
4
|
+
import { n as renderIconHtml } from "./render-DQZp_Rak.js";
|
|
5
|
+
import { t as HasSlotController } from "./has-slot-DJv86HKx.js";
|
|
6
|
+
import { t as iconStyles } from "./icon.styles-KWvfi7RV.js";
|
|
7
|
+
import { t as PkFormAssociatedElement } from "./pk-form-associated-element-Doh2K3pG.js";
|
|
8
|
+
import { t as MirrorValidator } from "./mirror-validator-BkZlEv1Z.js";
|
|
9
|
+
import { i as uniqueId, t as LiveRegion } from "./focus-DcVUPVqn.js";
|
|
10
|
+
import { i as unregisterDismissible, n as isTopDismissible, r as registerDismissible } from "./dismissible-stack-CwhtwAyo.js";
|
|
11
|
+
import { i as scrollIntoView } from "./scroll-lock-DE1pElMQ.js";
|
|
12
|
+
import { t as PkClearEvent } from "./pk-clear-DHxP_2cm.js";
|
|
13
|
+
import { i as PkShowEvent, n as PkAfterShowEvent, r as PkHideEvent, t as PkAfterHideEvent } from "./overlay-lifecycle-C582MGBJ.js";
|
|
14
|
+
import "./pk-popup-DVE93VSV.js";
|
|
15
|
+
import { i as waitForPopupReposition, r as syncPopupPlacementAnimation } from "./popup-placement-animation-ClUYI79z.js";
|
|
16
|
+
import { a as isListboxTypeToSelectKey, i as handleListboxKeyDown, n as LISTBOX_NAVIGATION_KEYS } from "./sync-listbox-separators-saLEtPpJ.js";
|
|
17
|
+
import { i as waitForPopupContentExitAnimation, n as AsyncOptionFetcher, r as syncFilteredOptions, t as matchesOptionFilter } from "./option-filter-BkKyBg8L.js";
|
|
18
|
+
import { n as isPointerInsideOverlay, t as isEventInsideOverlay } from "./popup-pointer-Bh_d205v.js";
|
|
19
|
+
import { t as popupContentAnimationStyles } from "./popup-content-animation.styles-CJ8zGJz-.js";
|
|
19
20
|
import { css, html, nothing } from "lit";
|
|
20
|
-
import { classMap } from "lit/directives/class-map.js";
|
|
21
21
|
import { unsafeSVG } from "lit/directives/unsafe-svg.js";
|
|
22
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
22
23
|
//#region src/events/pk-create.ts
|
|
23
24
|
/** Fired before a combobox creates a new option — mirrors `pk-create`. */
|
|
24
25
|
var PkCreateEvent = class extends Event {
|
|
@@ -1414,9 +1415,10 @@ var PkCombobox = class PkCombobox extends PkFormAssociatedElement {
|
|
|
1414
1415
|
this.syncHasValueAttribute();
|
|
1415
1416
|
this.emitValueChange();
|
|
1416
1417
|
}
|
|
1417
|
-
if (this.shouldReturnFocusToInput(source))
|
|
1418
|
-
|
|
1419
|
-
|
|
1418
|
+
if (this.shouldReturnFocusToInput(source)) {
|
|
1419
|
+
if (this.usesPopupMode) this.popupTrigger?.focus({ preventScroll: true });
|
|
1420
|
+
else this.activeInput?.focus({ preventScroll: true });
|
|
1421
|
+
} else {
|
|
1420
1422
|
this.activeInput?.blur();
|
|
1421
1423
|
this.popupTrigger?.blur();
|
|
1422
1424
|
}
|
|
@@ -1970,4 +1972,4 @@ PkCombobox = __decorate([customElement("pk-combobox")], PkCombobox);
|
|
|
1970
1972
|
//#endregion
|
|
1971
1973
|
export { PkCreateEvent as n, PkCombobox as t };
|
|
1972
1974
|
|
|
1973
|
-
//# sourceMappingURL=pk-combobox-
|
|
1975
|
+
//# sourceMappingURL=pk-combobox-BrSBrldb.js.map
|