@mhmo91/schmancy 0.9.5 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +493 -718
- package/dist/{animation-CO_Csq84.cjs.map → animation-Bcwh107v.cjs.map} +1 -1
- package/dist/{animation-BK-8BwY8.js.map → animation-CXKSuUoE.js.map} +1 -1
- package/dist/{area-CRoGqD_u.js → area-BARjKpE9.js} +2 -2
- package/dist/{area-CRoGqD_u.js.map → area-BARjKpE9.js.map} +1 -1
- package/dist/{area-JPykB7A9.cjs → area-D9b9dHQr.cjs} +3 -3
- package/dist/{area-JPykB7A9.cjs.map → area-D9b9dHQr.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-kz8UgPTO.js → audio-C7TzWI8M.js} +1 -1
- package/dist/audio-C7TzWI8M.js.map +1 -0
- package/dist/{audio-DtYYgzYD.cjs → audio-DUVz7Ars.cjs} +1 -1
- package/dist/audio-DUVz7Ars.cjs.map +1 -0
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-AI2CCJmK.cjs +115 -0
- package/dist/autocomplete-AI2CCJmK.cjs.map +1 -0
- package/dist/{autocomplete-BllPQwr8.js → autocomplete-DOimwVMP.js} +48 -22
- package/dist/autocomplete-DOimwVMP.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-DYEAZ8Qj.cjs → boat-Bk4u-LzT.cjs} +2 -2
- package/dist/{boat-DYEAZ8Qj.cjs.map → boat-Bk4u-LzT.cjs.map} +1 -1
- package/dist/{boat-BDTQ-du9.js → boat-DrghVeWK.js} +5 -5
- package/dist/{boat-BDTQ-du9.js.map → boat-DrghVeWK.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +34 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +73 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/{busy-ChDAeaKF.js → busy-BmFfwyz_.js} +7 -6
- package/dist/{busy-ChDAeaKF.js.map → busy-BmFfwyz_.js.map} +1 -1
- package/dist/{busy-Dj7Xn0Z0.cjs → busy-c_q_F8O0.cjs} +8 -8
- package/dist/{busy-Dj7Xn0Z0.cjs.map → busy-c_q_F8O0.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +4 -4
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +25 -6
- package/dist/button.js.map +1 -1
- package/dist/{card-DZFPRPqs.js → card-BADJHUMA.js} +16 -15
- package/dist/{card-DZFPRPqs.js.map → card-BADJHUMA.js.map} +1 -1
- package/dist/{card-BvPWVEJX.cjs → card-C_E944_Z.cjs} +10 -10
- package/dist/{card-BvPWVEJX.cjs.map → card-C_E944_Z.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +3 -3
- package/dist/charts.cjs.map +1 -1
- package/dist/charts.js +2 -2
- package/dist/{checkbox-GSSjqo6w.js → checkbox-D7rvCrGk.js} +28 -9
- package/dist/{checkbox-GSSjqo6w.js.map → checkbox-D7rvCrGk.js.map} +1 -1
- package/dist/{checkbox-BC_37rsG.cjs → checkbox-ZqDoCagB.cjs} +10 -10
- package/dist/{checkbox-BC_37rsG.cjs.map → checkbox-ZqDoCagB.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-B19XS8Xc.cjs → chips-Cux635Qs.cjs} +18 -18
- package/dist/chips-Cux635Qs.cjs.map +1 -0
- package/dist/{chips-B9oAEfE_.js → chips-vdzIsesI.js} +37 -27
- package/dist/chips-vdzIsesI.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-fSLrlgOb.cjs → code-highlight-C9lKek2p.cjs} +11 -11
- package/dist/{code-highlight-fSLrlgOb.cjs.map → code-highlight-C9lKek2p.cjs.map} +1 -1
- package/dist/{code-highlight-DCk5lJY-.js → code-highlight-D6yruol6.js} +6 -5
- package/dist/{code-highlight-DCk5lJY-.js.map → code-highlight-D6yruol6.js.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/components-ByRyEzz5.cjs +73 -0
- package/dist/{components-CyD6a7gQ.cjs.map → components-ByRyEzz5.cjs.map} +1 -1
- package/dist/{components-COsM6sJZ.js → components-DSvPKR9Q.js} +2 -2
- package/dist/{components-COsM6sJZ.js.map → components-DSvPKR9Q.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +7 -7
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +5 -4
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{cursor-glow-DtSy_PJd.cjs → cursor-glow-82y5h3E4.cjs} +1 -1
- package/dist/{cursor-glow-DtSy_PJd.cjs.map → cursor-glow-82y5h3E4.cjs.map} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js → cursor-glow-C2YRrB8Z.js} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js.map → cursor-glow-C2YRrB8Z.js.map} +1 -1
- package/dist/{date-range-ZAaQB22I.cjs → date-range-DJsavigf.cjs} +3 -3
- package/dist/date-range-DJsavigf.cjs.map +1 -0
- package/dist/{date-range-inline-Bl8qbiQF.js → date-range-inline-B87TDYI6.js} +1 -1
- package/dist/{date-range-inline-Bl8qbiQF.js.map → date-range-inline-B87TDYI6.js.map} +1 -1
- package/dist/date-range-inline-De-M0VmL.cjs +43 -0
- package/dist/{date-range-inline-m7nLjOMI.cjs.map → date-range-inline-De-M0VmL.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/{date-range-Sfyco9-n.js → date-range-tEX2Jx2j.js} +4 -4
- package/dist/date-range-tEX2Jx2j.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay-BvVdfhAR.cjs +9 -0
- package/dist/{delay-7boauN6N.cjs.map → delay-BvVdfhAR.cjs.map} +1 -1
- package/dist/{delay-CgX6m0HN.js → delay-CZw37zps.js} +9 -8
- package/dist/{delay-CgX6m0HN.js.map → delay-CZw37zps.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-BHnk8l4q.cjs → details-Bhz8_whd.cjs} +9 -9
- package/dist/{details-BHnk8l4q.cjs.map → details-Bhz8_whd.cjs.map} +1 -1
- package/dist/{details-BPkUg8Cq.js → details-D7VTnLOh.js} +16 -15
- package/dist/{details-BPkUg8Cq.js.map → details-D7VTnLOh.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-service-NZEvyEK-.js → dialog-service-ClFrOWf4.js} +2 -2
- package/dist/{dialog-service-NZEvyEK-.js.map → dialog-service-ClFrOWf4.js.map} +1 -1
- package/dist/{dialog-service-VnW4gkmE.cjs → dialog-service-DcuAavp2.cjs} +1 -1
- package/dist/{dialog-service-VnW4gkmE.cjs.map → dialog-service-DcuAavp2.cjs.map} +1 -1
- package/dist/dialog.cjs +18 -11
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +66 -43
- package/dist/dialog.js.map +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +5 -5
- package/dist/{divider-_khrhrZo.cjs → divider-S0bHwCCS.cjs} +2 -2
- package/dist/{divider-_khrhrZo.cjs.map → divider-S0bHwCCS.cjs.map} +1 -1
- package/dist/{divider-CW9a7MMj.js → divider-zS232JDr.js} +2 -2
- package/dist/{divider-CW9a7MMj.js.map → divider-zS232JDr.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +8 -7
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-iQ7EOMP7.js → expand-BXt9SqAF.js} +13 -12
- package/dist/{expand-iQ7EOMP7.js.map → expand-BXt9SqAF.js.map} +1 -1
- package/dist/{expand-Cp7-PH8b.cjs → expand-Dr7TFXpl.cjs} +18 -18
- package/dist/{expand-Cp7-PH8b.cjs.map → expand-Dr7TFXpl.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-IKAiJJhv.cjs → extra-BmZTXAp0.cjs} +3 -3
- package/dist/{extra-IKAiJJhv.cjs.map → extra-BmZTXAp0.cjs.map} +1 -1
- package/dist/{extra-wEpvEFbK.js → extra-COYhsOyZ.js} +2 -2
- package/dist/{extra-wEpvEFbK.js.map → extra-COYhsOyZ.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/float-CSRW-Rrd.cjs +1 -0
- package/dist/{float-D5rNC82i.cjs.map → float-CSRW-Rrd.cjs.map} +1 -1
- package/dist/{float-BQ_urmMs.js → float-DCXafWh6.js} +2 -2
- package/dist/{float-BQ_urmMs.js.map → float-DCXafWh6.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{flow-CUj0fDT_.js.map → flow-CqgDEIqK.js.map} +1 -1
- package/dist/{flow-Bbwn6dRN.cjs.map → flow-DSu4PLt1.cjs.map} +1 -1
- package/dist/form-CAY9GSCd.cjs +1 -0
- package/dist/form-CAY9GSCd.cjs.map +1 -0
- package/dist/form-D2cJ58TB.js +68 -0
- package/dist/form-D2cJ58TB.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +2 -1
- package/dist/{hashContent-DaeGmY-p.cjs.map → hashContent-kKvXKFa9.cjs.map} +1 -1
- package/dist/{hashContent-DYM21p6t.js.map → hashContent-nD2uWwi2.js.map} +1 -1
- package/dist/{icons-BDqiGXrO.js → icons-BbaI9Zf-.js} +9 -8
- package/dist/icons-BbaI9Zf-.js.map +1 -0
- package/dist/{icons-B57_93VV.cjs → icons-DPUeLS_Y.cjs} +3 -3
- package/dist/icons-DPUeLS_Y.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-WnWPIrBG.js → iframe-CEDOvkql.js} +5 -4
- package/dist/{iframe-WnWPIrBG.js.map → iframe-CEDOvkql.js.map} +1 -1
- package/dist/{iframe-DNHL3GIk.cjs → iframe-Ct50FYXq.cjs} +3 -3
- package/dist/{iframe-DNHL3GIk.cjs.map → iframe-Ct50FYXq.cjs.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +65 -59
- package/dist/{input-BiSrTcrR.cjs → input-DMjpf6V8.cjs} +2 -2
- package/dist/{input-BiSrTcrR.cjs.map → input-DMjpf6V8.cjs.map} +1 -1
- package/dist/{input-VaXHFrRn.js → input-Ri72dn5t.js} +1 -1
- package/dist/{input-VaXHFrRn.js.map → input-Ri72dn5t.js.map} +1 -1
- package/dist/{input-chip-Dy-AiP55.cjs → input-chip-BhjGVpc3.cjs} +9 -9
- package/dist/input-chip-BhjGVpc3.cjs.map +1 -0
- package/dist/{input-chip-QejNcRnS.js → input-chip-CI4__N8w.js} +13 -9
- package/dist/input-chip-CI4__N8w.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/{intersection-CZpaIHeT.cjs.map → intersection-D1v1UCVv.cjs.map} +1 -1
- package/dist/{intersection-BPLpqYEd.js.map → intersection-LfEsy29T.js.map} +1 -1
- package/dist/json.cjs +3 -3
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +5 -4
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +28 -0
- package/dist/kbd.cjs.map +1 -0
- package/dist/kbd.js +45 -0
- package/dist/kbd.js.map +1 -0
- package/dist/{layout-yxSlLybo.js → layout-BE2ld1IY.js} +1 -1
- package/dist/{layout-yxSlLybo.js.map → layout-BE2ld1IY.js.map} +1 -1
- package/dist/layout-D7xOqMkJ.cjs +17 -0
- package/dist/{layout-DNYG3phx.cjs.map → layout-D7xOqMkJ.cjs.map} +1 -1
- package/dist/{layout-4C-6_cre.cjs → layout-PZCF3kwl.cjs} +1 -1
- package/dist/{layout-4C-6_cre.cjs.map → layout-PZCF3kwl.cjs.map} +1 -1
- package/dist/{layout-CnsXeCAy.js → layout-uAQpJN31.js} +20 -19
- package/dist/{layout-CnsXeCAy.js.map → layout-uAQpJN31.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-BrI1Z31s.js → lightbox-C0OEHns9.js} +10 -9
- package/dist/{lightbox-BrI1Z31s.js.map → lightbox-C0OEHns9.js.map} +1 -1
- package/dist/{lightbox-CmACf0t5.cjs → lightbox-cXRnvHMN.cjs} +20 -20
- package/dist/{lightbox-CmACf0t5.cjs.map → lightbox-cXRnvHMN.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-swIL9VDv.cjs → list-CmJ5h35b.cjs} +5 -5
- package/dist/{list-swIL9VDv.cjs.map → list-CmJ5h35b.cjs.map} +1 -1
- package/dist/{list-Cm-jjXxM.js → list-d1mHar5p.js} +14 -13
- package/dist/{list-Cm-jjXxM.js.map → list-d1mHar5p.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-3llHwB-8.cjs → litElement.mixin-Bj2q1yPw.cjs} +1 -1
- package/dist/{litElement.mixin-3llHwB-8.cjs.map → litElement.mixin-Bj2q1yPw.cjs.map} +1 -1
- package/dist/{litElement.mixin-6jJYHCrZ.js → litElement.mixin-CncaUoxz.js} +1 -1
- package/dist/{litElement.mixin-6jJYHCrZ.js.map → litElement.mixin-CncaUoxz.js.map} +1 -1
- package/dist/{magnetic-BZGFxAWG.js → magnetic-Dj52WplI.js} +2 -2
- package/dist/{magnetic-BZGFxAWG.js.map → magnetic-Dj52WplI.js.map} +1 -1
- package/dist/{magnetic-Dux4QwO4.cjs → magnetic-aBBnj_vk.cjs} +1 -1
- package/dist/{magnetic-Dux4QwO4.cjs.map → magnetic-aBBnj_vk.cjs.map} +1 -1
- package/dist/{mailbox-D6LkQcN5.cjs → mailbox-BmChskZc.cjs} +59 -59
- package/dist/{mailbox-D6LkQcN5.cjs.map → mailbox-BmChskZc.cjs.map} +1 -1
- package/dist/{mailbox-BuvsVaAQ.js → mailbox-C4-E93be.js} +13 -12
- package/dist/{mailbox-BuvsVaAQ.js.map → mailbox-C4-E93be.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-CQiKAxC3.js → map-DHyYLhvy.js} +6 -5
- package/dist/{map-CQiKAxC3.js.map → map-DHyYLhvy.js.map} +1 -1
- package/dist/{map-D5NN4VET.cjs → map-DYEvlNl0.cjs} +7 -7
- package/dist/{map-D5NN4VET.cjs.map → map-DYEvlNl0.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-CkgMO9K5.cjs → menu-BlPTI6H9.cjs} +3 -3
- package/dist/{menu-CkgMO9K5.cjs.map → menu-BlPTI6H9.cjs.map} +1 -1
- package/dist/{menu-C1x04YZw.js → menu-DFDBADp4.js} +3 -3
- package/dist/{menu-C1x04YZw.js.map → menu-DFDBADp4.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.cjs.map +1 -1
- package/dist/mixins.js +43 -15
- package/dist/mixins.js.map +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +3 -3
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-BnBgxjF-.js → notification-DGpv8g2H.js} +4 -4
- package/dist/{notification-BnBgxjF-.js.map → notification-DGpv8g2H.js.map} +1 -1
- package/dist/notification-DKVWYhqs.cjs +23 -0
- package/dist/{notification-CZFEhWxc.cjs.map → notification-DKVWYhqs.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-DBO8xZwd.js → option-BD2eh458.js} +6 -5
- package/dist/{option-DBO8xZwd.js.map → option-BD2eh458.js.map} +1 -1
- package/dist/{option-BrxCVwSx.cjs → option-LtSDy2xf.cjs} +5 -5
- package/dist/{option-BrxCVwSx.cjs.map → option-LtSDy2xf.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-DQey9Qph.cjs.map → overlay-stack-CEYGD9T1.cjs.map} +1 -1
- package/dist/{overlay-stack-DT1SdaGW.js.map → overlay-stack-Ca4EK2Mu.js.map} +1 -1
- package/dist/page.cjs +2 -2
- package/dist/page.cjs.map +1 -1
- package/dist/page.js +5 -5
- package/dist/{progress-Db2e4_Zd.cjs → progress-B5ChDPbB.cjs} +2 -2
- package/dist/{progress-Db2e4_Zd.cjs.map → progress-B5ChDPbB.cjs.map} +1 -1
- package/dist/{progress-DeiHxXo7.js → progress-CE1Pk2hi.js} +2 -2
- package/dist/{progress-DeiHxXo7.js.map → progress-CE1Pk2hi.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-DHnhQtCH.cjs → provide-BZ9lq_Be.cjs} +1 -1
- package/dist/{provide-DHnhQtCH.cjs.map → provide-BZ9lq_Be.cjs.map} +1 -1
- package/dist/{provide-C1aQhxYo.js → provide-jn1Fj1vv.js} +1 -1
- package/dist/{provide-C1aQhxYo.js.map → provide-jn1Fj1vv.js.map} +1 -1
- package/dist/qr-scanner.cjs +2 -2
- package/dist/qr-scanner.cjs.map +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/radio-group-Cd9pZ2MR.cjs +40 -0
- package/dist/{radio-group-Cspwd-Vw.cjs.map → radio-group-Cd9pZ2MR.cjs.map} +1 -1
- package/dist/{radio-group-zSO0AkJf.js → radio-group-CyRHgIF3.js} +7 -6
- package/dist/{radio-group-zSO0AkJf.js.map → radio-group-CyRHgIF3.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +4 -4
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +4 -3
- package/dist/range.js.map +1 -1
- package/dist/{reduced-motion-D-L12p7G.js.map → reduced-motion-B83yZbcO.js.map} +1 -1
- package/dist/{reduced-motion-Ds05GPyz.cjs.map → reduced-motion-DR32yKEO.cjs.map} +1 -1
- package/dist/{rxjs-utils-BSjmI9-Q.js.map → rxjs-utils-Bldch1RO.js.map} +1 -1
- package/dist/{rxjs-utils-DCsfzeap.cjs.map → rxjs-utils-hAgKC7vk.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-QMCmbbDv.cjs → scroll-C_iNOi7E.cjs} +2 -2
- package/dist/{scroll-QMCmbbDv.cjs.map → scroll-C_iNOi7E.cjs.map} +1 -1
- package/dist/{scroll-cBDzye64.js → scroll-DoliwpRu.js} +7 -6
- package/dist/{scroll-cBDzye64.js.map → scroll-DoliwpRu.js.map} +1 -1
- package/dist/{search-C4dFHYbX.js.map → search-BlGJ6uJv.js.map} +1 -1
- package/dist/{search-Ds8tt7Et.cjs.map → search-C8eAOzBm.cjs.map} +1 -1
- package/dist/{select-Ct37l3lg.cjs → select-CWWuZ2iJ.cjs} +2 -2
- package/dist/{select-Ct37l3lg.cjs.map → select-CWWuZ2iJ.cjs.map} +1 -1
- package/dist/{select-c6HbWvKP.js → select-_vHPXi30.js} +3 -3
- package/dist/{select-c6HbWvKP.js.map → select-_vHPXi30.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BMXcUiIm.js → sheet-i1KtxGIj.js} +5 -5
- package/dist/{sheet-BMXcUiIm.js.map → sheet-i1KtxGIj.js.map} +1 -1
- package/dist/{sheet-CQec-bCV.cjs → sheet-r0oEYIdi.cjs} +2 -2
- package/dist/{sheet-CQec-bCV.cjs.map → sheet-r0oEYIdi.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Dumvr1HT.cjs → sheet.service-Cr13Oo6G.cjs} +1 -1
- package/dist/{sheet.service-Dumvr1HT.cjs.map → sheet.service-Cr13Oo6G.cjs.map} +1 -1
- package/dist/{sheet.service-BcPV3Du4.js → sheet.service-DUO5_kmI.js} +3 -3
- package/dist/{sheet.service-BcPV3Du4.js.map → sheet.service-DUO5_kmI.js.map} +1 -1
- package/dist/skeleton.cjs +33 -0
- package/dist/skeleton.cjs.map +1 -0
- package/dist/skeleton.js +58 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/skills/INDEX.md +7 -6
- package/dist/skills/breadcrumb.md +53 -0
- package/dist/skills/kbd.md +40 -0
- package/dist/skills/schmancy/INDEX.md +7 -6
- package/dist/skills/schmancy/breadcrumb.md +53 -0
- package/dist/skills/schmancy/kbd.md +40 -0
- package/dist/skills/schmancy/skeleton.md +40 -0
- package/dist/skills/schmancy/splash-screen.md +60 -0
- package/dist/skills/schmancy/switch.md +58 -0
- package/dist/skills/schmancy/tooltip.md +1 -1
- package/dist/skills/schmancy/visually-hidden.md +41 -0
- package/dist/skills/skeleton.md +40 -0
- package/dist/skills/splash-screen.md +60 -0
- package/dist/skills/switch.md +58 -0
- package/dist/skills/tooltip.md +1 -1
- package/dist/skills/visually-hidden.md +41 -0
- package/dist/slider.cjs +3 -3
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-Bu3EQLv2.cjs → sound.service-BjSoGjmT.cjs} +1 -1
- package/dist/{sound.service-Bu3EQLv2.cjs.map → sound.service-BjSoGjmT.cjs.map} +1 -1
- package/dist/{sound.service-m3BrSfuH.js → sound.service-cdkw3Wkv.js} +1 -1
- package/dist/{sound.service-m3BrSfuH.js.map → sound.service-cdkw3Wkv.js.map} +1 -1
- package/dist/splash-screen-CquyPP1C.cjs +41 -0
- package/dist/splash-screen-CquyPP1C.cjs.map +1 -0
- package/dist/splash-screen-CvucPkpD.js +83 -0
- package/dist/splash-screen-CvucPkpD.js.map +1 -0
- package/dist/splash-screen.cjs +1 -0
- package/dist/splash-screen.js +1 -0
- package/dist/src-Bemk2C2P.cjs +269 -0
- package/dist/{src-BtQVyqMy.cjs.map → src-Bemk2C2P.cjs.map} +1 -1
- package/dist/{src-BLngW2bl.js → src-f5a3W9Mj.js} +98 -91
- package/dist/{src-BLngW2bl.js.map → src-f5a3W9Mj.js.map} +1 -1
- package/dist/steps.cjs +10 -10
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +10 -9
- package/dist/steps.js.map +1 -1
- package/dist/{store-DYqDLAvT.js.map → store-Bmj6rvZY.js.map} +1 -1
- package/dist/{store-CorvD3bT.cjs.map → store-CO4nJyGj.cjs.map} +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/surface-CDufon40.cjs +7 -0
- package/dist/{surface-BjKZoJxK.cjs.map → surface-CDufon40.cjs.map} +1 -1
- package/dist/surface-CkEYJCae.js +22 -0
- package/dist/{surface-pK8hME5c.js.map → surface-CkEYJCae.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-C5sDI1-_.cjs → surface.mixin-CSKqQH-0.cjs} +2 -2
- package/dist/{surface.mixin-C5sDI1-_.cjs.map → surface.mixin-CSKqQH-0.cjs.map} +1 -1
- package/dist/{surface.mixin-CBNRpJum.js → surface.mixin-DqMwoddO.js} +1 -1
- package/dist/{surface.mixin-CBNRpJum.js.map → surface.mixin-DqMwoddO.js.map} +1 -1
- package/dist/switch.cjs +69 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +132 -0
- package/dist/switch.js.map +1 -0
- package/dist/{table-CiqgZzSd.cjs → table-DWc1mkpj.cjs} +3 -3
- package/dist/{table-CiqgZzSd.cjs.map → table-DWc1mkpj.cjs.map} +1 -1
- package/dist/{table-BXIHX9h4.js → table-P6VGG7NK.js} +4 -4
- package/dist/{table-BXIHX9h4.js.map → table-P6VGG7NK.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-nbV5eblZ.js → tabs-CjGjGrqY.js} +13 -12
- package/dist/{tabs-nbV5eblZ.js.map → tabs-CjGjGrqY.js.map} +1 -1
- package/dist/{tabs-CKa-W4qA.cjs → tabs-DGJEKuhC.cjs} +4 -4
- package/dist/{tabs-CKa-W4qA.cjs.map → tabs-DGJEKuhC.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-BF1Huas7.cjs → tailwind.mixin-Cpa-VnnX.cjs} +2 -2
- package/dist/tailwind.mixin-Cpa-VnnX.cjs.map +1 -0
- package/dist/{tailwind.mixin-BCJOOX1_.js → tailwind.mixin-DufHBjmb.js} +57 -63
- package/dist/tailwind.mixin-DufHBjmb.js.map +1 -0
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-D7q8exMg.js → textarea-DZT_Ofp5.js} +42 -28
- package/dist/textarea-DZT_Ofp5.js.map +1 -0
- package/dist/textarea-jmTOXrzl.cjs +39 -0
- package/dist/textarea-jmTOXrzl.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/theme-CCKqaksQ.cjs +181 -0
- package/dist/{theme-Da4SPq9X.cjs.map → theme-CCKqaksQ.cjs.map} +1 -1
- package/dist/{theme-_VPV6Bxh.js → theme-CEc32pAv.js} +13 -12
- package/dist/{theme-_VPV6Bxh.js.map → theme-CEc32pAv.js.map} +1 -1
- package/dist/theme-button-BsJcv-Zv.cjs +8 -0
- package/dist/{theme-button-Ci8VQ7KW.cjs.map → theme-button-BsJcv-Zv.cjs.map} +1 -1
- package/dist/{theme-button--sX8A-m1.js → theme-button-dOiAvdKU.js} +4 -3
- package/dist/{theme-button--sX8A-m1.js.map → theme-button-dOiAvdKU.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.events-Cv7N4Toe.js.map → theme.events-Bw3mYjUA.js.map} +1 -1
- package/dist/{theme.events-DM4H5F2d.cjs.map → theme.events-EznKK2Y0.cjs.map} +1 -1
- package/dist/{theme.interface-Da23QAYb.cjs.map → theme.interface-CM26m9te.cjs.map} +1 -1
- package/dist/{theme.interface-CXloMUCw.js.map → theme.interface-FAUIgbIq.js.map} +1 -1
- package/dist/theme.js +5 -5
- package/dist/{theme.service-C_tjlqgy.cjs → theme.service-ETiKUwVy.cjs} +1 -1
- package/dist/{theme.service-C_tjlqgy.cjs.map → theme.service-ETiKUwVy.cjs.map} +1 -1
- package/dist/{theme.service-D9lEas89.js → theme.service-_qP5WvB9.js} +2 -2
- package/dist/{theme.service-D9lEas89.js.map → theme.service-_qP5WvB9.js.map} +1 -1
- package/dist/tooltip.cjs +1 -6
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js +51 -135
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +14 -5
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +28 -6
- package/dist/tree.js.map +1 -1
- package/dist/tslib.es6-Bd-92OW3.cjs +1 -0
- package/dist/{tslib.es6-D7BIeDVB.cjs.map → tslib.es6-Bd-92OW3.cjs.map} +1 -1
- package/dist/tslib.es6-CI1onEZb.js +7 -0
- package/dist/{tslib.es6-ErZEp3OO.js.map → tslib.es6-CI1onEZb.js.map} +1 -1
- package/dist/typewriter-ByIL2Mh-.cjs +123 -0
- package/dist/{typewriter-B2TnHPjw.cjs.map → typewriter-ByIL2Mh-.cjs.map} +1 -1
- package/dist/{typewriter-BrZNa8T-.js → typewriter-vOQ3bDLb.js} +8 -7
- package/dist/{typewriter-BrZNa8T-.js.map → typewriter-vOQ3bDLb.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +4 -4
- package/dist/typography.cjs.map +1 -1
- package/dist/typography.js +10 -9
- package/dist/typography.js.map +1 -1
- package/dist/{utils-CoU7M2YS.js → utils-Cq0m3LYo.js} +3 -3
- package/dist/{utils-CoU7M2YS.js.map → utils-Cq0m3LYo.js.map} +1 -1
- package/dist/{utils-BcaKtQuA.cjs → utils-D2kE-6zc.cjs} +1 -1
- package/dist/{utils-BcaKtQuA.cjs.map → utils-D2kE-6zc.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +5 -5
- package/dist/visually-hidden.cjs +13 -0
- package/dist/visually-hidden.cjs.map +1 -0
- package/dist/visually-hidden.js +24 -0
- package/dist/visually-hidden.js.map +1 -0
- package/dist/{window-Uii13x_r.cjs → window-BS7ZQjgH.cjs} +2 -2
- package/dist/window-BS7ZQjgH.cjs.map +1 -0
- package/dist/{window-CM1ycigo.js → window-WnAihpsA.js} +7 -7
- package/dist/window-WnAihpsA.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/mixins/formField.mixin.ts +96 -69
- package/mixins/tailwind.css +11 -0
- package/package.json +17 -26
- package/skills/schmancy/INDEX.md +7 -6
- package/skills/schmancy/breadcrumb.md +53 -0
- package/skills/schmancy/kbd.md +40 -0
- package/skills/schmancy/skeleton.md +40 -0
- package/skills/schmancy/splash-screen.md +60 -0
- package/skills/schmancy/switch.md +58 -0
- package/skills/schmancy/tooltip.md +1 -1
- package/skills/schmancy/visually-hidden.md +41 -0
- package/src/audio/emotional-sounds.ts +2 -4
- package/src/autocomplete/autocomplete.ts +52 -2
- package/src/breadcrumb/breadcrumb.ts +109 -0
- package/src/breadcrumb/index.ts +1 -0
- package/src/button/button.ts +40 -0
- package/src/button/icon-button.ts +2 -1
- package/src/checkbox/checkbox.test.ts +113 -0
- package/src/checkbox/checkbox.ts +41 -1
- package/src/chips/filter-chip.ts +15 -0
- package/src/chips/input-chip.ts +7 -0
- package/src/date-range/date-range-helpers.ts +0 -71
- package/src/dialog/dialog-base.mixin.ts +11 -0
- package/src/dialog/dialog.component.ts +28 -8
- package/src/dropdown/dropdown-content.ts +3 -1
- package/src/form/form.test.ts +137 -0
- package/src/form/form.ts +142 -158
- package/src/form/index.ts +2 -2
- package/src/icons/icon.ts +1 -0
- package/src/index.ts +6 -0
- package/src/kbd/index.ts +1 -0
- package/src/kbd/kbd.ts +59 -0
- package/src/skeleton/index.ts +1 -0
- package/src/skeleton/skeleton.ts +78 -0
- package/src/splash-screen/index.ts +1 -0
- package/src/splash-screen/splash-screen.ts +154 -0
- package/src/switch/index.ts +1 -0
- package/src/switch/switch.test.ts +93 -0
- package/src/switch/switch.ts +180 -0
- package/src/test-utils/a11y.ts +35 -0
- package/src/textarea/textarea.ts +32 -2
- package/src/tooltip/index.ts +1 -2
- package/src/tree/tree.ts +27 -2
- package/src/visually-hidden/index.ts +1 -0
- package/src/visually-hidden/visually-hidden.ts +39 -0
- package/src/window/window-position.ts +1 -74
- package/types/mixins/formField.mixin.d.ts +15 -8
- package/types/src/audio/emotional-sounds.d.ts +0 -2
- package/types/src/autocomplete/autocomplete.d.ts +7 -0
- package/types/src/breadcrumb/breadcrumb.d.ts +38 -0
- package/types/src/breadcrumb/index.d.ts +1 -0
- package/types/src/button/button.d.ts +7 -0
- package/types/src/button/icon-button.d.ts +2 -1
- package/types/src/checkbox/checkbox.d.ts +6 -0
- package/types/src/checkbox/checkbox.test.d.ts +1 -0
- package/types/src/chips/filter-chip.d.ts +3 -0
- package/types/src/chips/input-chip.d.ts +1 -0
- package/types/src/date-range/date-range-helpers.d.ts +0 -12
- package/types/src/dialog/dialog.component.d.ts +6 -0
- package/types/src/dropdown/dropdown-content.d.ts +3 -1
- package/types/src/form/form-v2.d.ts +12 -63
- package/types/src/form/form.d.ts +58 -40
- package/types/src/form/form.test.d.ts +4 -0
- package/types/src/form/index.d.ts +1 -1
- package/types/src/icons/icon.d.ts +1 -0
- package/types/src/index.d.ts +6 -0
- package/types/src/kbd/index.d.ts +1 -0
- package/types/src/kbd/kbd.d.ts +25 -0
- package/types/src/skeleton/index.d.ts +1 -0
- package/types/src/skeleton/skeleton.d.ts +27 -0
- package/types/src/splash-screen/index.d.ts +1 -0
- package/types/src/splash-screen/splash-screen.d.ts +60 -0
- package/types/src/switch/index.d.ts +1 -0
- package/types/src/switch/switch.d.ts +54 -0
- package/types/src/switch/switch.test.d.ts +1 -0
- package/types/src/test-utils/a11y.d.ts +11 -0
- package/types/src/textarea/textarea.d.ts +5 -1
- package/types/src/tooltip/index.d.ts +0 -1
- package/types/src/tree/tree.d.ts +5 -0
- package/types/src/visually-hidden/index.d.ts +1 -0
- package/types/src/visually-hidden/visually-hidden.d.ts +21 -0
- package/types/src/window/window-position.d.ts +1 -35
- package/dist/audio-DtYYgzYD.cjs.map +0 -1
- package/dist/audio-kz8UgPTO.js.map +0 -1
- package/dist/autocomplete-5rVhbieU.cjs +0 -111
- package/dist/autocomplete-5rVhbieU.cjs.map +0 -1
- package/dist/autocomplete-BllPQwr8.js.map +0 -1
- package/dist/chips-B19XS8Xc.cjs.map +0 -1
- package/dist/chips-B9oAEfE_.js.map +0 -1
- package/dist/components-CyD6a7gQ.cjs +0 -73
- package/dist/date-range-Sfyco9-n.js.map +0 -1
- package/dist/date-range-ZAaQB22I.cjs.map +0 -1
- package/dist/date-range-inline-m7nLjOMI.cjs +0 -43
- package/dist/delay-7boauN6N.cjs +0 -9
- package/dist/float-D5rNC82i.cjs +0 -1
- package/dist/form-BqN1AGFj.cjs +0 -1
- package/dist/form-BqN1AGFj.cjs.map +0 -1
- package/dist/form-CajC5HnO.js +0 -270
- package/dist/form-CajC5HnO.js.map +0 -1
- package/dist/icons-B57_93VV.cjs.map +0 -1
- package/dist/icons-BDqiGXrO.js.map +0 -1
- package/dist/input-chip-Dy-AiP55.cjs.map +0 -1
- package/dist/input-chip-QejNcRnS.js.map +0 -1
- package/dist/layout-DNYG3phx.cjs +0 -17
- package/dist/notification-CZFEhWxc.cjs +0 -23
- package/dist/radio-group-Cspwd-Vw.cjs +0 -40
- package/dist/src-BtQVyqMy.cjs +0 -269
- package/dist/surface-BjKZoJxK.cjs +0 -7
- package/dist/surface-pK8hME5c.js +0 -21
- package/dist/tailwind.mixin-BCJOOX1_.js.map +0 -1
- package/dist/tailwind.mixin-BF1Huas7.cjs.map +0 -1
- package/dist/textarea-Cp1ZE60O.cjs +0 -35
- package/dist/textarea-Cp1ZE60O.cjs.map +0 -1
- package/dist/textarea-D7q8exMg.js.map +0 -1
- package/dist/theme-Da4SPq9X.cjs +0 -181
- package/dist/theme-button-Ci8VQ7KW.cjs +0 -8
- package/dist/typewriter-B2TnHPjw.cjs +0 -123
- package/dist/window-CM1ycigo.js.map +0 -1
- package/dist/window-Uii13x_r.cjs.map +0 -1
- package/src/form/form-v2.ts +0 -268
- package/src/layout/v2/grid.ts +0 -93
- package/src/notification/outlet.ts +0 -16
- package/src/store/immer-integration.ts +0 -99
- package/src/tooltip/tooltip.ts +0 -216
- /package/dist/{animation-CO_Csq84.cjs → animation-Bcwh107v.cjs} +0 -0
- /package/dist/{animation-BK-8BwY8.js → animation-CXKSuUoE.js} +0 -0
- /package/dist/{tslib.es6-ErZEp3OO.js → decorate-D_utPUsC.js} +0 -0
- /package/dist/{tslib.es6-D7BIeDVB.cjs → decorate-F9CuyeHg.cjs} +0 -0
- /package/dist/{flow-CUj0fDT_.js → flow-CqgDEIqK.js} +0 -0
- /package/dist/{flow-Bbwn6dRN.cjs → flow-DSu4PLt1.cjs} +0 -0
- /package/dist/{hashContent-DaeGmY-p.cjs → hashContent-kKvXKFa9.cjs} +0 -0
- /package/dist/{hashContent-DYM21p6t.js → hashContent-nD2uWwi2.js} +0 -0
- /package/dist/{intersection-CZpaIHeT.cjs → intersection-D1v1UCVv.cjs} +0 -0
- /package/dist/{intersection-BPLpqYEd.js → intersection-LfEsy29T.js} +0 -0
- /package/dist/{overlay-stack-DQey9Qph.cjs → overlay-stack-CEYGD9T1.cjs} +0 -0
- /package/dist/{overlay-stack-DT1SdaGW.js → overlay-stack-Ca4EK2Mu.js} +0 -0
- /package/dist/{reduced-motion-D-L12p7G.js → reduced-motion-B83yZbcO.js} +0 -0
- /package/dist/{reduced-motion-Ds05GPyz.cjs → reduced-motion-DR32yKEO.cjs} +0 -0
- /package/dist/{rxjs-utils-BSjmI9-Q.js → rxjs-utils-Bldch1RO.js} +0 -0
- /package/dist/{rxjs-utils-DCsfzeap.cjs → rxjs-utils-hAgKC7vk.cjs} +0 -0
- /package/dist/{search-C4dFHYbX.js → search-BlGJ6uJv.js} +0 -0
- /package/dist/{search-Ds8tt7Et.cjs → search-C8eAOzBm.cjs} +0 -0
- /package/dist/{store-DYqDLAvT.js → store-Bmj6rvZY.js} +0 -0
- /package/dist/{store-CorvD3bT.cjs → store-CO4nJyGj.cjs} +0 -0
- /package/dist/{theme.events-Cv7N4Toe.js → theme.events-Bw3mYjUA.js} +0 -0
- /package/dist/{theme.events-DM4H5F2d.cjs → theme.events-EznKK2Y0.cjs} +0 -0
- /package/dist/{theme.interface-Da23QAYb.cjs → theme.interface-CM26m9te.cjs} +0 -0
- /package/dist/{theme.interface-CXloMUCw.js → theme.interface-FAUIgbIq.js} +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
2
|
+
import { expectNoA11yViolations } from '../test-utils/a11y'
|
|
3
|
+
import './switch'
|
|
4
|
+
|
|
5
|
+
describe('schmancy-switch', () => {
|
|
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 form-associated and contributes when checked', async () => {
|
|
20
|
+
host.innerHTML = `
|
|
21
|
+
<form>
|
|
22
|
+
<schmancy-switch name="notify" value="yes"></schmancy-switch>
|
|
23
|
+
</form>
|
|
24
|
+
`
|
|
25
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
26
|
+
const sw = host.querySelector('schmancy-switch') as HTMLElement & { checked: boolean }
|
|
27
|
+
sw.checked = true
|
|
28
|
+
await nextUpdate()
|
|
29
|
+
await nextUpdate()
|
|
30
|
+
expect(new FormData(form).get('notify')).toBe('yes')
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('omits from FormData when unchecked', async () => {
|
|
34
|
+
host.innerHTML = `<form><schmancy-switch name="notify"></schmancy-switch></form>`
|
|
35
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
36
|
+
await nextUpdate()
|
|
37
|
+
expect(new FormData(form).get('notify')).toBeNull()
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('fires change on toggle and broadcasts :state(checked)', async () => {
|
|
41
|
+
host.innerHTML = `<schmancy-switch></schmancy-switch>`
|
|
42
|
+
const sw = host.querySelector('schmancy-switch') as HTMLElement & {
|
|
43
|
+
checked: boolean
|
|
44
|
+
updateComplete: Promise<boolean>
|
|
45
|
+
}
|
|
46
|
+
await sw.updateComplete
|
|
47
|
+
let detail: { value: boolean } | undefined
|
|
48
|
+
sw.addEventListener('change', (e: Event) => {
|
|
49
|
+
detail = (e as CustomEvent).detail
|
|
50
|
+
})
|
|
51
|
+
const btn = sw.shadowRoot!.querySelector('button') as HTMLButtonElement
|
|
52
|
+
btn.click()
|
|
53
|
+
await nextUpdate()
|
|
54
|
+
await nextUpdate()
|
|
55
|
+
expect(detail).toEqual({ value: true })
|
|
56
|
+
expect(sw.matches(':state(checked)')).toBe(true)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('exposes role="switch" with aria-checked', async () => {
|
|
60
|
+
host.innerHTML = `<schmancy-switch></schmancy-switch>`
|
|
61
|
+
const sw = host.querySelector('schmancy-switch') as HTMLElement & {
|
|
62
|
+
updateComplete: Promise<boolean>
|
|
63
|
+
}
|
|
64
|
+
await sw.updateComplete
|
|
65
|
+
const btn = sw.shadowRoot!.querySelector('button') as HTMLButtonElement
|
|
66
|
+
expect(btn.getAttribute('role')).toBe('switch')
|
|
67
|
+
expect(btn.getAttribute('aria-checked')).toBe('false')
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('has no axe-core a11y violations', async () => {
|
|
71
|
+
host.innerHTML = `<schmancy-switch label="Notifications"></schmancy-switch>`
|
|
72
|
+
const sw = host.querySelector('schmancy-switch') as HTMLElement & {
|
|
73
|
+
updateComplete: Promise<boolean>
|
|
74
|
+
}
|
|
75
|
+
await sw.updateComplete
|
|
76
|
+
await expectNoA11yViolations(host)
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('fails validation when required and unchecked', async () => {
|
|
80
|
+
host.innerHTML = `<form><schmancy-switch name="agree" required></schmancy-switch></form>`
|
|
81
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
82
|
+
const sw = host.querySelector('schmancy-switch') as HTMLElement & {
|
|
83
|
+
checked: boolean
|
|
84
|
+
checkValidity(): boolean
|
|
85
|
+
}
|
|
86
|
+
await nextUpdate()
|
|
87
|
+
expect(form.checkValidity()).toBe(false)
|
|
88
|
+
sw.checked = true
|
|
89
|
+
await nextUpdate()
|
|
90
|
+
await nextUpdate()
|
|
91
|
+
expect(form.checkValidity()).toBe(true)
|
|
92
|
+
})
|
|
93
|
+
})
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { TailwindElement } from '@mixins/index'
|
|
2
|
+
import { css, html, LitElement, nothing } from 'lit'
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js'
|
|
4
|
+
|
|
5
|
+
export type SchmancySwitchChangeEvent = CustomEvent<{ value: boolean }>
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Binary on/off control. Form-associated, keyboard-accessible, semantically a
|
|
9
|
+
* switch (ARIA role="switch"). Distinct from `schmancy-checkbox`: a switch
|
|
10
|
+
* represents an immediate state change, a checkbox represents a selection in
|
|
11
|
+
* a form to be submitted.
|
|
12
|
+
*
|
|
13
|
+
* @element schmancy-switch
|
|
14
|
+
* @fires change - `CustomEvent<{ value: boolean }>` when the state changes.
|
|
15
|
+
* @attr checked - Initial checked state (also reflected via `value`).
|
|
16
|
+
* @attr disabled - Disables interaction.
|
|
17
|
+
* @attr required - Requires the switch to be on for form validity.
|
|
18
|
+
* @attr name - Form field name for submission.
|
|
19
|
+
* @csspart track - The background track.
|
|
20
|
+
* @csspart thumb - The moving thumb.
|
|
21
|
+
*/
|
|
22
|
+
@customElement('schmancy-switch')
|
|
23
|
+
export class SchmancySwitch extends TailwindElement(css`
|
|
24
|
+
:host {
|
|
25
|
+
display: inline-block;
|
|
26
|
+
}
|
|
27
|
+
:host([disabled]) {
|
|
28
|
+
opacity: 0.38;
|
|
29
|
+
pointer-events: none;
|
|
30
|
+
}
|
|
31
|
+
button {
|
|
32
|
+
appearance: none;
|
|
33
|
+
background: none;
|
|
34
|
+
border: 0;
|
|
35
|
+
padding: 0;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
font: inherit;
|
|
38
|
+
}
|
|
39
|
+
.track {
|
|
40
|
+
width: 2.25rem;
|
|
41
|
+
height: 1.25rem;
|
|
42
|
+
border-radius: 999px;
|
|
43
|
+
background: var(--schmancy-sys-color-surface-containerHighest, #e0e0e0);
|
|
44
|
+
border: 1px solid var(--schmancy-sys-color-outline, #79747e);
|
|
45
|
+
position: relative;
|
|
46
|
+
transition: background 150ms ease, border-color 150ms ease;
|
|
47
|
+
}
|
|
48
|
+
:host(:state(checked)) .track {
|
|
49
|
+
background: var(--schmancy-sys-color-primary-default, #6750a4);
|
|
50
|
+
border-color: var(--schmancy-sys-color-primary-default, #6750a4);
|
|
51
|
+
}
|
|
52
|
+
.thumb {
|
|
53
|
+
position: absolute;
|
|
54
|
+
top: 50%;
|
|
55
|
+
left: 0.125rem;
|
|
56
|
+
width: 0.75rem;
|
|
57
|
+
height: 0.75rem;
|
|
58
|
+
border-radius: 999px;
|
|
59
|
+
background: var(--schmancy-sys-color-outline, #79747e);
|
|
60
|
+
transform: translateY(-50%);
|
|
61
|
+
transition: transform 150ms ease, background 150ms ease, width 150ms ease, height 150ms ease;
|
|
62
|
+
}
|
|
63
|
+
:host(:state(checked)) .thumb {
|
|
64
|
+
transform: translate(1rem, -50%);
|
|
65
|
+
width: 1rem;
|
|
66
|
+
height: 1rem;
|
|
67
|
+
background: var(--schmancy-sys-color-primary-on, #ffffff);
|
|
68
|
+
}
|
|
69
|
+
button:focus-visible .track {
|
|
70
|
+
outline: 2px solid var(--schmancy-sys-color-primary-default, #6750a4);
|
|
71
|
+
outline-offset: 2px;
|
|
72
|
+
}
|
|
73
|
+
@media (prefers-reduced-motion: reduce) {
|
|
74
|
+
.track, .thumb { transition: none; }
|
|
75
|
+
}
|
|
76
|
+
`) {
|
|
77
|
+
static formAssociated = true
|
|
78
|
+
private internals: ElementInternals | undefined
|
|
79
|
+
|
|
80
|
+
@property({ type: Boolean, reflect: true }) checked = false
|
|
81
|
+
@property({ type: Boolean, reflect: true }) disabled = false
|
|
82
|
+
@property({ type: Boolean, reflect: true }) required = false
|
|
83
|
+
@property({ type: String }) name = ''
|
|
84
|
+
@property({ type: String }) value = 'on'
|
|
85
|
+
@property({ type: String }) label = ''
|
|
86
|
+
|
|
87
|
+
protected static shadowRootOptions = {
|
|
88
|
+
...LitElement.shadowRootOptions,
|
|
89
|
+
delegatesFocus: true,
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
constructor() {
|
|
93
|
+
super()
|
|
94
|
+
try {
|
|
95
|
+
this.internals = this.attachInternals()
|
|
96
|
+
} catch {
|
|
97
|
+
this.internals = undefined
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
get form(): HTMLFormElement | null {
|
|
102
|
+
return this.internals?.form ?? null
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
protected updated(changed: Map<string, unknown>) {
|
|
106
|
+
super.updated?.(changed)
|
|
107
|
+
if (changed.has('checked') || changed.has('value') || changed.has('name')) {
|
|
108
|
+
this.internals?.setFormValue(this.checked ? this.value : null)
|
|
109
|
+
if (this.checked) this.internals?.states.add('checked')
|
|
110
|
+
else this.internals?.states.delete('checked')
|
|
111
|
+
}
|
|
112
|
+
if (changed.has('required') || changed.has('checked')) {
|
|
113
|
+
if (this.required && !this.checked) {
|
|
114
|
+
this.internals?.setValidity({ valueMissing: true }, 'This switch is required.')
|
|
115
|
+
} else {
|
|
116
|
+
this.internals?.setValidity({})
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
formResetCallback() {
|
|
122
|
+
this.checked = this.hasAttribute('checked')
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
formDisabledCallback(disabled: boolean) {
|
|
126
|
+
this.disabled = disabled
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public checkValidity(): boolean {
|
|
130
|
+
return this.internals?.checkValidity() ?? true
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
public reportValidity(): boolean {
|
|
134
|
+
return this.internals?.reportValidity() ?? true
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private _toggle = () => {
|
|
138
|
+
if (this.disabled) return
|
|
139
|
+
this.checked = !this.checked
|
|
140
|
+
this.dispatchEvent(
|
|
141
|
+
new CustomEvent('change', {
|
|
142
|
+
detail: { value: this.checked },
|
|
143
|
+
bubbles: true,
|
|
144
|
+
composed: true,
|
|
145
|
+
}),
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private _onKeydown = (e: KeyboardEvent) => {
|
|
150
|
+
if (e.key === ' ' || e.key === 'Enter') {
|
|
151
|
+
e.preventDefault()
|
|
152
|
+
this._toggle()
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
render() {
|
|
157
|
+
return html`
|
|
158
|
+
<button
|
|
159
|
+
type="button"
|
|
160
|
+
role="switch"
|
|
161
|
+
aria-checked=${this.checked ? 'true' : 'false'}
|
|
162
|
+
aria-label=${this.label || nothing}
|
|
163
|
+
aria-required=${this.required ? 'true' : 'false'}
|
|
164
|
+
?disabled=${this.disabled}
|
|
165
|
+
@click=${this._toggle}
|
|
166
|
+
@keydown=${this._onKeydown}
|
|
167
|
+
>
|
|
168
|
+
<span part="track" class="track">
|
|
169
|
+
<span part="thumb" class="thumb"></span>
|
|
170
|
+
</span>
|
|
171
|
+
</button>
|
|
172
|
+
`
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
declare global {
|
|
177
|
+
interface HTMLElementTagNameMap {
|
|
178
|
+
'schmancy-switch': SchmancySwitch
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import axe, { type ElementContext, type RunOptions, type Result } from 'axe-core'
|
|
2
|
+
import { expect } from 'vitest'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Run axe-core on the given element (or document) and assert no violations.
|
|
6
|
+
* Throws a readable failure with a summary of violations so test output is
|
|
7
|
+
* immediately actionable.
|
|
8
|
+
*
|
|
9
|
+
* Keep the axe rule set minimal and appropriate for component tests — the
|
|
10
|
+
* defaults include many rules that only make sense at the page level (e.g.
|
|
11
|
+
* `region`, `landmark-one-main`). Override via `options.rules` when needed.
|
|
12
|
+
*/
|
|
13
|
+
export async function expectNoA11yViolations(
|
|
14
|
+
context: ElementContext = document.body,
|
|
15
|
+
options: RunOptions = {
|
|
16
|
+
// Exclude page-level rules that don't apply to a component-in-isolation.
|
|
17
|
+
rules: {
|
|
18
|
+
region: { enabled: false },
|
|
19
|
+
'landmark-one-main': { enabled: false },
|
|
20
|
+
'page-has-heading-one': { enabled: false },
|
|
21
|
+
'html-has-lang': { enabled: false },
|
|
22
|
+
'document-title': { enabled: false },
|
|
23
|
+
bypass: { enabled: false },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
): Promise<Result[]> {
|
|
27
|
+
const results = await axe.run(context, options)
|
|
28
|
+
if (results.violations.length > 0) {
|
|
29
|
+
const summary = results.violations
|
|
30
|
+
.map(v => ` • ${v.id} (${v.impact}): ${v.help}\n ${v.helpUrl}`)
|
|
31
|
+
.join('\n')
|
|
32
|
+
expect.fail(`axe-core found ${results.violations.length} a11y violation(s):\n${summary}`)
|
|
33
|
+
}
|
|
34
|
+
return results.violations
|
|
35
|
+
}
|
package/src/textarea/textarea.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement, html } from 'lit'
|
|
1
|
+
import { LitElement, html, nothing, type PropertyValues } from 'lit'
|
|
2
2
|
import { customElement, property, query } from 'lit/decorators.js'
|
|
3
3
|
import { ifDefined } from 'lit/directives/if-defined.js'
|
|
4
4
|
import { createRef, ref } from 'lit/directives/ref.js'
|
|
@@ -30,6 +30,8 @@ export default class SchmancyTextarea extends TailwindElement(style) {
|
|
|
30
30
|
internals: ElementInternals | undefined
|
|
31
31
|
textareaRef = createRef<HTMLTextAreaElement>()
|
|
32
32
|
|
|
33
|
+
private readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`
|
|
34
|
+
|
|
33
35
|
/**
|
|
34
36
|
* The label of the control.
|
|
35
37
|
* @attr
|
|
@@ -179,6 +181,29 @@ export default class SchmancyTextarea extends TailwindElement(style) {
|
|
|
179
181
|
}
|
|
180
182
|
}
|
|
181
183
|
|
|
184
|
+
protected willUpdate(changed: PropertyValues): void {
|
|
185
|
+
super.willUpdate?.(changed)
|
|
186
|
+
if (changed.has('value') || changed.has('name')) {
|
|
187
|
+
this.internals?.setFormValue(this.value ?? '')
|
|
188
|
+
}
|
|
189
|
+
if (changed.has('required') || changed.has('value')) {
|
|
190
|
+
if (this.required && !this.value) {
|
|
191
|
+
this.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')
|
|
192
|
+
} else {
|
|
193
|
+
this.internals?.setValidity({})
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
formResetCallback(): void {
|
|
199
|
+
this.value = this.getAttribute('value') ?? ''
|
|
200
|
+
this.error = false
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
formDisabledCallback(disabled: boolean): void {
|
|
204
|
+
this.disabled = disabled
|
|
205
|
+
}
|
|
206
|
+
|
|
182
207
|
firstUpdated() {
|
|
183
208
|
if (this.autofocus) {
|
|
184
209
|
this.focus()
|
|
@@ -375,6 +400,7 @@ export default class SchmancyTextarea extends TailwindElement(style) {
|
|
|
375
400
|
'w-full min-w-0': true,
|
|
376
401
|
'flex flex-col h-full': this.fillHeight,
|
|
377
402
|
}
|
|
403
|
+
const hintId = `${this._a11yId}-hint`
|
|
378
404
|
return html`
|
|
379
405
|
<div class="${this.classMap(containerClasses)}">
|
|
380
406
|
${when(
|
|
@@ -404,12 +430,16 @@ export default class SchmancyTextarea extends TailwindElement(style) {
|
|
|
404
430
|
rows=${ifDefined(this.rows)}
|
|
405
431
|
wrap=${ifDefined(this.wrap)}
|
|
406
432
|
dirname=${ifDefined(this.dirname)}
|
|
433
|
+
aria-invalid=${this.error ? 'true' : 'false'}
|
|
434
|
+
aria-required=${this.required ? 'true' : 'false'}
|
|
435
|
+
aria-describedby=${this.hint ? hintId : nothing}
|
|
436
|
+
aria-label=${!this.label && this.placeholder ? this.placeholder : nothing}
|
|
407
437
|
></textarea>
|
|
408
438
|
|
|
409
439
|
${when(
|
|
410
440
|
this.hint,
|
|
411
441
|
() => html`
|
|
412
|
-
<div class="mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}">
|
|
442
|
+
<div id=${hintId} class="mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}">
|
|
413
443
|
${this.hint}
|
|
414
444
|
</div>
|
|
415
445
|
`,
|
package/src/tooltip/index.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from './tooltip.directive'
|
|
2
|
-
export * from './tooltip';
|
|
1
|
+
export * from './tooltip.directive'
|
package/src/tree/tree.ts
CHANGED
|
@@ -34,6 +34,22 @@ export class SchmancyTree extends TailwindElement(css`
|
|
|
34
34
|
// Since it's actually a <schmancy-button>, use HTMLElement or a custom type
|
|
35
35
|
@query('#chevron') chevron!: HTMLElement
|
|
36
36
|
|
|
37
|
+
private readonly _a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`
|
|
38
|
+
private get _contentId() { return `${this._a11yId}-content` }
|
|
39
|
+
|
|
40
|
+
/** ElementInternals — broadcasts `:state(open)` for consumer CSS. */
|
|
41
|
+
private readonly _internals: ElementInternals | undefined = (() => {
|
|
42
|
+
try { return this.attachInternals() } catch { return undefined }
|
|
43
|
+
})()
|
|
44
|
+
|
|
45
|
+
updated(changed: Map<string, unknown>) {
|
|
46
|
+
super.updated?.(changed)
|
|
47
|
+
if (changed.has('open')) {
|
|
48
|
+
if (this.open) this._internals?.states.add('open')
|
|
49
|
+
else this._internals?.states.delete('open')
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
37
53
|
firstUpdated() {
|
|
38
54
|
// Hide or show the slot initially based on `open`
|
|
39
55
|
if (!this.open) {
|
|
@@ -116,11 +132,20 @@ export class SchmancyTree extends TailwindElement(css`
|
|
|
116
132
|
|
|
117
133
|
<!-- The chevron or arrow symbol -->
|
|
118
134
|
<!-- Stop propagation on the schmancy-button itself just to avoid double triggers -->
|
|
119
|
-
<schmancy-button
|
|
135
|
+
<schmancy-button
|
|
136
|
+
slot="trailing"
|
|
137
|
+
id="chevron"
|
|
138
|
+
aria-expanded=${this.open ? 'true' : 'false'}
|
|
139
|
+
aria-controls=${this._contentId}
|
|
140
|
+
aria-label=${this.open ? 'Collapse' : 'Expand'}
|
|
141
|
+
@click=${(e: Event) => e.stopPropagation()}
|
|
142
|
+
>
|
|
143
|
+
⌅
|
|
144
|
+
</schmancy-button>
|
|
120
145
|
</div>
|
|
121
146
|
|
|
122
147
|
<!-- The default slot: tree children -->
|
|
123
|
-
<slot></slot>
|
|
148
|
+
<slot id=${this._contentId}></slot>
|
|
124
149
|
`
|
|
125
150
|
}
|
|
126
151
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './visually-hidden'
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { TailwindElement } from '@mixins/index'
|
|
2
|
+
import { css, html } from 'lit'
|
|
3
|
+
import { customElement } from 'lit/decorators.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Hides content visually while keeping it in the accessibility tree. Use for
|
|
7
|
+
* screen-reader-only labels, supplemental descriptions, and live-region text
|
|
8
|
+
* that sighted users don't need to see.
|
|
9
|
+
*
|
|
10
|
+
* Uses the WCAG-recommended clip pattern rather than `display: none` or
|
|
11
|
+
* `visibility: hidden` so assistive tech still reads the content.
|
|
12
|
+
*
|
|
13
|
+
* @element schmancy-visually-hidden
|
|
14
|
+
* @slot - Content hidden from sighted users but exposed to assistive tech.
|
|
15
|
+
*/
|
|
16
|
+
@customElement('schmancy-visually-hidden')
|
|
17
|
+
export class SchmancyVisuallyHidden extends TailwindElement(css`
|
|
18
|
+
:host {
|
|
19
|
+
position: absolute;
|
|
20
|
+
width: 1px;
|
|
21
|
+
height: 1px;
|
|
22
|
+
padding: 0;
|
|
23
|
+
margin: -1px;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
clip: rect(0, 0, 0, 0);
|
|
26
|
+
white-space: nowrap;
|
|
27
|
+
border-width: 0;
|
|
28
|
+
}
|
|
29
|
+
`) {
|
|
30
|
+
render() {
|
|
31
|
+
return html`<slot></slot>`
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare global {
|
|
36
|
+
interface HTMLElementTagNameMap {
|
|
37
|
+
'schmancy-visually-hidden': SchmancyVisuallyHidden
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -11,10 +11,9 @@
|
|
|
11
11
|
* // → { left: 144, top: 444, width: 360, height: 500 } (cascaded away from conflict)
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import type { WindowBounds, WindowRecord
|
|
14
|
+
import type { WindowBounds, WindowRecord } from './window-registry.js'
|
|
15
15
|
|
|
16
16
|
const HEAD_HEIGHT = 44
|
|
17
|
-
const EDGE_GAP = 16
|
|
18
17
|
const CASCADE_OFFSET = HEAD_HEIGHT
|
|
19
18
|
const MAX_CASCADE_ATTEMPTS = 10
|
|
20
19
|
|
|
@@ -48,41 +47,6 @@ export function resolveOverlap(
|
|
|
48
47
|
return clampToViewport(bounds, viewport)
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
/**
|
|
52
|
-
* Snap window bounds to a corner with standard edge gap.
|
|
53
|
-
*/
|
|
54
|
-
export function snapToCorner(
|
|
55
|
-
bounds: WindowBounds,
|
|
56
|
-
corner: SnapCorner,
|
|
57
|
-
viewport: { width: number; height: number },
|
|
58
|
-
bottomOffset: number,
|
|
59
|
-
): WindowBounds {
|
|
60
|
-
const isRight = corner.includes('right')
|
|
61
|
-
const isBottom = corner.includes('bottom')
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
width: bounds.width,
|
|
65
|
-
height: bounds.height,
|
|
66
|
-
left: isRight ? viewport.width - bounds.width - EDGE_GAP : EDGE_GAP,
|
|
67
|
-
top: isBottom ? viewport.height - bounds.height - EDGE_GAP - bottomOffset : EDGE_GAP,
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Place a window flush beside a neighbor.
|
|
73
|
-
*/
|
|
74
|
-
export function snapToNeighbor(
|
|
75
|
-
bounds: WindowBounds,
|
|
76
|
-
neighbor: WindowBounds,
|
|
77
|
-
side: 'left' | 'right',
|
|
78
|
-
): WindowBounds {
|
|
79
|
-
return {
|
|
80
|
-
...bounds,
|
|
81
|
-
left: side === 'right' ? neighbor.left + neighbor.width + EDGE_GAP : neighbor.left - bounds.width - EDGE_GAP,
|
|
82
|
-
top: neighbor.top,
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
50
|
/**
|
|
87
51
|
* Clamp bounds so the window stays fully within the viewport.
|
|
88
52
|
*/
|
|
@@ -97,40 +61,3 @@ export function clampToViewport(
|
|
|
97
61
|
top: Math.max(0, Math.min(bounds.top, viewport.height - bounds.height)),
|
|
98
62
|
}
|
|
99
63
|
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Convert corner-relative offset (used by the old float) to absolute viewport bounds.
|
|
103
|
-
*/
|
|
104
|
-
export function cornerOffsetToAbsolute(
|
|
105
|
-
corner: SnapCorner,
|
|
106
|
-
offset: { x: number; y: number },
|
|
107
|
-
size: { width: number; height: number },
|
|
108
|
-
viewport: { width: number; height: number },
|
|
109
|
-
bottomOffset: number,
|
|
110
|
-
): WindowBounds {
|
|
111
|
-
const isRight = corner.includes('right')
|
|
112
|
-
const isBottom = corner.includes('bottom')
|
|
113
|
-
return {
|
|
114
|
-
width: size.width,
|
|
115
|
-
height: size.height,
|
|
116
|
-
left: isRight ? viewport.width - offset.x - size.width : offset.x,
|
|
117
|
-
top: isBottom ? viewport.height - offset.y - size.height - bottomOffset : offset.y,
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Convert absolute viewport bounds back to corner-relative offset.
|
|
123
|
-
*/
|
|
124
|
-
export function absoluteToCornerOffset(
|
|
125
|
-
corner: SnapCorner,
|
|
126
|
-
bounds: WindowBounds,
|
|
127
|
-
viewport: { width: number; height: number },
|
|
128
|
-
bottomOffset: number,
|
|
129
|
-
): { x: number; y: number } {
|
|
130
|
-
const isRight = corner.includes('right')
|
|
131
|
-
const isBottom = corner.includes('bottom')
|
|
132
|
-
return {
|
|
133
|
-
x: isRight ? viewport.width - bounds.left - bounds.width : bounds.left,
|
|
134
|
-
y: isBottom ? viewport.height - bounds.top - bounds.height - bottomOffset : bounds.top,
|
|
135
|
-
}
|
|
136
|
-
}
|
|
@@ -2,6 +2,12 @@ import { CSSResult, LitElement } from 'lit';
|
|
|
2
2
|
import { IBaseMixin } from './baseElement';
|
|
3
3
|
import { Constructor } from './constructor';
|
|
4
4
|
import { ITailwindElementMixin } from './tailwind.mixin';
|
|
5
|
+
/**
|
|
6
|
+
* Cross-realm brand used by `<schmancy-form>` to discover form fields by
|
|
7
|
+
* inheritance rather than tag-name allowlists. `Symbol.for` puts the symbol in
|
|
8
|
+
* the global registry so detection works across module realms/bundles.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SCHMANCY_FORM_FIELD: unique symbol;
|
|
5
11
|
/**
|
|
6
12
|
* Interface defining the properties and methods that the FormFieldMixin adds.
|
|
7
13
|
*/
|
|
@@ -20,11 +26,19 @@ export interface IFormFieldMixin extends Element {
|
|
|
20
26
|
checkValidity(): boolean;
|
|
21
27
|
reportValidity(): boolean;
|
|
22
28
|
setCustomValidity(message: string): void;
|
|
29
|
+
toFormEntries(): Array<[string, FormDataEntryValue]>;
|
|
30
|
+
resetForm(): void;
|
|
23
31
|
emitChange(detail: any): void;
|
|
24
32
|
}
|
|
33
|
+
/** Predicate used by `<schmancy-form>` to detect mixin descendants. */
|
|
34
|
+
export declare function isSchmancyFormField(el: unknown): el is IFormFieldMixin;
|
|
25
35
|
/**
|
|
26
36
|
* A mixin that adds form field capabilities to a LitElement class.
|
|
27
|
-
*
|
|
37
|
+
* Components that extend this mixin are automatically discovered and
|
|
38
|
+
* collected by `<schmancy-form>` — no tag-name registration needed.
|
|
39
|
+
*
|
|
40
|
+
* Subclasses may override `toFormEntries()` to contribute multiple
|
|
41
|
+
* name/value pairs to FormData (e.g. date-range, tag-input).
|
|
28
42
|
*
|
|
29
43
|
* @example
|
|
30
44
|
* ```ts
|
|
@@ -37,12 +51,5 @@ export declare function FormFieldMixin<T extends Constructor<LitElement>>(superC
|
|
|
37
51
|
/**
|
|
38
52
|
* A convenience function that composes FormFieldMixin with TailwindElement
|
|
39
53
|
* to create a base class for Schmancy form components.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```ts
|
|
43
|
-
* class MyInput extends SchmancyFormField(css`...`) {
|
|
44
|
-
* // Your component code here
|
|
45
|
-
* }
|
|
46
|
-
* ```
|
|
47
54
|
*/
|
|
48
55
|
export declare function SchmancyFormField<T extends CSSResult>(componentStyle?: T): Constructor<IFormFieldMixin> & Constructor<ITailwindElementMixin> & Constructor<LitElement> & Constructor<IBaseMixin>;
|
|
@@ -41,8 +41,6 @@ export type ConnectedFeeling = 'connected' | 'accepted' | 'included' | 'belongin
|
|
|
41
41
|
export type MixedFeeling = 'conflicted' | 'confused' | 'ambivalent' | 'nostalgic' | 'guilty' | 'embarrassed' | 'surprised' | 'shocked' | 'awestruck' | 'skeptical';
|
|
42
42
|
/** All feelings */
|
|
43
43
|
export type Feeling = HappyFeeling | SadFeeling | AnxiousFeeling | AngryFeeling | TiredFeeling | CalmFeeling | ConnectedFeeling | MixedFeeling;
|
|
44
|
-
/** Feeling category */
|
|
45
|
-
export type FeelingCategory = 'happy' | 'sad' | 'anxious' | 'angry' | 'tired' | 'calm' | 'connected' | 'mixed';
|
|
46
44
|
/**
|
|
47
45
|
* Emotional Sound Generator
|
|
48
46
|
* Creates soft, beautiful sounds using Web Audio API
|
|
@@ -17,6 +17,12 @@ declare const SchmancyAutocomplete_base: CustomElementConstructor & import("@mix
|
|
|
17
17
|
* @prop {string[]} values - Selected values (multi-select mode)
|
|
18
18
|
*/
|
|
19
19
|
export default class SchmancyAutocomplete extends SchmancyAutocomplete_base {
|
|
20
|
+
static formAssociated: boolean;
|
|
21
|
+
internals: ElementInternals | undefined;
|
|
22
|
+
constructor();
|
|
23
|
+
get form(): HTMLFormElement | null;
|
|
24
|
+
formResetCallback(): void;
|
|
25
|
+
formDisabledCallback(disabled: boolean): void;
|
|
20
26
|
_valueSet: boolean;
|
|
21
27
|
_valuesSet: boolean;
|
|
22
28
|
required: boolean;
|
|
@@ -32,6 +38,7 @@ export default class SchmancyAutocomplete extends SchmancyAutocomplete_base {
|
|
|
32
38
|
similarityThreshold: number;
|
|
33
39
|
error: boolean;
|
|
34
40
|
validationMessage: string;
|
|
41
|
+
private readonly _a11yId;
|
|
35
42
|
get values(): string[];
|
|
36
43
|
set values(vals: string[]);
|
|
37
44
|
get value(): string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
declare const SchmancyBreadcrumb_base: import("@mixins/index").Constructor<CustomElementConstructor> & import("@mixins/index").Constructor<import("@mixins/index").ITailwindElementMixin> & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
2
|
+
/**
|
|
3
|
+
* Breadcrumb navigation container. Wraps a list of `schmancy-breadcrumb-item`
|
|
4
|
+
* elements with the correct ARIA landmark and semantics.
|
|
5
|
+
*
|
|
6
|
+
* @element schmancy-breadcrumb
|
|
7
|
+
* @slot - Default slot for `<schmancy-breadcrumb-item>` children.
|
|
8
|
+
* @attr separator - Character or string rendered between items. Default `/`.
|
|
9
|
+
* @csspart separator - The separator element.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SchmancyBreadcrumb extends SchmancyBreadcrumb_base {
|
|
12
|
+
separator: string;
|
|
13
|
+
connectedCallback(): void;
|
|
14
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
15
|
+
private _insertSeparators;
|
|
16
|
+
}
|
|
17
|
+
declare const SchmancyBreadcrumbItem_base: import("@mixins/index").Constructor<CustomElementConstructor> & import("@mixins/index").Constructor<import("@mixins/index").ITailwindElementMixin> & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
18
|
+
/**
|
|
19
|
+
* Individual breadcrumb item. Renders as a link when `href` is provided,
|
|
20
|
+
* otherwise as a plain span (represents the current page).
|
|
21
|
+
*
|
|
22
|
+
* @element schmancy-breadcrumb-item
|
|
23
|
+
* @slot - Label content.
|
|
24
|
+
* @attr href - If set, renders as an anchor.
|
|
25
|
+
* @attr current - Marks as `aria-current="page"`.
|
|
26
|
+
*/
|
|
27
|
+
export declare class SchmancyBreadcrumbItem extends SchmancyBreadcrumbItem_base {
|
|
28
|
+
href: string;
|
|
29
|
+
current: boolean;
|
|
30
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
31
|
+
}
|
|
32
|
+
declare global {
|
|
33
|
+
interface HTMLElementTagNameMap {
|
|
34
|
+
'schmancy-breadcrumb': SchmancyBreadcrumb;
|
|
35
|
+
'schmancy-breadcrumb-item': SchmancyBreadcrumbItem;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './breadcrumb';
|