@mhmo91/schmancy 0.9.5 → 0.9.7
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/package.json +22 -28
- 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/mixins/baseElement.ts +0 -190
- package/mixins/constructor.ts +0 -3
- package/mixins/discovery.service.ts +0 -221
- package/mixins/formField.mixin.ts +0 -228
- package/mixins/index.ts +0 -7
- package/mixins/litElement.mixin.ts +0 -15
- package/mixins/scss.d.ts +0 -21
- package/mixins/surface.mixin.ts +0 -93
- package/mixins/tailwind.css +0 -549
- package/mixins/tailwind.mixin.ts +0 -30
- 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
|
@@ -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
|
+
})
|
package/src/form/form.ts
CHANGED
|
@@ -1,189 +1,146 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { html, LitElement } from 'lit'
|
|
3
|
-
import { customElement, property } from 'lit/decorators.js'
|
|
4
|
-
import { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'
|
|
5
|
-
|
|
6
|
-
export interface FormEventMap {
|
|
7
|
-
submit: CustomEvent<FormData>
|
|
8
|
-
reset: CustomEvent
|
|
9
|
-
}
|
|
1
|
+
import { customElement } from 'lit/decorators.js'
|
|
10
2
|
|
|
11
3
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
4
|
+
* A thin ergonomic wrapper around a native `<form>` element. Its children are
|
|
5
|
+
* reparented into a `<form>` element in light DOM on connection, so:
|
|
14
6
|
*
|
|
15
|
-
*
|
|
7
|
+
* - Form-associated custom elements (FACE) resolve their `internals.form`
|
|
8
|
+
* correctly via native DOM ancestry.
|
|
9
|
+
* - `new FormData(form)` collects values from every FACE + native control
|
|
10
|
+
* without any manual walking.
|
|
11
|
+
* - `form.reset()` triggers `formResetCallback()` on every FACE.
|
|
12
|
+
* - `form.reportValidity()` runs native validation UI.
|
|
13
|
+
* - `<button type="submit">` and `<schmancy-button type="submit">` both
|
|
14
|
+
* submit the form via the native submitter pipeline.
|
|
16
15
|
*
|
|
17
|
-
*
|
|
16
|
+
* This component exists only to translate the native `submit` / `reset`
|
|
17
|
+
* events into the Schmancy event shape (`detail: FormData`). All heavy
|
|
18
|
+
* lifting is the platform's.
|
|
18
19
|
*
|
|
19
|
-
* @
|
|
20
|
-
* @fires
|
|
20
|
+
* @element schmancy-form
|
|
21
|
+
* @fires submit - `CustomEvent<FormData>` emitted when the form is submitted.
|
|
22
|
+
* @fires reset - Emitted after the underlying form resets.
|
|
21
23
|
*/
|
|
22
24
|
@customElement('schmancy-form')
|
|
23
|
-
export default class SchmancyForm extends
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
export default class SchmancyForm extends HTMLElement {
|
|
26
|
+
public static readonly tagName: string = 'schmancy-form'
|
|
27
|
+
|
|
28
|
+
private _form: HTMLFormElement | null = null
|
|
29
|
+
private _wrapped = false
|
|
30
|
+
|
|
31
|
+
/** ElementInternals for `:state(invalid)` / `:state(submitting)` broadcasting. */
|
|
32
|
+
private readonly _internals: ElementInternals | undefined = (() => {
|
|
33
|
+
try { return this.attachInternals() } catch { return undefined }
|
|
34
|
+
})()
|
|
35
|
+
|
|
36
|
+
/** Skip built-in constraint validation on submit. Mirrors `<form novalidate>`. */
|
|
37
|
+
get novalidate(): boolean {
|
|
38
|
+
return this.hasAttribute('novalidate')
|
|
39
|
+
}
|
|
40
|
+
set novalidate(value: boolean) {
|
|
41
|
+
if (value) this.setAttribute('novalidate', '')
|
|
42
|
+
else this.removeAttribute('novalidate')
|
|
30
43
|
}
|
|
31
44
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
'textarea',
|
|
47
|
-
'schmancy-rating',
|
|
48
|
-
'schmancy-select',
|
|
49
|
-
'schmancy-combo',
|
|
50
|
-
'schmancy-date-time-input',
|
|
51
|
-
'schmancy-autocomplete',
|
|
52
|
-
'schmancy-checkbox',
|
|
53
|
-
'schmancy-select',
|
|
54
|
-
]
|
|
55
|
-
private _controlsThatSubmit = ['button', 'schmancy-input', 'schmancy-button', 'schmancy-icon-button']
|
|
56
|
-
|
|
57
|
-
/** Specifies if form data validation should be skipped on submit.
|
|
58
|
-
* @attr novalidate
|
|
59
|
-
* @type {boolean}
|
|
60
|
-
* @public
|
|
45
|
+
connectedCallback(): void {
|
|
46
|
+
this.ensureForm()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
disconnectedCallback(): void {
|
|
50
|
+
if (this._form) {
|
|
51
|
+
this._form.removeEventListener('submit', this._onSubmit)
|
|
52
|
+
this._form.removeEventListener('reset', this._onReset)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* On first connection, create the internal light-DOM `<form>` and move
|
|
58
|
+
* existing children into it. Re-entry is a no-op.
|
|
61
59
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
private ensureForm(): void {
|
|
61
|
+
if (this._wrapped) return
|
|
62
|
+
|
|
63
|
+
// Respect an explicit consumer-supplied wrapping <form>.
|
|
64
|
+
const existing = Array.from(this.children).find(c => c instanceof HTMLFormElement) as
|
|
65
|
+
| HTMLFormElement
|
|
66
|
+
| undefined
|
|
67
|
+
|
|
68
|
+
const form = existing ?? document.createElement('form')
|
|
69
|
+
form.noValidate = true
|
|
70
|
+
|
|
71
|
+
if (!existing) {
|
|
72
|
+
// Snapshot children because appending mutates `this.childNodes`.
|
|
73
|
+
const children = Array.from(this.childNodes)
|
|
74
|
+
for (const node of children) form.appendChild(node)
|
|
75
|
+
this.appendChild(form)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
form.addEventListener('submit', this._onSubmit)
|
|
79
|
+
form.addEventListener('reset', this._onReset)
|
|
80
|
+
|
|
81
|
+
this._form = form
|
|
82
|
+
this._wrapped = true
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
private _onSubmit = (e: SubmitEvent): void => {
|
|
86
|
+
// Prevent the default navigation AND stop the native submit from
|
|
87
|
+
// bubbling past this wrapper — otherwise consumers listening for
|
|
88
|
+
// `submit` on <schmancy-form> would see the native event plus our
|
|
89
|
+
// CustomEvent (two fires per submission).
|
|
90
|
+
e.preventDefault()
|
|
91
|
+
e.stopPropagation()
|
|
92
|
+
if (!this.novalidate && !this._form!.reportValidity()) {
|
|
93
|
+
this._internals?.states.add('invalid')
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
this._internals?.states.delete('invalid')
|
|
97
|
+
this._internals?.states.add('submitting')
|
|
98
|
+
try {
|
|
99
|
+
this.dispatchEvent(
|
|
100
|
+
new CustomEvent('submit', {
|
|
101
|
+
detail: new FormData(this._form!),
|
|
102
|
+
}),
|
|
103
|
+
)
|
|
104
|
+
} finally {
|
|
105
|
+
this._internals?.states.delete('submitting')
|
|
89
106
|
}
|
|
90
|
-
this.dispatchEvent(new CustomEvent('submit', { detail: formData }))
|
|
91
|
-
return true
|
|
92
107
|
}
|
|
93
108
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
formElements.forEach(element => {
|
|
98
|
-
const tagName = element.tagName.toLowerCase()
|
|
99
|
-
if (tagName === 'select') {
|
|
100
|
-
for (let i = 0; i < element.options.length; i++) {
|
|
101
|
-
const option = element.options[i]
|
|
102
|
-
option.selected = option.defaultSelected
|
|
103
|
-
}
|
|
104
|
-
} else if (
|
|
105
|
-
(tagName === 'input' && (element.type === 'checkbox' || element.type == 'radio')) ||
|
|
106
|
-
(tagName !== 'input' && this._controlsWithChecked.includes(tagName))
|
|
107
|
-
) {
|
|
108
|
-
element.checked = element.hasAttribute('checked')
|
|
109
|
-
} else if (
|
|
110
|
-
tagName === 'schmancy-input' ||
|
|
111
|
-
tagName === 'schmancy-rating' ||
|
|
112
|
-
tagName === 'schmancy-mask-input' ||
|
|
113
|
-
tagName === 'schmancy-date-time-input'
|
|
114
|
-
) {
|
|
115
|
-
element.value = element.getAttribute('value')
|
|
116
|
-
} else if (this._controlsWithValue.includes(tagName)) {
|
|
117
|
-
element.value = element.defaultValue
|
|
118
|
-
}
|
|
119
|
-
})
|
|
109
|
+
private _onReset = (e: Event): void => {
|
|
110
|
+
e.stopPropagation()
|
|
111
|
+
this._internals?.states.delete('invalid')
|
|
120
112
|
this.dispatchEvent(new CustomEvent('reset'))
|
|
121
113
|
}
|
|
122
114
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
formElements.push(element)
|
|
130
|
-
}
|
|
131
|
-
const children = Array.from(element.getElementsByTagName('*')).filter((element: any) => !element.disabled)
|
|
132
|
-
formElements.push(...children)
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
return formElements
|
|
115
|
+
/** Programmatically submit via the native submitter pipeline. */
|
|
116
|
+
public submit(): boolean {
|
|
117
|
+
if (!this._form) return false
|
|
118
|
+
if (!this.novalidate && !this._form.reportValidity()) return false
|
|
119
|
+
this._form.requestSubmit()
|
|
120
|
+
return true
|
|
136
121
|
}
|
|
137
122
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const formElements = this.getFormElements()
|
|
142
|
-
formElements.forEach(element => {
|
|
143
|
-
const tagName = element.tagName.toLowerCase()
|
|
144
|
-
if (tagName === 'select') {
|
|
145
|
-
for (let i = 0; i < element.options.length; i++) {
|
|
146
|
-
const option = element.options[i]
|
|
147
|
-
if (option.selected) {
|
|
148
|
-
formData.append(element.name, option.value)
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
} else if (this._controlsWithChecked.includes(tagName) && element.checked) {
|
|
152
|
-
formData.append(element.name, element.value || 'on')
|
|
153
|
-
} else if (
|
|
154
|
-
this._controlsWithValue.includes(tagName) &&
|
|
155
|
-
element.type !== 'checkbox' &&
|
|
156
|
-
element.type !== 'radio' &&
|
|
157
|
-
element.type !== 'submit'
|
|
158
|
-
) {
|
|
159
|
-
formData.append(element.name, element.value)
|
|
160
|
-
}
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
return formData
|
|
123
|
+
/** Programmatically reset via native `form.reset()`. */
|
|
124
|
+
public reset(): void {
|
|
125
|
+
this._form?.reset()
|
|
164
126
|
}
|
|
165
127
|
|
|
166
|
-
/** Checks for validity of the form. */
|
|
167
128
|
public reportValidity(): boolean {
|
|
168
|
-
|
|
169
|
-
return !formElements.some(
|
|
170
|
-
element => typeof element.reportValidity === 'function' && element.reportValidity() === false,
|
|
171
|
-
)
|
|
129
|
+
return this._form?.reportValidity() ?? true
|
|
172
130
|
}
|
|
173
131
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
this.submit()
|
|
178
|
-
} else if (targetElement.type?.toLowerCase() === 'reset') {
|
|
179
|
-
this.reset()
|
|
180
|
-
}
|
|
132
|
+
public checkValidity(): boolean {
|
|
133
|
+
return this._form?.checkValidity() ?? true
|
|
134
|
+
}
|
|
181
135
|
|
|
182
|
-
|
|
136
|
+
/** Snapshot of current form values. Equivalent to `new FormData(this.form)`. */
|
|
137
|
+
public getFormData(): FormData {
|
|
138
|
+
return this._form ? new FormData(this._form) : new FormData()
|
|
183
139
|
}
|
|
184
140
|
|
|
185
|
-
|
|
186
|
-
|
|
141
|
+
/** The underlying `<form>` element (escape hatch for advanced integration). */
|
|
142
|
+
public get form(): HTMLFormElement | null {
|
|
143
|
+
return this._form
|
|
187
144
|
}
|
|
188
145
|
}
|
|
189
146
|
|
|
@@ -192,3 +149,30 @@ declare global {
|
|
|
192
149
|
'schmancy-form': SchmancyForm
|
|
193
150
|
}
|
|
194
151
|
}
|
|
152
|
+
|
|
153
|
+
// === Retained type surface ===
|
|
154
|
+
// These interfaces were part of the old collection-based engine. They're kept
|
|
155
|
+
// exported because downstream code may still import them as documentation.
|
|
156
|
+
// The new implementation no longer uses them internally.
|
|
157
|
+
|
|
158
|
+
export interface FormElement extends HTMLElement {
|
|
159
|
+
name?: string
|
|
160
|
+
value?: string
|
|
161
|
+
disabled?: boolean
|
|
162
|
+
type?: string
|
|
163
|
+
defaultValue?: string
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export interface CheckableFormElement extends FormElement {
|
|
167
|
+
checked?: boolean
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export interface ValidatableFormElement extends FormElement {
|
|
171
|
+
reportValidity?: () => boolean
|
|
172
|
+
checkValidity?: () => boolean
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface FormEventMap {
|
|
176
|
+
submit: CustomEvent<FormData>
|
|
177
|
+
reset: CustomEvent
|
|
178
|
+
}
|
package/src/form/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './form
|
|
2
|
-
export
|
|
1
|
+
export * from './form'
|
|
2
|
+
export { default as SchmancyForm } from './form'
|