@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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# schmancy-splash-screen
|
|
2
|
+
|
|
3
|
+
> Full-viewport splash overlay that fades out once ready; consumer supplies the visuals.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-splash-screen min-duration="1200">
|
|
8
|
+
<my-logo slot="splash"></my-logo>
|
|
9
|
+
<my-app></my-app>
|
|
10
|
+
</schmancy-splash-screen>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The `splash` slot holds the overlay content (logo, animation, whatever). The default slot is the real app, revealed after the splash dismisses. The overlay is empty by default — no built-in spinner, no hidden dependencies. Bring your own visuals.
|
|
14
|
+
|
|
15
|
+
## Properties
|
|
16
|
+
| Property | Type | Default | Description |
|
|
17
|
+
|----------|------|---------|-------------|
|
|
18
|
+
| minDuration | number | `1500` | Minimum ms the splash stays visible (prevents flash on fast loads). |
|
|
19
|
+
| auto | boolean | `false` | When true, dismiss on the `minDuration` timer alone. When false, also wait for a `ready` signal. |
|
|
20
|
+
| initiallyHidden | boolean | `false` | When true, the splash starts hidden. Use with `show()` for imperative control (e.g. between route transitions). |
|
|
21
|
+
|
|
22
|
+
## Methods
|
|
23
|
+
| Method | Description |
|
|
24
|
+
|--------|-------------|
|
|
25
|
+
| `ready()` | Signal that the app is ready — dismisses once `minDuration` has also elapsed. |
|
|
26
|
+
| `show()` | Force the splash back on (e.g. re-show between route transitions). |
|
|
27
|
+
|
|
28
|
+
## Events
|
|
29
|
+
| Event | Detail | Description |
|
|
30
|
+
|-------|--------|-------------|
|
|
31
|
+
| schmancy-splash-done | `void` | Fires when the splash finishes dismissing. |
|
|
32
|
+
|
|
33
|
+
## CSS custom properties
|
|
34
|
+
| Property | Default | Description |
|
|
35
|
+
|----------|---------|-------------|
|
|
36
|
+
| `--schmancy-splash-background` | `var(--schmancy-sys-color-surface-containerLowest, #000)` | Splash layer background. |
|
|
37
|
+
| `--schmancy-splash-transition` | `500ms` | Fade duration. |
|
|
38
|
+
|
|
39
|
+
## Examples
|
|
40
|
+
```html
|
|
41
|
+
<!-- Wait for explicit ready signal (default) -->
|
|
42
|
+
<schmancy-splash-screen min-duration="800">
|
|
43
|
+
<img slot="splash" src="/logo.svg" />
|
|
44
|
+
<main-app></main-app>
|
|
45
|
+
</schmancy-splash-screen>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// Imperative: signal ready when data loads
|
|
50
|
+
const splash = document.querySelector('schmancy-splash-screen')!
|
|
51
|
+
dataStore.loaded$.subscribe(() => splash.ready())
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```html
|
|
55
|
+
<!-- Auto mode: dismisses purely on the timer -->
|
|
56
|
+
<schmancy-splash-screen min-duration="1200" auto>
|
|
57
|
+
<schmancy-typography type="display" token="lg" slot="splash">Welcome</schmancy-typography>
|
|
58
|
+
<app-shell></app-shell>
|
|
59
|
+
</schmancy-splash-screen>
|
|
60
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# schmancy-switch
|
|
2
|
+
|
|
3
|
+
> Binary on/off control. Form-associated, ARIA `role="switch"`. Use for immediate state changes; use `<schmancy-checkbox>` for form selections.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-switch name="notifications" label="Email notifications" @change=${(e) => handle(e.detail.value)}>
|
|
8
|
+
</schmancy-switch>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Properties
|
|
12
|
+
| Property | Type | Default | Description |
|
|
13
|
+
|----------|------|---------|-------------|
|
|
14
|
+
| checked | boolean | `false` | Current on/off state. Reflected as attribute. |
|
|
15
|
+
| name | string | `''` | Form submission name. |
|
|
16
|
+
| value | string | `'on'` | Value submitted when checked. |
|
|
17
|
+
| label | string | `''` | ARIA label on the inner button; also used by axe. |
|
|
18
|
+
| required | boolean | `false` | Must be on for form validity. |
|
|
19
|
+
| disabled | boolean | `false` | Disables interaction. |
|
|
20
|
+
|
|
21
|
+
## Events
|
|
22
|
+
| Event | Detail | Description |
|
|
23
|
+
|-------|--------|-------------|
|
|
24
|
+
| change | `{ value: boolean }` | Fires when the state toggles (via click or Enter/Space). |
|
|
25
|
+
|
|
26
|
+
## Parts
|
|
27
|
+
| Part | Description |
|
|
28
|
+
|------|-------------|
|
|
29
|
+
| track | Background track element. |
|
|
30
|
+
| thumb | Moving thumb element. |
|
|
31
|
+
|
|
32
|
+
## States
|
|
33
|
+
| State | When |
|
|
34
|
+
|-------|------|
|
|
35
|
+
| `:state(checked)` | While the switch is on. Target via `schmancy-switch:state(checked) { … }`. |
|
|
36
|
+
|
|
37
|
+
## Form association
|
|
38
|
+
Uses `ElementInternals` — participates in `<form>` submission natively. Contributes `name=value` when checked; omitted when unchecked. `formResetCallback` restores the initial `checked` attribute. `formDisabledCallback` propagates `<fieldset disabled>`.
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
```html
|
|
42
|
+
<!-- Inside a form -->
|
|
43
|
+
<schmancy-form>
|
|
44
|
+
<schmancy-switch name="marketing" label="Marketing emails"></schmancy-switch>
|
|
45
|
+
<schmancy-switch name="product" label="Product updates" checked></schmancy-switch>
|
|
46
|
+
<schmancy-button type="submit">Save</schmancy-button>
|
|
47
|
+
</schmancy-form>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<!-- Required toggle (must be on to submit) -->
|
|
52
|
+
<schmancy-switch name="agree" label="I agree" required></schmancy-switch>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<!-- Custom submitted value -->
|
|
57
|
+
<schmancy-switch name="mode" value="dark" label="Dark mode"></schmancy-switch>
|
|
58
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# tooltip (directive)
|
|
2
2
|
|
|
3
|
-
> Lit directive that adds a positioned tooltip to any element on hover/focus.
|
|
3
|
+
> Lit directive that adds a positioned tooltip to any element on hover/focus. The `<schmancy-tooltip>` component was removed — use this directive.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
```typescript
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# schmancy-visually-hidden
|
|
2
|
+
|
|
3
|
+
> Hide content visually while keeping it in the accessibility tree. For screen-reader-only labels, supplemental descriptions, and live-region text.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<button>
|
|
8
|
+
<schmancy-icon>close</schmancy-icon>
|
|
9
|
+
<schmancy-visually-hidden>Close dialog</schmancy-visually-hidden>
|
|
10
|
+
</button>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Why not `display: none` / `visibility: hidden` / `aria-hidden`?
|
|
14
|
+
Those remove content from assistive tech too. `<schmancy-visually-hidden>` uses the WCAG-recommended clip pattern, so screen readers still read the content while sighted users don't see it.
|
|
15
|
+
|
|
16
|
+
## Properties
|
|
17
|
+
None. Pure wrapper.
|
|
18
|
+
|
|
19
|
+
## Examples
|
|
20
|
+
```html
|
|
21
|
+
<!-- Icon-only button label -->
|
|
22
|
+
<schmancy-icon-button>
|
|
23
|
+
<schmancy-icon>delete</schmancy-icon>
|
|
24
|
+
<schmancy-visually-hidden>Delete item</schmancy-visually-hidden>
|
|
25
|
+
</schmancy-icon-button>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<!-- Additional context for links -->
|
|
30
|
+
<a href="/article/42">
|
|
31
|
+
Read more
|
|
32
|
+
<schmancy-visually-hidden>about quarterly earnings</schmancy-visually-hidden>
|
|
33
|
+
</a>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<!-- Live region announcements -->
|
|
38
|
+
<schmancy-visually-hidden role="status" aria-live="polite">
|
|
39
|
+
${this.status}
|
|
40
|
+
</schmancy-visually-hidden>
|
|
41
|
+
```
|
|
@@ -78,10 +78,8 @@ export type Feeling =
|
|
|
78
78
|
| HappyFeeling | SadFeeling | AnxiousFeeling | AngryFeeling
|
|
79
79
|
| TiredFeeling | CalmFeeling | ConnectedFeeling | MixedFeeling
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
| 'happy' | 'sad' | 'anxious' | 'angry'
|
|
84
|
-
| 'tired' | 'calm' | 'connected' | 'mixed'
|
|
81
|
+
// FeelingCategory is defined in ../types/mood-audio.types.ts and re-exported
|
|
82
|
+
// from ./index.ts — the canonical source.
|
|
85
83
|
|
|
86
84
|
// ============================================================================
|
|
87
85
|
// SOUND GENERATOR
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $LitElement } from '@mixins/index'
|
|
2
2
|
import { InputSize, SchmancyInput } from '@schmancy/input'
|
|
3
3
|
import SchmancyOption from '@schmancy/option/option'
|
|
4
|
-
import { html } from 'lit'
|
|
4
|
+
import { html, nothing } from 'lit'
|
|
5
5
|
import { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'
|
|
6
6
|
import { classMap } from 'lit/directives/class-map.js'
|
|
7
7
|
import { createRef, ref } from 'lit/directives/ref.js'
|
|
@@ -48,6 +48,40 @@ interface FilteredOption {
|
|
|
48
48
|
*/
|
|
49
49
|
@customElement('schmancy-autocomplete')
|
|
50
50
|
export default class SchmancyAutocomplete extends $LitElement(style) {
|
|
51
|
+
static formAssociated = true
|
|
52
|
+
internals: ElementInternals | undefined
|
|
53
|
+
|
|
54
|
+
constructor() {
|
|
55
|
+
super()
|
|
56
|
+
try {
|
|
57
|
+
this.internals = this.attachInternals()
|
|
58
|
+
} catch {
|
|
59
|
+
this.internals = undefined
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
get form(): HTMLFormElement | null {
|
|
64
|
+
return this.internals?.form ?? null
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
formResetCallback(): void {
|
|
68
|
+
if (this.multi) {
|
|
69
|
+
this._selectedValues$.next([])
|
|
70
|
+
} else {
|
|
71
|
+
this._selectedValue$.next('')
|
|
72
|
+
}
|
|
73
|
+
this._inputValue = ''
|
|
74
|
+
this._inputValue$.next('')
|
|
75
|
+
this.error = false
|
|
76
|
+
this.validationMessage = ''
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
formDisabledCallback(disabled: boolean): void {
|
|
80
|
+
// The component does not expose a disabled prop directly; propagate via attribute.
|
|
81
|
+
if (disabled) this.setAttribute('disabled', '')
|
|
82
|
+
else this.removeAttribute('disabled')
|
|
83
|
+
}
|
|
84
|
+
|
|
51
85
|
// Track whether value/values have been explicitly set
|
|
52
86
|
_valueSet: boolean = false
|
|
53
87
|
_valuesSet: boolean = false
|
|
@@ -67,6 +101,8 @@ export default class SchmancyAutocomplete extends $LitElement(style) {
|
|
|
67
101
|
@property({ type: Boolean }) error = false
|
|
68
102
|
@property({ type: String }) validationMessage = ''
|
|
69
103
|
|
|
104
|
+
private readonly _a11yId = `schmancy-autocomplete-${Math.random().toString(36).slice(2, 10)}`
|
|
105
|
+
|
|
70
106
|
// Values property for multi-select mode
|
|
71
107
|
@property({ type: Array })
|
|
72
108
|
get values() {
|
|
@@ -139,6 +175,16 @@ export default class SchmancyAutocomplete extends $LitElement(style) {
|
|
|
139
175
|
]).pipe(
|
|
140
176
|
tap(([selectedValue, selectedValues]) => {
|
|
141
177
|
this._updateOptionSelection(selectedValue, selectedValues)
|
|
178
|
+
// Keep ElementInternals form value in sync with selection (single and multi).
|
|
179
|
+
const formValue = this.multi ? selectedValues.join(',') : selectedValue
|
|
180
|
+
this.internals?.setFormValue(formValue || null)
|
|
181
|
+
if (this.required) {
|
|
182
|
+
const missing = this.multi ? selectedValues.length === 0 : !selectedValue
|
|
183
|
+
this.internals?.setValidity(
|
|
184
|
+
missing ? { valueMissing: true } : {},
|
|
185
|
+
missing ? this.validationMessage || 'Please select an option.' : undefined,
|
|
186
|
+
)
|
|
187
|
+
}
|
|
142
188
|
}),
|
|
143
189
|
takeUntil(this.disconnecting)
|
|
144
190
|
).subscribe()
|
|
@@ -494,6 +540,10 @@ export default class SchmancyAutocomplete extends $LitElement(style) {
|
|
|
494
540
|
.placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}
|
|
495
541
|
.value=${this._inputValue}
|
|
496
542
|
.autocomplete=${this.autocomplete}
|
|
543
|
+
aria-invalid=${this.error ? 'true' : 'false'}
|
|
544
|
+
aria-required=${this.required ? 'true' : 'false'}
|
|
545
|
+
aria-describedby=${this.error && this.validationMessage ? `${this._a11yId}-err` : nothing}
|
|
546
|
+
aria-label=${!this.label && this.placeholder ? this.placeholder : nothing}
|
|
497
547
|
@input=${(e: Event) => {
|
|
498
548
|
const value = (e.target as HTMLInputElement).value
|
|
499
549
|
this._inputValue = value
|
|
@@ -517,7 +567,7 @@ export default class SchmancyAutocomplete extends $LitElement(style) {
|
|
|
517
567
|
|
|
518
568
|
<!-- Validation message -->
|
|
519
569
|
${when(this.error && this.validationMessage, () => html`
|
|
520
|
-
<div class="mt-1 text-sm text-error-default">
|
|
570
|
+
<div id="${this._a11yId}-err" class="mt-1 text-sm text-error-default" role="alert">
|
|
521
571
|
${this.validationMessage}
|
|
522
572
|
</div>
|
|
523
573
|
`)}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { TailwindElement } from '@mixins/index'
|
|
2
|
+
import { css, html } from 'lit'
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Breadcrumb navigation container. Wraps a list of `schmancy-breadcrumb-item`
|
|
7
|
+
* elements with the correct ARIA landmark and semantics.
|
|
8
|
+
*
|
|
9
|
+
* @element schmancy-breadcrumb
|
|
10
|
+
* @slot - Default slot for `<schmancy-breadcrumb-item>` children.
|
|
11
|
+
* @attr separator - Character or string rendered between items. Default `/`.
|
|
12
|
+
* @csspart separator - The separator element.
|
|
13
|
+
*/
|
|
14
|
+
@customElement('schmancy-breadcrumb')
|
|
15
|
+
export class SchmancyBreadcrumb extends TailwindElement(css`
|
|
16
|
+
:host {
|
|
17
|
+
display: block;
|
|
18
|
+
}
|
|
19
|
+
nav {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-wrap: wrap;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: 0.25rem;
|
|
24
|
+
}
|
|
25
|
+
.sep {
|
|
26
|
+
color: var(--schmancy-sys-color-surface-onVariant, #79747e);
|
|
27
|
+
user-select: none;
|
|
28
|
+
padding: 0 0.25rem;
|
|
29
|
+
}
|
|
30
|
+
::slotted(schmancy-breadcrumb-item:last-of-type) {
|
|
31
|
+
font-weight: 500;
|
|
32
|
+
}
|
|
33
|
+
`) {
|
|
34
|
+
@property({ type: String }) separator = '/'
|
|
35
|
+
|
|
36
|
+
connectedCallback(): void {
|
|
37
|
+
super.connectedCallback()
|
|
38
|
+
if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', 'Breadcrumb')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
render() {
|
|
42
|
+
// Render separators between slotted items by manipulating after render.
|
|
43
|
+
// The simpler approach uses the CSS adjacent-sibling pattern so the
|
|
44
|
+
// separator is visually present without affecting the accessible name.
|
|
45
|
+
return html`
|
|
46
|
+
<nav role="navigation">
|
|
47
|
+
<slot @slotchange=${() => this._insertSeparators()}></slot>
|
|
48
|
+
</nav>
|
|
49
|
+
`
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private _insertSeparators() {
|
|
53
|
+
const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement | null
|
|
54
|
+
if (!slot) return
|
|
55
|
+
const items = slot.assignedElements({ flatten: true })
|
|
56
|
+
// Remove any previously-inserted separators.
|
|
57
|
+
this.querySelectorAll('[data-schmancy-sep]').forEach(el => el.remove())
|
|
58
|
+
items.forEach((el, idx) => {
|
|
59
|
+
if (idx === items.length - 1) return
|
|
60
|
+
const sep = document.createElement('span')
|
|
61
|
+
sep.setAttribute('data-schmancy-sep', '')
|
|
62
|
+
sep.setAttribute('aria-hidden', 'true')
|
|
63
|
+
sep.setAttribute('part', 'separator')
|
|
64
|
+
sep.className = 'sep'
|
|
65
|
+
sep.textContent = this.separator
|
|
66
|
+
el.insertAdjacentElement('afterend', sep)
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Individual breadcrumb item. Renders as a link when `href` is provided,
|
|
73
|
+
* otherwise as a plain span (represents the current page).
|
|
74
|
+
*
|
|
75
|
+
* @element schmancy-breadcrumb-item
|
|
76
|
+
* @slot - Label content.
|
|
77
|
+
* @attr href - If set, renders as an anchor.
|
|
78
|
+
* @attr current - Marks as `aria-current="page"`.
|
|
79
|
+
*/
|
|
80
|
+
@customElement('schmancy-breadcrumb-item')
|
|
81
|
+
export class SchmancyBreadcrumbItem extends TailwindElement(css`
|
|
82
|
+
:host {
|
|
83
|
+
display: inline-block;
|
|
84
|
+
}
|
|
85
|
+
a, span {
|
|
86
|
+
color: inherit;
|
|
87
|
+
text-decoration: none;
|
|
88
|
+
}
|
|
89
|
+
a:hover {
|
|
90
|
+
text-decoration: underline;
|
|
91
|
+
}
|
|
92
|
+
`) {
|
|
93
|
+
@property({ type: String }) href = ''
|
|
94
|
+
@property({ type: Boolean, reflect: true }) current = false
|
|
95
|
+
|
|
96
|
+
render() {
|
|
97
|
+
if (this.href && !this.current) {
|
|
98
|
+
return html`<a href=${this.href}><slot></slot></a>`
|
|
99
|
+
}
|
|
100
|
+
return html`<span aria-current=${this.current ? 'page' : 'false'}><slot></slot></span>`
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
declare global {
|
|
105
|
+
interface HTMLElementTagNameMap {
|
|
106
|
+
'schmancy-breadcrumb': SchmancyBreadcrumb
|
|
107
|
+
'schmancy-breadcrumb-item': SchmancyBreadcrumbItem
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './breadcrumb'
|
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
|
|