@mhmo91/schmancy 0.9.5 → 0.9.6
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/custom-elements.json +493 -718
- package/dist/{animation-CO_Csq84.cjs.map → animation-Bcwh107v.cjs.map} +1 -1
- package/dist/{animation-BK-8BwY8.js.map → animation-CXKSuUoE.js.map} +1 -1
- package/dist/{area-CRoGqD_u.js → area-BARjKpE9.js} +2 -2
- package/dist/{area-CRoGqD_u.js.map → area-BARjKpE9.js.map} +1 -1
- package/dist/{area-JPykB7A9.cjs → area-D9b9dHQr.cjs} +3 -3
- package/dist/{area-JPykB7A9.cjs.map → area-D9b9dHQr.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-kz8UgPTO.js → audio-C7TzWI8M.js} +1 -1
- package/dist/audio-C7TzWI8M.js.map +1 -0
- package/dist/{audio-DtYYgzYD.cjs → audio-DUVz7Ars.cjs} +1 -1
- package/dist/audio-DUVz7Ars.cjs.map +1 -0
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-AI2CCJmK.cjs +115 -0
- package/dist/autocomplete-AI2CCJmK.cjs.map +1 -0
- package/dist/{autocomplete-BllPQwr8.js → autocomplete-DOimwVMP.js} +48 -22
- package/dist/autocomplete-DOimwVMP.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-DYEAZ8Qj.cjs → boat-Bk4u-LzT.cjs} +2 -2
- package/dist/{boat-DYEAZ8Qj.cjs.map → boat-Bk4u-LzT.cjs.map} +1 -1
- package/dist/{boat-BDTQ-du9.js → boat-DrghVeWK.js} +5 -5
- package/dist/{boat-BDTQ-du9.js.map → boat-DrghVeWK.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +34 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +73 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/{busy-ChDAeaKF.js → busy-BmFfwyz_.js} +7 -6
- package/dist/{busy-ChDAeaKF.js.map → busy-BmFfwyz_.js.map} +1 -1
- package/dist/{busy-Dj7Xn0Z0.cjs → busy-c_q_F8O0.cjs} +8 -8
- package/dist/{busy-Dj7Xn0Z0.cjs.map → busy-c_q_F8O0.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +4 -4
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +25 -6
- package/dist/button.js.map +1 -1
- package/dist/{card-DZFPRPqs.js → card-BADJHUMA.js} +16 -15
- package/dist/{card-DZFPRPqs.js.map → card-BADJHUMA.js.map} +1 -1
- package/dist/{card-BvPWVEJX.cjs → card-C_E944_Z.cjs} +10 -10
- package/dist/{card-BvPWVEJX.cjs.map → card-C_E944_Z.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +3 -3
- package/dist/charts.cjs.map +1 -1
- package/dist/charts.js +2 -2
- package/dist/{checkbox-GSSjqo6w.js → checkbox-D7rvCrGk.js} +28 -9
- package/dist/{checkbox-GSSjqo6w.js.map → checkbox-D7rvCrGk.js.map} +1 -1
- package/dist/{checkbox-BC_37rsG.cjs → checkbox-ZqDoCagB.cjs} +10 -10
- package/dist/{checkbox-BC_37rsG.cjs.map → checkbox-ZqDoCagB.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-B19XS8Xc.cjs → chips-Cux635Qs.cjs} +18 -18
- package/dist/chips-Cux635Qs.cjs.map +1 -0
- package/dist/{chips-B9oAEfE_.js → chips-vdzIsesI.js} +37 -27
- package/dist/chips-vdzIsesI.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-fSLrlgOb.cjs → code-highlight-C9lKek2p.cjs} +11 -11
- package/dist/{code-highlight-fSLrlgOb.cjs.map → code-highlight-C9lKek2p.cjs.map} +1 -1
- package/dist/{code-highlight-DCk5lJY-.js → code-highlight-D6yruol6.js} +6 -5
- package/dist/{code-highlight-DCk5lJY-.js.map → code-highlight-D6yruol6.js.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/components-ByRyEzz5.cjs +73 -0
- package/dist/{components-CyD6a7gQ.cjs.map → components-ByRyEzz5.cjs.map} +1 -1
- package/dist/{components-COsM6sJZ.js → components-DSvPKR9Q.js} +2 -2
- package/dist/{components-COsM6sJZ.js.map → components-DSvPKR9Q.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +7 -7
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +5 -4
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{cursor-glow-DtSy_PJd.cjs → cursor-glow-82y5h3E4.cjs} +1 -1
- package/dist/{cursor-glow-DtSy_PJd.cjs.map → cursor-glow-82y5h3E4.cjs.map} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js → cursor-glow-C2YRrB8Z.js} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js.map → cursor-glow-C2YRrB8Z.js.map} +1 -1
- package/dist/{date-range-ZAaQB22I.cjs → date-range-DJsavigf.cjs} +3 -3
- package/dist/date-range-DJsavigf.cjs.map +1 -0
- package/dist/{date-range-inline-Bl8qbiQF.js → date-range-inline-B87TDYI6.js} +1 -1
- package/dist/{date-range-inline-Bl8qbiQF.js.map → date-range-inline-B87TDYI6.js.map} +1 -1
- package/dist/date-range-inline-De-M0VmL.cjs +43 -0
- package/dist/{date-range-inline-m7nLjOMI.cjs.map → date-range-inline-De-M0VmL.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/{date-range-Sfyco9-n.js → date-range-tEX2Jx2j.js} +4 -4
- package/dist/date-range-tEX2Jx2j.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay-BvVdfhAR.cjs +9 -0
- package/dist/{delay-7boauN6N.cjs.map → delay-BvVdfhAR.cjs.map} +1 -1
- package/dist/{delay-CgX6m0HN.js → delay-CZw37zps.js} +9 -8
- package/dist/{delay-CgX6m0HN.js.map → delay-CZw37zps.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-BHnk8l4q.cjs → details-Bhz8_whd.cjs} +9 -9
- package/dist/{details-BHnk8l4q.cjs.map → details-Bhz8_whd.cjs.map} +1 -1
- package/dist/{details-BPkUg8Cq.js → details-D7VTnLOh.js} +16 -15
- package/dist/{details-BPkUg8Cq.js.map → details-D7VTnLOh.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-service-NZEvyEK-.js → dialog-service-ClFrOWf4.js} +2 -2
- package/dist/{dialog-service-NZEvyEK-.js.map → dialog-service-ClFrOWf4.js.map} +1 -1
- package/dist/{dialog-service-VnW4gkmE.cjs → dialog-service-DcuAavp2.cjs} +1 -1
- package/dist/{dialog-service-VnW4gkmE.cjs.map → dialog-service-DcuAavp2.cjs.map} +1 -1
- package/dist/dialog.cjs +18 -11
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +66 -43
- package/dist/dialog.js.map +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +5 -5
- package/dist/{divider-_khrhrZo.cjs → divider-S0bHwCCS.cjs} +2 -2
- package/dist/{divider-_khrhrZo.cjs.map → divider-S0bHwCCS.cjs.map} +1 -1
- package/dist/{divider-CW9a7MMj.js → divider-zS232JDr.js} +2 -2
- package/dist/{divider-CW9a7MMj.js.map → divider-zS232JDr.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +8 -7
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-iQ7EOMP7.js → expand-BXt9SqAF.js} +13 -12
- package/dist/{expand-iQ7EOMP7.js.map → expand-BXt9SqAF.js.map} +1 -1
- package/dist/{expand-Cp7-PH8b.cjs → expand-Dr7TFXpl.cjs} +18 -18
- package/dist/{expand-Cp7-PH8b.cjs.map → expand-Dr7TFXpl.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-IKAiJJhv.cjs → extra-BmZTXAp0.cjs} +3 -3
- package/dist/{extra-IKAiJJhv.cjs.map → extra-BmZTXAp0.cjs.map} +1 -1
- package/dist/{extra-wEpvEFbK.js → extra-COYhsOyZ.js} +2 -2
- package/dist/{extra-wEpvEFbK.js.map → extra-COYhsOyZ.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/float-CSRW-Rrd.cjs +1 -0
- package/dist/{float-D5rNC82i.cjs.map → float-CSRW-Rrd.cjs.map} +1 -1
- package/dist/{float-BQ_urmMs.js → float-DCXafWh6.js} +2 -2
- package/dist/{float-BQ_urmMs.js.map → float-DCXafWh6.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{flow-CUj0fDT_.js.map → flow-CqgDEIqK.js.map} +1 -1
- package/dist/{flow-Bbwn6dRN.cjs.map → flow-DSu4PLt1.cjs.map} +1 -1
- package/dist/form-CAY9GSCd.cjs +1 -0
- package/dist/form-CAY9GSCd.cjs.map +1 -0
- package/dist/form-D2cJ58TB.js +68 -0
- package/dist/form-D2cJ58TB.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +2 -1
- package/dist/{hashContent-DaeGmY-p.cjs.map → hashContent-kKvXKFa9.cjs.map} +1 -1
- package/dist/{hashContent-DYM21p6t.js.map → hashContent-nD2uWwi2.js.map} +1 -1
- package/dist/{icons-BDqiGXrO.js → icons-BbaI9Zf-.js} +9 -8
- package/dist/icons-BbaI9Zf-.js.map +1 -0
- package/dist/{icons-B57_93VV.cjs → icons-DPUeLS_Y.cjs} +3 -3
- package/dist/icons-DPUeLS_Y.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-WnWPIrBG.js → iframe-CEDOvkql.js} +5 -4
- package/dist/{iframe-WnWPIrBG.js.map → iframe-CEDOvkql.js.map} +1 -1
- package/dist/{iframe-DNHL3GIk.cjs → iframe-Ct50FYXq.cjs} +3 -3
- package/dist/{iframe-DNHL3GIk.cjs.map → iframe-Ct50FYXq.cjs.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +65 -59
- package/dist/{input-BiSrTcrR.cjs → input-DMjpf6V8.cjs} +2 -2
- package/dist/{input-BiSrTcrR.cjs.map → input-DMjpf6V8.cjs.map} +1 -1
- package/dist/{input-VaXHFrRn.js → input-Ri72dn5t.js} +1 -1
- package/dist/{input-VaXHFrRn.js.map → input-Ri72dn5t.js.map} +1 -1
- package/dist/{input-chip-Dy-AiP55.cjs → input-chip-BhjGVpc3.cjs} +9 -9
- package/dist/input-chip-BhjGVpc3.cjs.map +1 -0
- package/dist/{input-chip-QejNcRnS.js → input-chip-CI4__N8w.js} +13 -9
- package/dist/input-chip-CI4__N8w.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/{intersection-CZpaIHeT.cjs.map → intersection-D1v1UCVv.cjs.map} +1 -1
- package/dist/{intersection-BPLpqYEd.js.map → intersection-LfEsy29T.js.map} +1 -1
- package/dist/json.cjs +3 -3
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +5 -4
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +28 -0
- package/dist/kbd.cjs.map +1 -0
- package/dist/kbd.js +45 -0
- package/dist/kbd.js.map +1 -0
- package/dist/{layout-yxSlLybo.js → layout-BE2ld1IY.js} +1 -1
- package/dist/{layout-yxSlLybo.js.map → layout-BE2ld1IY.js.map} +1 -1
- package/dist/layout-D7xOqMkJ.cjs +17 -0
- package/dist/{layout-DNYG3phx.cjs.map → layout-D7xOqMkJ.cjs.map} +1 -1
- package/dist/{layout-4C-6_cre.cjs → layout-PZCF3kwl.cjs} +1 -1
- package/dist/{layout-4C-6_cre.cjs.map → layout-PZCF3kwl.cjs.map} +1 -1
- package/dist/{layout-CnsXeCAy.js → layout-uAQpJN31.js} +20 -19
- package/dist/{layout-CnsXeCAy.js.map → layout-uAQpJN31.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-BrI1Z31s.js → lightbox-C0OEHns9.js} +10 -9
- package/dist/{lightbox-BrI1Z31s.js.map → lightbox-C0OEHns9.js.map} +1 -1
- package/dist/{lightbox-CmACf0t5.cjs → lightbox-cXRnvHMN.cjs} +20 -20
- package/dist/{lightbox-CmACf0t5.cjs.map → lightbox-cXRnvHMN.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-swIL9VDv.cjs → list-CmJ5h35b.cjs} +5 -5
- package/dist/{list-swIL9VDv.cjs.map → list-CmJ5h35b.cjs.map} +1 -1
- package/dist/{list-Cm-jjXxM.js → list-d1mHar5p.js} +14 -13
- package/dist/{list-Cm-jjXxM.js.map → list-d1mHar5p.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-3llHwB-8.cjs → litElement.mixin-Bj2q1yPw.cjs} +1 -1
- package/dist/{litElement.mixin-3llHwB-8.cjs.map → litElement.mixin-Bj2q1yPw.cjs.map} +1 -1
- package/dist/{litElement.mixin-6jJYHCrZ.js → litElement.mixin-CncaUoxz.js} +1 -1
- package/dist/{litElement.mixin-6jJYHCrZ.js.map → litElement.mixin-CncaUoxz.js.map} +1 -1
- package/dist/{magnetic-BZGFxAWG.js → magnetic-Dj52WplI.js} +2 -2
- package/dist/{magnetic-BZGFxAWG.js.map → magnetic-Dj52WplI.js.map} +1 -1
- package/dist/{magnetic-Dux4QwO4.cjs → magnetic-aBBnj_vk.cjs} +1 -1
- package/dist/{magnetic-Dux4QwO4.cjs.map → magnetic-aBBnj_vk.cjs.map} +1 -1
- package/dist/{mailbox-D6LkQcN5.cjs → mailbox-BmChskZc.cjs} +59 -59
- package/dist/{mailbox-D6LkQcN5.cjs.map → mailbox-BmChskZc.cjs.map} +1 -1
- package/dist/{mailbox-BuvsVaAQ.js → mailbox-C4-E93be.js} +13 -12
- package/dist/{mailbox-BuvsVaAQ.js.map → mailbox-C4-E93be.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-CQiKAxC3.js → map-DHyYLhvy.js} +6 -5
- package/dist/{map-CQiKAxC3.js.map → map-DHyYLhvy.js.map} +1 -1
- package/dist/{map-D5NN4VET.cjs → map-DYEvlNl0.cjs} +7 -7
- package/dist/{map-D5NN4VET.cjs.map → map-DYEvlNl0.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-CkgMO9K5.cjs → menu-BlPTI6H9.cjs} +3 -3
- package/dist/{menu-CkgMO9K5.cjs.map → menu-BlPTI6H9.cjs.map} +1 -1
- package/dist/{menu-C1x04YZw.js → menu-DFDBADp4.js} +3 -3
- package/dist/{menu-C1x04YZw.js.map → menu-DFDBADp4.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.cjs.map +1 -1
- package/dist/mixins.js +43 -15
- package/dist/mixins.js.map +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +3 -3
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-BnBgxjF-.js → notification-DGpv8g2H.js} +4 -4
- package/dist/{notification-BnBgxjF-.js.map → notification-DGpv8g2H.js.map} +1 -1
- package/dist/notification-DKVWYhqs.cjs +23 -0
- package/dist/{notification-CZFEhWxc.cjs.map → notification-DKVWYhqs.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-DBO8xZwd.js → option-BD2eh458.js} +6 -5
- package/dist/{option-DBO8xZwd.js.map → option-BD2eh458.js.map} +1 -1
- package/dist/{option-BrxCVwSx.cjs → option-LtSDy2xf.cjs} +5 -5
- package/dist/{option-BrxCVwSx.cjs.map → option-LtSDy2xf.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-DQey9Qph.cjs.map → overlay-stack-CEYGD9T1.cjs.map} +1 -1
- package/dist/{overlay-stack-DT1SdaGW.js.map → overlay-stack-Ca4EK2Mu.js.map} +1 -1
- package/dist/page.cjs +2 -2
- package/dist/page.cjs.map +1 -1
- package/dist/page.js +5 -5
- package/dist/{progress-Db2e4_Zd.cjs → progress-B5ChDPbB.cjs} +2 -2
- package/dist/{progress-Db2e4_Zd.cjs.map → progress-B5ChDPbB.cjs.map} +1 -1
- package/dist/{progress-DeiHxXo7.js → progress-CE1Pk2hi.js} +2 -2
- package/dist/{progress-DeiHxXo7.js.map → progress-CE1Pk2hi.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-DHnhQtCH.cjs → provide-BZ9lq_Be.cjs} +1 -1
- package/dist/{provide-DHnhQtCH.cjs.map → provide-BZ9lq_Be.cjs.map} +1 -1
- package/dist/{provide-C1aQhxYo.js → provide-jn1Fj1vv.js} +1 -1
- package/dist/{provide-C1aQhxYo.js.map → provide-jn1Fj1vv.js.map} +1 -1
- package/dist/qr-scanner.cjs +2 -2
- package/dist/qr-scanner.cjs.map +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/radio-group-Cd9pZ2MR.cjs +40 -0
- package/dist/{radio-group-Cspwd-Vw.cjs.map → radio-group-Cd9pZ2MR.cjs.map} +1 -1
- package/dist/{radio-group-zSO0AkJf.js → radio-group-CyRHgIF3.js} +7 -6
- package/dist/{radio-group-zSO0AkJf.js.map → radio-group-CyRHgIF3.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +4 -4
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +4 -3
- package/dist/range.js.map +1 -1
- package/dist/{reduced-motion-D-L12p7G.js.map → reduced-motion-B83yZbcO.js.map} +1 -1
- package/dist/{reduced-motion-Ds05GPyz.cjs.map → reduced-motion-DR32yKEO.cjs.map} +1 -1
- package/dist/{rxjs-utils-BSjmI9-Q.js.map → rxjs-utils-Bldch1RO.js.map} +1 -1
- package/dist/{rxjs-utils-DCsfzeap.cjs.map → rxjs-utils-hAgKC7vk.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-QMCmbbDv.cjs → scroll-C_iNOi7E.cjs} +2 -2
- package/dist/{scroll-QMCmbbDv.cjs.map → scroll-C_iNOi7E.cjs.map} +1 -1
- package/dist/{scroll-cBDzye64.js → scroll-DoliwpRu.js} +7 -6
- package/dist/{scroll-cBDzye64.js.map → scroll-DoliwpRu.js.map} +1 -1
- package/dist/{search-C4dFHYbX.js.map → search-BlGJ6uJv.js.map} +1 -1
- package/dist/{search-Ds8tt7Et.cjs.map → search-C8eAOzBm.cjs.map} +1 -1
- package/dist/{select-Ct37l3lg.cjs → select-CWWuZ2iJ.cjs} +2 -2
- package/dist/{select-Ct37l3lg.cjs.map → select-CWWuZ2iJ.cjs.map} +1 -1
- package/dist/{select-c6HbWvKP.js → select-_vHPXi30.js} +3 -3
- package/dist/{select-c6HbWvKP.js.map → select-_vHPXi30.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BMXcUiIm.js → sheet-i1KtxGIj.js} +5 -5
- package/dist/{sheet-BMXcUiIm.js.map → sheet-i1KtxGIj.js.map} +1 -1
- package/dist/{sheet-CQec-bCV.cjs → sheet-r0oEYIdi.cjs} +2 -2
- package/dist/{sheet-CQec-bCV.cjs.map → sheet-r0oEYIdi.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Dumvr1HT.cjs → sheet.service-Cr13Oo6G.cjs} +1 -1
- package/dist/{sheet.service-Dumvr1HT.cjs.map → sheet.service-Cr13Oo6G.cjs.map} +1 -1
- package/dist/{sheet.service-BcPV3Du4.js → sheet.service-DUO5_kmI.js} +3 -3
- package/dist/{sheet.service-BcPV3Du4.js.map → sheet.service-DUO5_kmI.js.map} +1 -1
- package/dist/skeleton.cjs +33 -0
- package/dist/skeleton.cjs.map +1 -0
- package/dist/skeleton.js +58 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/skills/INDEX.md +7 -6
- package/dist/skills/breadcrumb.md +53 -0
- package/dist/skills/kbd.md +40 -0
- package/dist/skills/schmancy/INDEX.md +7 -6
- package/dist/skills/schmancy/breadcrumb.md +53 -0
- package/dist/skills/schmancy/kbd.md +40 -0
- package/dist/skills/schmancy/skeleton.md +40 -0
- package/dist/skills/schmancy/splash-screen.md +60 -0
- package/dist/skills/schmancy/switch.md +58 -0
- package/dist/skills/schmancy/tooltip.md +1 -1
- package/dist/skills/schmancy/visually-hidden.md +41 -0
- package/dist/skills/skeleton.md +40 -0
- package/dist/skills/splash-screen.md +60 -0
- package/dist/skills/switch.md +58 -0
- package/dist/skills/tooltip.md +1 -1
- package/dist/skills/visually-hidden.md +41 -0
- package/dist/slider.cjs +3 -3
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-Bu3EQLv2.cjs → sound.service-BjSoGjmT.cjs} +1 -1
- package/dist/{sound.service-Bu3EQLv2.cjs.map → sound.service-BjSoGjmT.cjs.map} +1 -1
- package/dist/{sound.service-m3BrSfuH.js → sound.service-cdkw3Wkv.js} +1 -1
- package/dist/{sound.service-m3BrSfuH.js.map → sound.service-cdkw3Wkv.js.map} +1 -1
- package/dist/splash-screen-CquyPP1C.cjs +41 -0
- package/dist/splash-screen-CquyPP1C.cjs.map +1 -0
- package/dist/splash-screen-CvucPkpD.js +83 -0
- package/dist/splash-screen-CvucPkpD.js.map +1 -0
- package/dist/splash-screen.cjs +1 -0
- package/dist/splash-screen.js +1 -0
- package/dist/src-Bemk2C2P.cjs +269 -0
- package/dist/{src-BtQVyqMy.cjs.map → src-Bemk2C2P.cjs.map} +1 -1
- package/dist/{src-BLngW2bl.js → src-f5a3W9Mj.js} +98 -91
- package/dist/{src-BLngW2bl.js.map → src-f5a3W9Mj.js.map} +1 -1
- package/dist/steps.cjs +10 -10
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +10 -9
- package/dist/steps.js.map +1 -1
- package/dist/{store-DYqDLAvT.js.map → store-Bmj6rvZY.js.map} +1 -1
- package/dist/{store-CorvD3bT.cjs.map → store-CO4nJyGj.cjs.map} +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/surface-CDufon40.cjs +7 -0
- package/dist/{surface-BjKZoJxK.cjs.map → surface-CDufon40.cjs.map} +1 -1
- package/dist/surface-CkEYJCae.js +22 -0
- package/dist/{surface-pK8hME5c.js.map → surface-CkEYJCae.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-C5sDI1-_.cjs → surface.mixin-CSKqQH-0.cjs} +2 -2
- package/dist/{surface.mixin-C5sDI1-_.cjs.map → surface.mixin-CSKqQH-0.cjs.map} +1 -1
- package/dist/{surface.mixin-CBNRpJum.js → surface.mixin-DqMwoddO.js} +1 -1
- package/dist/{surface.mixin-CBNRpJum.js.map → surface.mixin-DqMwoddO.js.map} +1 -1
- package/dist/switch.cjs +69 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +132 -0
- package/dist/switch.js.map +1 -0
- package/dist/{table-CiqgZzSd.cjs → table-DWc1mkpj.cjs} +3 -3
- package/dist/{table-CiqgZzSd.cjs.map → table-DWc1mkpj.cjs.map} +1 -1
- package/dist/{table-BXIHX9h4.js → table-P6VGG7NK.js} +4 -4
- package/dist/{table-BXIHX9h4.js.map → table-P6VGG7NK.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-nbV5eblZ.js → tabs-CjGjGrqY.js} +13 -12
- package/dist/{tabs-nbV5eblZ.js.map → tabs-CjGjGrqY.js.map} +1 -1
- package/dist/{tabs-CKa-W4qA.cjs → tabs-DGJEKuhC.cjs} +4 -4
- package/dist/{tabs-CKa-W4qA.cjs.map → tabs-DGJEKuhC.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-BF1Huas7.cjs → tailwind.mixin-Cpa-VnnX.cjs} +2 -2
- package/dist/tailwind.mixin-Cpa-VnnX.cjs.map +1 -0
- package/dist/{tailwind.mixin-BCJOOX1_.js → tailwind.mixin-DufHBjmb.js} +57 -63
- package/dist/tailwind.mixin-DufHBjmb.js.map +1 -0
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-D7q8exMg.js → textarea-DZT_Ofp5.js} +42 -28
- package/dist/textarea-DZT_Ofp5.js.map +1 -0
- package/dist/textarea-jmTOXrzl.cjs +39 -0
- package/dist/textarea-jmTOXrzl.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/theme-CCKqaksQ.cjs +181 -0
- package/dist/{theme-Da4SPq9X.cjs.map → theme-CCKqaksQ.cjs.map} +1 -1
- package/dist/{theme-_VPV6Bxh.js → theme-CEc32pAv.js} +13 -12
- package/dist/{theme-_VPV6Bxh.js.map → theme-CEc32pAv.js.map} +1 -1
- package/dist/theme-button-BsJcv-Zv.cjs +8 -0
- package/dist/{theme-button-Ci8VQ7KW.cjs.map → theme-button-BsJcv-Zv.cjs.map} +1 -1
- package/dist/{theme-button--sX8A-m1.js → theme-button-dOiAvdKU.js} +4 -3
- package/dist/{theme-button--sX8A-m1.js.map → theme-button-dOiAvdKU.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.events-Cv7N4Toe.js.map → theme.events-Bw3mYjUA.js.map} +1 -1
- package/dist/{theme.events-DM4H5F2d.cjs.map → theme.events-EznKK2Y0.cjs.map} +1 -1
- package/dist/{theme.interface-Da23QAYb.cjs.map → theme.interface-CM26m9te.cjs.map} +1 -1
- package/dist/{theme.interface-CXloMUCw.js.map → theme.interface-FAUIgbIq.js.map} +1 -1
- package/dist/theme.js +5 -5
- package/dist/{theme.service-C_tjlqgy.cjs → theme.service-ETiKUwVy.cjs} +1 -1
- package/dist/{theme.service-C_tjlqgy.cjs.map → theme.service-ETiKUwVy.cjs.map} +1 -1
- package/dist/{theme.service-D9lEas89.js → theme.service-_qP5WvB9.js} +2 -2
- package/dist/{theme.service-D9lEas89.js.map → theme.service-_qP5WvB9.js.map} +1 -1
- package/dist/tooltip.cjs +1 -6
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js +51 -135
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +14 -5
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +28 -6
- package/dist/tree.js.map +1 -1
- package/dist/tslib.es6-Bd-92OW3.cjs +1 -0
- package/dist/{tslib.es6-D7BIeDVB.cjs.map → tslib.es6-Bd-92OW3.cjs.map} +1 -1
- package/dist/tslib.es6-CI1onEZb.js +7 -0
- package/dist/{tslib.es6-ErZEp3OO.js.map → tslib.es6-CI1onEZb.js.map} +1 -1
- package/dist/typewriter-ByIL2Mh-.cjs +123 -0
- package/dist/{typewriter-B2TnHPjw.cjs.map → typewriter-ByIL2Mh-.cjs.map} +1 -1
- package/dist/{typewriter-BrZNa8T-.js → typewriter-vOQ3bDLb.js} +8 -7
- package/dist/{typewriter-BrZNa8T-.js.map → typewriter-vOQ3bDLb.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +4 -4
- package/dist/typography.cjs.map +1 -1
- package/dist/typography.js +10 -9
- package/dist/typography.js.map +1 -1
- package/dist/{utils-CoU7M2YS.js → utils-Cq0m3LYo.js} +3 -3
- package/dist/{utils-CoU7M2YS.js.map → utils-Cq0m3LYo.js.map} +1 -1
- package/dist/{utils-BcaKtQuA.cjs → utils-D2kE-6zc.cjs} +1 -1
- package/dist/{utils-BcaKtQuA.cjs.map → utils-D2kE-6zc.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +5 -5
- package/dist/visually-hidden.cjs +13 -0
- package/dist/visually-hidden.cjs.map +1 -0
- package/dist/visually-hidden.js +24 -0
- package/dist/visually-hidden.js.map +1 -0
- package/dist/{window-Uii13x_r.cjs → window-BS7ZQjgH.cjs} +2 -2
- package/dist/window-BS7ZQjgH.cjs.map +1 -0
- package/dist/{window-CM1ycigo.js → window-WnAihpsA.js} +7 -7
- package/dist/window-WnAihpsA.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/mixins/formField.mixin.ts +96 -69
- package/mixins/tailwind.css +11 -0
- package/package.json +17 -26
- package/skills/schmancy/INDEX.md +7 -6
- package/skills/schmancy/breadcrumb.md +53 -0
- package/skills/schmancy/kbd.md +40 -0
- package/skills/schmancy/skeleton.md +40 -0
- package/skills/schmancy/splash-screen.md +60 -0
- package/skills/schmancy/switch.md +58 -0
- package/skills/schmancy/tooltip.md +1 -1
- package/skills/schmancy/visually-hidden.md +41 -0
- package/src/audio/emotional-sounds.ts +2 -4
- package/src/autocomplete/autocomplete.ts +52 -2
- package/src/breadcrumb/breadcrumb.ts +109 -0
- package/src/breadcrumb/index.ts +1 -0
- package/src/button/button.ts +40 -0
- package/src/button/icon-button.ts +2 -1
- package/src/checkbox/checkbox.test.ts +113 -0
- package/src/checkbox/checkbox.ts +41 -1
- package/src/chips/filter-chip.ts +15 -0
- package/src/chips/input-chip.ts +7 -0
- package/src/date-range/date-range-helpers.ts +0 -71
- package/src/dialog/dialog-base.mixin.ts +11 -0
- package/src/dialog/dialog.component.ts +28 -8
- package/src/dropdown/dropdown-content.ts +3 -1
- package/src/form/form.test.ts +137 -0
- package/src/form/form.ts +142 -158
- package/src/form/index.ts +2 -2
- package/src/icons/icon.ts +1 -0
- package/src/index.ts +6 -0
- package/src/kbd/index.ts +1 -0
- package/src/kbd/kbd.ts +59 -0
- package/src/skeleton/index.ts +1 -0
- package/src/skeleton/skeleton.ts +78 -0
- package/src/splash-screen/index.ts +1 -0
- package/src/splash-screen/splash-screen.ts +154 -0
- package/src/switch/index.ts +1 -0
- package/src/switch/switch.test.ts +93 -0
- package/src/switch/switch.ts +180 -0
- package/src/test-utils/a11y.ts +35 -0
- package/src/textarea/textarea.ts +32 -2
- package/src/tooltip/index.ts +1 -2
- package/src/tree/tree.ts +27 -2
- package/src/visually-hidden/index.ts +1 -0
- package/src/visually-hidden/visually-hidden.ts +39 -0
- package/src/window/window-position.ts +1 -74
- package/types/mixins/formField.mixin.d.ts +15 -8
- package/types/src/audio/emotional-sounds.d.ts +0 -2
- package/types/src/autocomplete/autocomplete.d.ts +7 -0
- package/types/src/breadcrumb/breadcrumb.d.ts +38 -0
- package/types/src/breadcrumb/index.d.ts +1 -0
- package/types/src/button/button.d.ts +7 -0
- package/types/src/button/icon-button.d.ts +2 -1
- package/types/src/checkbox/checkbox.d.ts +6 -0
- package/types/src/checkbox/checkbox.test.d.ts +1 -0
- package/types/src/chips/filter-chip.d.ts +3 -0
- package/types/src/chips/input-chip.d.ts +1 -0
- package/types/src/date-range/date-range-helpers.d.ts +0 -12
- package/types/src/dialog/dialog.component.d.ts +6 -0
- package/types/src/dropdown/dropdown-content.d.ts +3 -1
- package/types/src/form/form-v2.d.ts +12 -63
- package/types/src/form/form.d.ts +58 -40
- package/types/src/form/form.test.d.ts +4 -0
- package/types/src/form/index.d.ts +1 -1
- package/types/src/icons/icon.d.ts +1 -0
- package/types/src/index.d.ts +6 -0
- package/types/src/kbd/index.d.ts +1 -0
- package/types/src/kbd/kbd.d.ts +25 -0
- package/types/src/skeleton/index.d.ts +1 -0
- package/types/src/skeleton/skeleton.d.ts +27 -0
- package/types/src/splash-screen/index.d.ts +1 -0
- package/types/src/splash-screen/splash-screen.d.ts +60 -0
- package/types/src/switch/index.d.ts +1 -0
- package/types/src/switch/switch.d.ts +54 -0
- package/types/src/switch/switch.test.d.ts +1 -0
- package/types/src/test-utils/a11y.d.ts +11 -0
- package/types/src/textarea/textarea.d.ts +5 -1
- package/types/src/tooltip/index.d.ts +0 -1
- package/types/src/tree/tree.d.ts +5 -0
- package/types/src/visually-hidden/index.d.ts +1 -0
- package/types/src/visually-hidden/visually-hidden.d.ts +21 -0
- package/types/src/window/window-position.d.ts +1 -35
- package/dist/audio-DtYYgzYD.cjs.map +0 -1
- package/dist/audio-kz8UgPTO.js.map +0 -1
- package/dist/autocomplete-5rVhbieU.cjs +0 -111
- package/dist/autocomplete-5rVhbieU.cjs.map +0 -1
- package/dist/autocomplete-BllPQwr8.js.map +0 -1
- package/dist/chips-B19XS8Xc.cjs.map +0 -1
- package/dist/chips-B9oAEfE_.js.map +0 -1
- package/dist/components-CyD6a7gQ.cjs +0 -73
- package/dist/date-range-Sfyco9-n.js.map +0 -1
- package/dist/date-range-ZAaQB22I.cjs.map +0 -1
- package/dist/date-range-inline-m7nLjOMI.cjs +0 -43
- package/dist/delay-7boauN6N.cjs +0 -9
- package/dist/float-D5rNC82i.cjs +0 -1
- package/dist/form-BqN1AGFj.cjs +0 -1
- package/dist/form-BqN1AGFj.cjs.map +0 -1
- package/dist/form-CajC5HnO.js +0 -270
- package/dist/form-CajC5HnO.js.map +0 -1
- package/dist/icons-B57_93VV.cjs.map +0 -1
- package/dist/icons-BDqiGXrO.js.map +0 -1
- package/dist/input-chip-Dy-AiP55.cjs.map +0 -1
- package/dist/input-chip-QejNcRnS.js.map +0 -1
- package/dist/layout-DNYG3phx.cjs +0 -17
- package/dist/notification-CZFEhWxc.cjs +0 -23
- package/dist/radio-group-Cspwd-Vw.cjs +0 -40
- package/dist/src-BtQVyqMy.cjs +0 -269
- package/dist/surface-BjKZoJxK.cjs +0 -7
- package/dist/surface-pK8hME5c.js +0 -21
- package/dist/tailwind.mixin-BCJOOX1_.js.map +0 -1
- package/dist/tailwind.mixin-BF1Huas7.cjs.map +0 -1
- package/dist/textarea-Cp1ZE60O.cjs +0 -35
- package/dist/textarea-Cp1ZE60O.cjs.map +0 -1
- package/dist/textarea-D7q8exMg.js.map +0 -1
- package/dist/theme-Da4SPq9X.cjs +0 -181
- package/dist/theme-button-Ci8VQ7KW.cjs +0 -8
- package/dist/typewriter-B2TnHPjw.cjs +0 -123
- package/dist/window-CM1ycigo.js.map +0 -1
- package/dist/window-Uii13x_r.cjs.map +0 -1
- package/src/form/form-v2.ts +0 -268
- package/src/layout/v2/grid.ts +0 -93
- package/src/notification/outlet.ts +0 -16
- package/src/store/immer-integration.ts +0 -99
- package/src/tooltip/tooltip.ts +0 -216
- /package/dist/{animation-CO_Csq84.cjs → animation-Bcwh107v.cjs} +0 -0
- /package/dist/{animation-BK-8BwY8.js → animation-CXKSuUoE.js} +0 -0
- /package/dist/{tslib.es6-ErZEp3OO.js → decorate-D_utPUsC.js} +0 -0
- /package/dist/{tslib.es6-D7BIeDVB.cjs → decorate-F9CuyeHg.cjs} +0 -0
- /package/dist/{flow-CUj0fDT_.js → flow-CqgDEIqK.js} +0 -0
- /package/dist/{flow-Bbwn6dRN.cjs → flow-DSu4PLt1.cjs} +0 -0
- /package/dist/{hashContent-DaeGmY-p.cjs → hashContent-kKvXKFa9.cjs} +0 -0
- /package/dist/{hashContent-DYM21p6t.js → hashContent-nD2uWwi2.js} +0 -0
- /package/dist/{intersection-CZpaIHeT.cjs → intersection-D1v1UCVv.cjs} +0 -0
- /package/dist/{intersection-BPLpqYEd.js → intersection-LfEsy29T.js} +0 -0
- /package/dist/{overlay-stack-DQey9Qph.cjs → overlay-stack-CEYGD9T1.cjs} +0 -0
- /package/dist/{overlay-stack-DT1SdaGW.js → overlay-stack-Ca4EK2Mu.js} +0 -0
- /package/dist/{reduced-motion-D-L12p7G.js → reduced-motion-B83yZbcO.js} +0 -0
- /package/dist/{reduced-motion-Ds05GPyz.cjs → reduced-motion-DR32yKEO.cjs} +0 -0
- /package/dist/{rxjs-utils-BSjmI9-Q.js → rxjs-utils-Bldch1RO.js} +0 -0
- /package/dist/{rxjs-utils-DCsfzeap.cjs → rxjs-utils-hAgKC7vk.cjs} +0 -0
- /package/dist/{search-C4dFHYbX.js → search-BlGJ6uJv.js} +0 -0
- /package/dist/{search-Ds8tt7Et.cjs → search-C8eAOzBm.cjs} +0 -0
- /package/dist/{store-DYqDLAvT.js → store-Bmj6rvZY.js} +0 -0
- /package/dist/{store-CorvD3bT.cjs → store-CO4nJyGj.cjs} +0 -0
- /package/dist/{theme.events-Cv7N4Toe.js → theme.events-Bw3mYjUA.js} +0 -0
- /package/dist/{theme.events-DM4H5F2d.cjs → theme.events-EznKK2Y0.cjs} +0 -0
- /package/dist/{theme.interface-Da23QAYb.cjs → theme.interface-CM26m9te.cjs} +0 -0
- /package/dist/{theme.interface-CXloMUCw.js → theme.interface-FAUIgbIq.js} +0 -0
package/src/button/button.ts
CHANGED
|
@@ -19,6 +19,7 @@ export type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warni
|
|
|
19
19
|
* @slot - The default slot.
|
|
20
20
|
* @slot prefix - The prefix slot.
|
|
21
21
|
* @slot suffix - The suffix slot.
|
|
22
|
+
* @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).
|
|
22
23
|
*/
|
|
23
24
|
@customElement('schmancy-button')
|
|
24
25
|
export class SchmancyButton extends $LitElement(
|
|
@@ -57,6 +58,45 @@ export class SchmancyButton extends $LitElement(
|
|
|
57
58
|
delegatesFocus: true,
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
static formAssociated = true
|
|
62
|
+
private internals: ElementInternals | undefined
|
|
63
|
+
|
|
64
|
+
constructor() {
|
|
65
|
+
super()
|
|
66
|
+
try {
|
|
67
|
+
this.internals = this.attachInternals()
|
|
68
|
+
} catch {
|
|
69
|
+
this.internals = undefined
|
|
70
|
+
}
|
|
71
|
+
// Translate clicks into native form semantics so the button works
|
|
72
|
+
// inside any <form>, not just inside <schmancy-form>.
|
|
73
|
+
this.addEventListener('click', (e: MouseEvent) => {
|
|
74
|
+
if (this.disabled) {
|
|
75
|
+
e.preventDefault()
|
|
76
|
+
e.stopImmediatePropagation()
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
const form = this.internals?.form
|
|
80
|
+
if (!form) return
|
|
81
|
+
if (this.type === 'submit') {
|
|
82
|
+
e.preventDefault()
|
|
83
|
+
form.requestSubmit()
|
|
84
|
+
} else if (this.type === 'reset') {
|
|
85
|
+
e.preventDefault()
|
|
86
|
+
form.reset()
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Associated form, when placed inside a <form>. */
|
|
92
|
+
get form(): HTMLFormElement | null {
|
|
93
|
+
return this.internals?.form ?? null
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
formDisabledCallback(disabled: boolean): void {
|
|
97
|
+
this.disabled = disabled
|
|
98
|
+
}
|
|
99
|
+
|
|
60
100
|
@query('[part="base"]', true)
|
|
61
101
|
private nativeElement!: HTMLElement
|
|
62
102
|
|
|
@@ -9,7 +9,8 @@ import { ButtonVariant } from './button'
|
|
|
9
9
|
/**
|
|
10
10
|
* An icon button component.
|
|
11
11
|
* @element schmancy-icon-button
|
|
12
|
-
* @slot - The default slot.
|
|
12
|
+
* @slot - The default slot (usually an icon or glyph).
|
|
13
|
+
* @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).
|
|
13
14
|
*/
|
|
14
15
|
@customElement('schmancy-icon-button')
|
|
15
16
|
export class SchmnacyIconButton extends $LitElement(css`
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
2
|
+
import { expectNoA11yViolations } from '../test-utils/a11y'
|
|
3
|
+
import './checkbox'
|
|
4
|
+
|
|
5
|
+
describe('schmancy-checkbox', () => {
|
|
6
|
+
let host: HTMLDivElement
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
host = document.createElement('div')
|
|
10
|
+
document.body.appendChild(host)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
host.remove()
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const nextUpdate = () => new Promise(r => requestAnimationFrame(() => r(null)))
|
|
18
|
+
|
|
19
|
+
it('is defined on the element registry', () => {
|
|
20
|
+
expect(customElements.get('schmancy-checkbox')).toBeDefined()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('has no axe-core a11y violations in default state', async () => {
|
|
24
|
+
host.innerHTML = `<schmancy-checkbox label="Accept terms"></schmancy-checkbox>`
|
|
25
|
+
await nextUpdate()
|
|
26
|
+
await nextUpdate()
|
|
27
|
+
await expectNoA11yViolations(host)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
it('has no axe-core a11y violations when required + invalid', async () => {
|
|
31
|
+
host.innerHTML = `
|
|
32
|
+
<form>
|
|
33
|
+
<schmancy-checkbox name="agree" label="I agree" required></schmancy-checkbox>
|
|
34
|
+
</form>
|
|
35
|
+
`
|
|
36
|
+
await nextUpdate()
|
|
37
|
+
await nextUpdate()
|
|
38
|
+
await expectNoA11yViolations(host)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('is form-associated and exposes an ElementInternals form', async () => {
|
|
42
|
+
host.innerHTML = `
|
|
43
|
+
<form id="f">
|
|
44
|
+
<schmancy-checkbox name="agree" required></schmancy-checkbox>
|
|
45
|
+
</form>
|
|
46
|
+
`
|
|
47
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
48
|
+
const cb = host.querySelector('schmancy-checkbox') as HTMLElement & { value: boolean; form: HTMLFormElement | null }
|
|
49
|
+
await nextUpdate()
|
|
50
|
+
expect(cb.form).toBe(form)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('contributes its value to FormData when checked', async () => {
|
|
54
|
+
host.innerHTML = `
|
|
55
|
+
<form id="f">
|
|
56
|
+
<schmancy-checkbox name="agree"></schmancy-checkbox>
|
|
57
|
+
</form>
|
|
58
|
+
`
|
|
59
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
60
|
+
const cb = host.querySelector('schmancy-checkbox') as HTMLElement & { value: boolean }
|
|
61
|
+
cb.value = true
|
|
62
|
+
await nextUpdate()
|
|
63
|
+
await nextUpdate()
|
|
64
|
+
const fd = new FormData(form)
|
|
65
|
+
expect(fd.get('agree')).toBe('on')
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('omits its value when unchecked', async () => {
|
|
69
|
+
host.innerHTML = `
|
|
70
|
+
<form id="f">
|
|
71
|
+
<schmancy-checkbox name="agree"></schmancy-checkbox>
|
|
72
|
+
</form>
|
|
73
|
+
`
|
|
74
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
75
|
+
await nextUpdate()
|
|
76
|
+
const fd = new FormData(form)
|
|
77
|
+
expect(fd.get('agree')).toBeNull()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('broadcasts :state(checked) when value is true', async () => {
|
|
81
|
+
host.innerHTML = `<schmancy-checkbox></schmancy-checkbox>`
|
|
82
|
+
const cb = host.querySelector('schmancy-checkbox') as HTMLElement & { value: boolean }
|
|
83
|
+
cb.value = true
|
|
84
|
+
await nextUpdate()
|
|
85
|
+
await nextUpdate()
|
|
86
|
+
expect(cb.matches(':state(checked)')).toBe(true)
|
|
87
|
+
cb.value = false
|
|
88
|
+
await nextUpdate()
|
|
89
|
+
await nextUpdate()
|
|
90
|
+
expect(cb.matches(':state(checked)')).toBe(false)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it('fails constraint validation when required and unchecked', async () => {
|
|
94
|
+
host.innerHTML = `
|
|
95
|
+
<form id="f">
|
|
96
|
+
<schmancy-checkbox name="agree" required></schmancy-checkbox>
|
|
97
|
+
</form>
|
|
98
|
+
`
|
|
99
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
100
|
+
const cb = host.querySelector('schmancy-checkbox') as HTMLElement & {
|
|
101
|
+
value: boolean
|
|
102
|
+
checkValidity(): boolean
|
|
103
|
+
}
|
|
104
|
+
await nextUpdate()
|
|
105
|
+
expect(cb.checkValidity()).toBe(false)
|
|
106
|
+
expect(form.checkValidity()).toBe(false)
|
|
107
|
+
cb.value = true
|
|
108
|
+
await nextUpdate()
|
|
109
|
+
await nextUpdate()
|
|
110
|
+
expect(cb.checkValidity()).toBe(true)
|
|
111
|
+
expect(form.checkValidity()).toBe(true)
|
|
112
|
+
})
|
|
113
|
+
})
|
package/src/checkbox/checkbox.ts
CHANGED
|
@@ -21,8 +21,17 @@ class SchmancyCheckboxElement extends TailwindElement() {
|
|
|
21
21
|
delegatesFocus: true,
|
|
22
22
|
}
|
|
23
23
|
static formAssociated = true
|
|
24
|
-
// private internals
|
|
25
24
|
internals: ElementInternals | undefined
|
|
25
|
+
|
|
26
|
+
constructor() {
|
|
27
|
+
super()
|
|
28
|
+
try {
|
|
29
|
+
this.internals = this.attachInternals()
|
|
30
|
+
} catch {
|
|
31
|
+
// attachInternals can throw if the element does not support form association
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
26
35
|
get form() {
|
|
27
36
|
return this.internals?.form
|
|
28
37
|
}
|
|
@@ -76,6 +85,37 @@ class SchmancyCheckboxElement extends TailwindElement() {
|
|
|
76
85
|
|
|
77
86
|
connectedCallback() {
|
|
78
87
|
super.connectedCallback()
|
|
88
|
+
this._syncFormValue()
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
updated(changed: Map<string, unknown>) {
|
|
92
|
+
super.updated?.(changed)
|
|
93
|
+
if (changed.has('value') || changed.has('name')) this._syncFormValue()
|
|
94
|
+
if (changed.has('required') || changed.has('value')) this._syncValidity()
|
|
95
|
+
if (changed.has('value')) {
|
|
96
|
+
if (this.value) this.internals?.states.add('checked')
|
|
97
|
+
else this.internals?.states.delete('checked')
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private _syncFormValue() {
|
|
102
|
+
this.internals?.setFormValue(this.value ? (this.getAttribute('true-value') ?? 'on') : null)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private _syncValidity() {
|
|
106
|
+
if (this.required && !this.value) {
|
|
107
|
+
this.internals?.setValidity({ valueMissing: true }, 'Please check this box if you want to proceed.')
|
|
108
|
+
} else {
|
|
109
|
+
this.internals?.setValidity({})
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
public checkValidity(): boolean {
|
|
114
|
+
return this.internals?.checkValidity() ?? true
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
public reportValidity(): boolean {
|
|
118
|
+
return this.internals?.reportValidity() ?? true
|
|
79
119
|
}
|
|
80
120
|
|
|
81
121
|
/**
|
package/src/chips/filter-chip.ts
CHANGED
|
@@ -113,6 +113,21 @@ export class SchmancyFilterChip extends TailwindElement(css`
|
|
|
113
113
|
super.connectedCallback()
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
protected updated(changed: Map<string, unknown>) {
|
|
117
|
+
super.updated?.(changed)
|
|
118
|
+
if (changed.has('value') || changed.has('selected')) {
|
|
119
|
+
this.internals?.setFormValue(this._selected ? (this.value || 'on') : null)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
formResetCallback(): void {
|
|
124
|
+
this._selected = this.hasAttribute('selected')
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
formDisabledCallback(disabled: boolean): void {
|
|
128
|
+
this.disabled = disabled
|
|
129
|
+
}
|
|
130
|
+
|
|
116
131
|
private handleClick = () => {
|
|
117
132
|
if (this.disabled) return
|
|
118
133
|
|
package/src/chips/input-chip.ts
CHANGED
|
@@ -172,6 +172,13 @@ export class SchmancyInputChip extends TailwindElement(css`
|
|
|
172
172
|
return this.internals?.form
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
+
protected updated(changed: Map<string, unknown>) {
|
|
176
|
+
super.updated?.(changed)
|
|
177
|
+
if (changed.has('value')) {
|
|
178
|
+
this.internals?.setFormValue(this.value || null)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
175
182
|
connectedCallback() {
|
|
176
183
|
super.connectedCallback()
|
|
177
184
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import dayjs from 'dayjs'
|
|
2
|
-
import { PresetUnit } from './date-range-presets'
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Format a date range into a human-readable string
|
|
@@ -63,73 +62,3 @@ export function detectDateRangeType(fromDate: dayjs.Dayjs, toDate: dayjs.Dayjs):
|
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
|
|
66
|
-
/**
|
|
67
|
-
* Calculate the appropriate shift unit and amount for a date range
|
|
68
|
-
*/
|
|
69
|
-
export function calculateShiftParams(
|
|
70
|
-
fromDate: dayjs.Dayjs,
|
|
71
|
-
toDate: dayjs.Dayjs,
|
|
72
|
-
activePresetStep?: PresetUnit
|
|
73
|
-
): { unit: PresetUnit; amount: number } {
|
|
74
|
-
if (activePresetStep) {
|
|
75
|
-
return { unit: activePresetStep, amount: 1 }
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const rangeDurationInDays = toDate.diff(fromDate, 'day')
|
|
79
|
-
|
|
80
|
-
// For very long ranges, use years
|
|
81
|
-
if (rangeDurationInDays >= 360) {
|
|
82
|
-
return { unit: 'year', amount: Math.round(rangeDurationInDays / 365) }
|
|
83
|
-
}
|
|
84
|
-
// For long ranges, use quarters
|
|
85
|
-
else if (rangeDurationInDays >= 90) {
|
|
86
|
-
return { unit: 'quarter', amount: Math.round(rangeDurationInDays / 90) }
|
|
87
|
-
}
|
|
88
|
-
// For medium-long ranges, use months
|
|
89
|
-
else if (rangeDurationInDays >= 30) {
|
|
90
|
-
return { unit: 'month', amount: Math.round(rangeDurationInDays / 30) }
|
|
91
|
-
}
|
|
92
|
-
// For medium ranges, use weeks
|
|
93
|
-
else if (rangeDurationInDays >= 7) {
|
|
94
|
-
return { unit: 'week', amount: Math.round(rangeDurationInDays / 7) }
|
|
95
|
-
}
|
|
96
|
-
// For shorter ranges, use days
|
|
97
|
-
else {
|
|
98
|
-
return { unit: 'day', amount: rangeDurationInDays + 1 }
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Helper method to safely add/subtract quarter values
|
|
104
|
-
*/
|
|
105
|
-
export function adjustQuarter(date: dayjs.Dayjs, amount: number, direction: 1 | -1): dayjs.Dayjs {
|
|
106
|
-
// Get current quarter (1-4)
|
|
107
|
-
const currentQuarter = date.quarter()
|
|
108
|
-
|
|
109
|
-
// Calculate new quarter
|
|
110
|
-
let newQuarter = currentQuarter + direction * amount
|
|
111
|
-
let yearAdjustment = 0
|
|
112
|
-
|
|
113
|
-
// Handle year boundaries
|
|
114
|
-
while (newQuarter > 4) {
|
|
115
|
-
newQuarter -= 4
|
|
116
|
-
yearAdjustment += 1
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
while (newQuarter < 1) {
|
|
120
|
-
newQuarter += 4
|
|
121
|
-
yearAdjustment -= 1
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Adjust year if needed
|
|
125
|
-
const adjustedDate = date.add(yearAdjustment, 'year')
|
|
126
|
-
|
|
127
|
-
// Set to the start of the new quarter
|
|
128
|
-
const newDate = adjustedDate.month((newQuarter - 1) * 3)
|
|
129
|
-
|
|
130
|
-
// Maintain the same day of month if possible
|
|
131
|
-
const daysInMonth = newDate.daysInMonth()
|
|
132
|
-
const targetDay = Math.min(date.date(), daysInMonth)
|
|
133
|
-
|
|
134
|
-
return newDate.date(targetDay)
|
|
135
|
-
}
|
|
@@ -77,6 +77,15 @@ export const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(super
|
|
|
77
77
|
// Animation guard
|
|
78
78
|
private animating = false
|
|
79
79
|
|
|
80
|
+
/** ElementInternals — used for broadcasting `:state(open)` to consumers. */
|
|
81
|
+
protected dialogInternals: ElementInternals | undefined = (() => {
|
|
82
|
+
try {
|
|
83
|
+
return this.attachInternals()
|
|
84
|
+
} catch {
|
|
85
|
+
return undefined
|
|
86
|
+
}
|
|
87
|
+
})()
|
|
88
|
+
|
|
80
89
|
/**
|
|
81
90
|
* Check if the dialog is currently animating
|
|
82
91
|
*/
|
|
@@ -285,6 +294,7 @@ export const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(super
|
|
|
285
294
|
await this.updateComplete
|
|
286
295
|
|
|
287
296
|
this.setAttribute('active', '')
|
|
297
|
+
this.dialogInternals?.states.add('open')
|
|
288
298
|
await this.updateComplete
|
|
289
299
|
|
|
290
300
|
// Save focus and set siblings to inert for focus trap
|
|
@@ -443,6 +453,7 @@ export const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(super
|
|
|
443
453
|
this.animating = false
|
|
444
454
|
|
|
445
455
|
this.removeAttribute('active')
|
|
456
|
+
this.dialogInternals?.states.delete('open')
|
|
446
457
|
|
|
447
458
|
// Restore inert siblings
|
|
448
459
|
for (const el of this.inertSiblings) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $LitElement } from '@mixins/index'
|
|
2
|
-
import { css, html } from 'lit'
|
|
2
|
+
import { css, html, nothing } from 'lit'
|
|
3
3
|
import { customElement, property, queryAssignedElements } from 'lit/decorators.js'
|
|
4
4
|
import { cursorGlow } from '../directives/cursor-glow'
|
|
5
5
|
import { createRef, ref, type Ref } from 'lit/directives/ref.js'
|
|
@@ -126,6 +126,13 @@ export class SchmancyDialog extends DialogBase(
|
|
|
126
126
|
*/
|
|
127
127
|
private _dragHandleRef: Ref<HTMLElement> = createRef()
|
|
128
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Stable per-instance id used for ARIA labelledby/describedby wiring
|
|
131
|
+
*/
|
|
132
|
+
private readonly _a11yId = `schmancy-dialog-${Math.random().toString(36).slice(2, 10)}`
|
|
133
|
+
private get _titleId() { return `${this._a11yId}-title` }
|
|
134
|
+
private get _descId() { return `${this._a11yId}-desc` }
|
|
135
|
+
|
|
129
136
|
/**
|
|
130
137
|
* Return the dialog element for positioning/size measurement.
|
|
131
138
|
* In content mode, returns the first slotted child (the actual component).
|
|
@@ -268,10 +275,23 @@ export class SchmancyDialog extends DialogBase(
|
|
|
268
275
|
|
|
269
276
|
// Confirm mode: with title/buttons
|
|
270
277
|
if (this.isConfirmMode) {
|
|
278
|
+
const hasTitle = !!this.title?.trim()
|
|
279
|
+
const hasSubtitle = !!this.subtitle?.trim()
|
|
280
|
+
const hasMessage = !!this.message?.trim()
|
|
281
|
+
const describedBy = [hasSubtitle && this._descId + '-sub', hasMessage && this._descId + '-msg']
|
|
282
|
+
.filter(Boolean)
|
|
283
|
+
.join(' ') || ''
|
|
271
284
|
return html`
|
|
272
285
|
<div ${ref(this._backdropRef)} class="fixed inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 backdrop-brightness-105" @click=${this.handleClose}></div>
|
|
273
286
|
|
|
274
|
-
<div
|
|
287
|
+
<div
|
|
288
|
+
${ref(this._confirmDialogRef)}
|
|
289
|
+
class=${this.classMap(dialogClasses)}
|
|
290
|
+
role="alertdialog"
|
|
291
|
+
aria-modal="true"
|
|
292
|
+
aria-labelledby=${hasTitle ? this._titleId : nothing}
|
|
293
|
+
aria-describedby=${describedBy || nothing}
|
|
294
|
+
>
|
|
275
295
|
<schmancy-surface
|
|
276
296
|
${cursorGlow({ radius: 250, intensity: 0.1 })}
|
|
277
297
|
rounded=${this.isMobile ? 'top' : 'all'}
|
|
@@ -283,13 +303,13 @@ export class SchmancyDialog extends DialogBase(
|
|
|
283
303
|
<schmancy-scroll direction="vertical" hide class="p-4 pt-2">
|
|
284
304
|
<schmancy-form @submit=${this.handleConfirm}>
|
|
285
305
|
${when(
|
|
286
|
-
|
|
306
|
+
hasTitle,
|
|
287
307
|
() => html`
|
|
288
|
-
<schmancy-typography type="title" token="md" class="mb-1">${this.title}</schmancy-typography>
|
|
308
|
+
<schmancy-typography id=${this._titleId} type="title" token="md" class="mb-1">${this.title}</schmancy-typography>
|
|
289
309
|
${when(
|
|
290
|
-
|
|
310
|
+
hasSubtitle,
|
|
291
311
|
() => html`
|
|
292
|
-
<schmancy-typography type="subtitle" token="xs" class="mb-2">
|
|
312
|
+
<schmancy-typography id="${this._descId}-sub" type="subtitle" token="xs" class="mb-2">
|
|
293
313
|
${this.subtitle}
|
|
294
314
|
</schmancy-typography>
|
|
295
315
|
`,
|
|
@@ -299,8 +319,8 @@ export class SchmancyDialog extends DialogBase(
|
|
|
299
319
|
${hasCustomContent
|
|
300
320
|
? html`<div class="mb-4"><slot name="content"></slot></div>`
|
|
301
321
|
: when(
|
|
302
|
-
|
|
303
|
-
() => html`<schmancy-typography type="body" class="mb-4">${this.message}</schmancy-typography>`,
|
|
322
|
+
hasMessage,
|
|
323
|
+
() => html`<schmancy-typography id="${this._descId}-msg" type="body" class="mb-4">${this.message}</schmancy-typography>`,
|
|
304
324
|
)}
|
|
305
325
|
<div class=${buttonContainerClasses}>
|
|
306
326
|
<schmancy-button
|
|
@@ -6,7 +6,9 @@ import { customElement, property } from 'lit/decorators.js'
|
|
|
6
6
|
* Content container for the schmancy-dropdown component.
|
|
7
7
|
*
|
|
8
8
|
* @element schmancy-dropdown-content
|
|
9
|
-
* @slot - Default slot for dropdown content
|
|
9
|
+
* @slot - Default slot for dropdown content.
|
|
10
|
+
* @csspart content - The inner wrapper element; style to override panel
|
|
11
|
+
* backgrounds, shadows, padding, or borders without shadow-root piercing.
|
|
10
12
|
*/
|
|
11
13
|
@customElement('schmancy-dropdown-content')
|
|
12
14
|
export class SchmancyDropdownContent extends TailwindElement(css`
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
2
|
+
import './form'
|
|
3
|
+
import '../input/input'
|
|
4
|
+
import '../button/button'
|
|
5
|
+
import '../checkbox/checkbox'
|
|
6
|
+
|
|
7
|
+
describe('schmancy-form', () => {
|
|
8
|
+
let host: HTMLDivElement
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
host = document.createElement('div')
|
|
12
|
+
document.body.appendChild(host)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
host.remove()
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
const nextUpdate = () => new Promise(r => requestAnimationFrame(() => r(null)))
|
|
20
|
+
|
|
21
|
+
it('wraps children in a real light-DOM <form>', async () => {
|
|
22
|
+
host.innerHTML = `
|
|
23
|
+
<schmancy-form>
|
|
24
|
+
<schmancy-checkbox name="agree"></schmancy-checkbox>
|
|
25
|
+
</schmancy-form>
|
|
26
|
+
`
|
|
27
|
+
const sf = host.querySelector('schmancy-form') as HTMLElement & { form: HTMLFormElement | null }
|
|
28
|
+
await nextUpdate()
|
|
29
|
+
expect(sf.form).toBeInstanceOf(HTMLFormElement)
|
|
30
|
+
expect(sf.querySelector(':scope > form')).toBe(sf.form)
|
|
31
|
+
expect(sf.form!.querySelector('schmancy-checkbox')).toBeTruthy()
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('emits submit with FormData on native submission', async () => {
|
|
35
|
+
host.innerHTML = `
|
|
36
|
+
<schmancy-form>
|
|
37
|
+
<schmancy-checkbox name="agree"></schmancy-checkbox>
|
|
38
|
+
<button id="go" type="submit">Go</button>
|
|
39
|
+
</schmancy-form>
|
|
40
|
+
`
|
|
41
|
+
const sf = host.querySelector('schmancy-form') as HTMLElement
|
|
42
|
+
const cb = host.querySelector('schmancy-checkbox') as HTMLElement & { value: boolean }
|
|
43
|
+
cb.value = true
|
|
44
|
+
await nextUpdate()
|
|
45
|
+
await nextUpdate()
|
|
46
|
+
|
|
47
|
+
const submits: FormData[] = []
|
|
48
|
+
sf.addEventListener('submit', (e: Event) => {
|
|
49
|
+
submits.push((e as CustomEvent).detail as FormData)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const btn = host.querySelector('#go') as HTMLButtonElement
|
|
53
|
+
btn.click()
|
|
54
|
+
|
|
55
|
+
expect(submits).toHaveLength(1)
|
|
56
|
+
expect(submits[0].get('agree')).toBe('on')
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('blocks submit when a required field is empty', async () => {
|
|
60
|
+
host.innerHTML = `
|
|
61
|
+
<schmancy-form>
|
|
62
|
+
<schmancy-checkbox name="agree" required></schmancy-checkbox>
|
|
63
|
+
<button id="go" type="submit">Go</button>
|
|
64
|
+
</schmancy-form>
|
|
65
|
+
`
|
|
66
|
+
const sf = host.querySelector('schmancy-form') as HTMLElement
|
|
67
|
+
await nextUpdate()
|
|
68
|
+
await nextUpdate()
|
|
69
|
+
|
|
70
|
+
let submitCount = 0
|
|
71
|
+
sf.addEventListener('submit', () => submitCount++)
|
|
72
|
+
|
|
73
|
+
const btn = host.querySelector('#go') as HTMLButtonElement
|
|
74
|
+
btn.click()
|
|
75
|
+
|
|
76
|
+
expect(submitCount).toBe(0)
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('respects novalidate attribute', async () => {
|
|
80
|
+
host.innerHTML = `
|
|
81
|
+
<schmancy-form novalidate>
|
|
82
|
+
<schmancy-checkbox name="agree" required></schmancy-checkbox>
|
|
83
|
+
<button id="go" type="submit">Go</button>
|
|
84
|
+
</schmancy-form>
|
|
85
|
+
`
|
|
86
|
+
const sf = host.querySelector('schmancy-form') as HTMLElement
|
|
87
|
+
await nextUpdate()
|
|
88
|
+
await nextUpdate()
|
|
89
|
+
|
|
90
|
+
let submitCount = 0
|
|
91
|
+
sf.addEventListener('submit', () => submitCount++)
|
|
92
|
+
|
|
93
|
+
const btn = host.querySelector('#go') as HTMLButtonElement
|
|
94
|
+
btn.click()
|
|
95
|
+
|
|
96
|
+
expect(submitCount).toBe(1)
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
it('schmancy-button type=submit triggers form submission', async () => {
|
|
100
|
+
host.innerHTML = `
|
|
101
|
+
<schmancy-form>
|
|
102
|
+
<schmancy-input name="email" value="x@y.z" required></schmancy-input>
|
|
103
|
+
<schmancy-button id="sbtn" type="submit">Save</schmancy-button>
|
|
104
|
+
</schmancy-form>
|
|
105
|
+
`
|
|
106
|
+
const sf = host.querySelector('schmancy-form') as HTMLElement
|
|
107
|
+
const btn = host.querySelector('#sbtn') as HTMLElement
|
|
108
|
+
await nextUpdate()
|
|
109
|
+
await nextUpdate()
|
|
110
|
+
|
|
111
|
+
let submitted = false
|
|
112
|
+
sf.addEventListener('submit', () => (submitted = true))
|
|
113
|
+
|
|
114
|
+
btn.click()
|
|
115
|
+
await nextUpdate()
|
|
116
|
+
|
|
117
|
+
expect(submitted).toBe(true)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
it('dispatches a single submit event (no double-fire from native + custom)', async () => {
|
|
121
|
+
host.innerHTML = `
|
|
122
|
+
<schmancy-form>
|
|
123
|
+
<button id="go" type="submit">Go</button>
|
|
124
|
+
</schmancy-form>
|
|
125
|
+
`
|
|
126
|
+
const sf = host.querySelector('schmancy-form') as HTMLElement
|
|
127
|
+
await nextUpdate()
|
|
128
|
+
|
|
129
|
+
let count = 0
|
|
130
|
+
sf.addEventListener('submit', () => count++)
|
|
131
|
+
|
|
132
|
+
const btn = host.querySelector('#go') as HTMLButtonElement
|
|
133
|
+
btn.click()
|
|
134
|
+
|
|
135
|
+
expect(count).toBe(1)
|
|
136
|
+
})
|
|
137
|
+
})
|