@mhmo91/schmancy 0.10.15 → 0.10.16
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 +2554 -3086
- package/dist/active-host-BP0zy_Y9.js +63 -0
- package/dist/{active-host-CvNYoprt.js.map → active-host-BP0zy_Y9.js.map} +1 -1
- package/dist/active-host-jH3iloCR.cjs +1 -0
- package/dist/{active-host-CcIa2tmW.cjs.map → active-host-jH3iloCR.cjs.map} +1 -1
- package/dist/agent/schmancy.agent.js +2579 -2385
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +971 -1189
- package/dist/{animation-CO_Csq84.cjs.map → animation-CCOIW4wJ.cjs.map} +1 -1
- package/dist/{animation-BK-8BwY8.js.map → animation-DCznELuT.js.map} +1 -1
- package/dist/{area-C_kgZZhN.js → area-ChxsDTu_.js} +2 -2
- package/dist/{area-C_kgZZhN.js.map → area-ChxsDTu_.js.map} +1 -1
- package/dist/{area-DFPtKzWy.cjs → area-Qt6yUnuA.cjs} +3 -3
- package/dist/{area-DFPtKzWy.cjs.map → area-Qt6yUnuA.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +2 -2
- package/dist/{audio-CluX8Qpq.cjs → audio-D-TZzpXF.cjs} +1 -1
- package/dist/{audio-CluX8Qpq.cjs.map → audio-D-TZzpXF.cjs.map} +1 -1
- package/dist/{audio-DcXphulJ.js → audio-DS43uoRA.js} +1 -1
- package/dist/{audio-DcXphulJ.js.map → audio-DS43uoRA.js.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/{autocomplete-DWSuwSRS.js → autocomplete-CXvUjMD-.js} +46 -71
- package/dist/autocomplete-CXvUjMD-.js.map +1 -0
- package/dist/autocomplete-Ck2zbdF9.cjs +115 -0
- package/dist/autocomplete-Ck2zbdF9.cjs.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +3 -3
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-CZma2ojF.js → boat-Bj0wVcZi.js} +5 -5
- package/dist/{boat-CZma2ojF.js.map → boat-Bj0wVcZi.js.map} +1 -1
- package/dist/{boat-Dy6cc3hB.cjs → boat-DpFkILFF.cjs} +2 -2
- package/dist/{boat-Dy6cc3hB.cjs.map → boat-DpFkILFF.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +3 -3
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +2 -2
- package/dist/{busy-DCsqryvq.cjs → busy-CtcnclA3.cjs} +3 -3
- package/dist/{busy-DCsqryvq.cjs.map → busy-CtcnclA3.cjs.map} +1 -1
- package/dist/{busy-DeV2ByMw.js → busy-CyZSBnZP.js} +2 -2
- package/dist/{busy-DeV2ByMw.js.map → busy-CyZSBnZP.js.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 +19 -4
- package/dist/button.js.map +1 -1
- package/dist/{card--GgSX4X5.cjs → card-Cl6jp1yX.cjs} +5 -5
- package/dist/{card--GgSX4X5.cjs.map → card-Cl6jp1yX.cjs.map} +1 -1
- package/dist/{card-BTTsHzJJ.js → card-nYZCKmOO.js} +3 -3
- package/dist/{card-BTTsHzJJ.js.map → card-nYZCKmOO.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-NNReP9s_.cjs → checkbox-BeNo0ZGt.cjs} +4 -4
- package/dist/{checkbox-Cj5j-ppk.js.map → checkbox-BeNo0ZGt.cjs.map} +1 -1
- package/dist/{checkbox-Cj5j-ppk.js → checkbox-DiUrZiyc.js} +17 -30
- package/dist/checkbox-DiUrZiyc.js.map +1 -0
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-CP-CbfoZ.js → chips-CfPFXv7Z.js} +5 -5
- package/dist/{chips-CP-CbfoZ.js.map → chips-CfPFXv7Z.js.map} +1 -1
- package/dist/{chips-iporOXxK.cjs → chips-DK6m-VCM.cjs} +5 -5
- package/dist/{chips-iporOXxK.cjs.map → chips-DK6m-VCM.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +2 -2
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +3 -3
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{context-DJTJnSK4.js.map → context-6oXCZmZN.js.map} +1 -1
- package/dist/{context-BpCETidA.cjs.map → context-CRZeiCqq.cjs.map} +1 -1
- package/dist/{cursor-glow-Bulq-38P.cjs → cursor-glow-C8LgCxpI.cjs} +1 -1
- package/dist/{cursor-glow-Bulq-38P.cjs.map → cursor-glow-C8LgCxpI.cjs.map} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js → cursor-glow-Cs2XLDB9.js} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js.map → cursor-glow-Cs2XLDB9.js.map} +1 -1
- package/dist/date-range-DA6anfcF.cjs +131 -0
- package/dist/date-range-DA6anfcF.cjs.map +1 -0
- package/dist/{date-range-CgNujP8r.js → date-range-DjlF2u7o.js} +124 -89
- package/dist/date-range-DjlF2u7o.js.map +1 -0
- package/dist/date-range-inline-BfYK795W.cjs +43 -0
- package/dist/{date-range-inline-D4IjOOO0.cjs.map → date-range-inline-BfYK795W.cjs.map} +1 -1
- package/dist/{date-range-inline-C2PXX_GY.js → date-range-inline-n7y_H6PJ.js} +2 -2
- package/dist/{date-range-inline-C2PXX_GY.js.map → date-range-inline-n7y_H6PJ.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay.cjs +2 -2
- package/dist/delay.cjs.map +1 -1
- package/dist/delay.js +3 -3
- package/dist/{details-DT2b3xOn.cjs → details-BdAVsLl-.cjs} +2 -2
- package/dist/{details-DT2b3xOn.cjs.map → details-BdAVsLl-.cjs.map} +1 -1
- package/dist/{details-VjaNwtfd.js → details-CS_ToAOj.js} +6 -6
- package/dist/{details-VjaNwtfd.js.map → details-CS_ToAOj.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +5 -5
- package/dist/{divider-BMO8pzEO.js → divider-COLK0RbT.js} +2 -2
- package/dist/{divider-BMO8pzEO.js.map → divider-COLK0RbT.js.map} +1 -1
- package/dist/{divider-BW33TZ-X.cjs → divider-CvWAnvdO.cjs} +2 -2
- package/dist/{divider-BW33TZ-X.cjs.map → divider-CvWAnvdO.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +3 -3
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-DbELKKOt.js → expand-D9LzmpoV.js} +5 -5
- package/dist/{expand-DbELKKOt.js.map → expand-D9LzmpoV.js.map} +1 -1
- package/dist/{expand-_f5EUKWB.cjs → expand-r2sATPUJ.cjs} +3 -3
- package/dist/{expand-_f5EUKWB.cjs.map → expand-r2sATPUJ.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/float-2nHYuBx-.cjs +1 -0
- package/dist/{float-CKmd-0-t.cjs.map → float-2nHYuBx-.cjs.map} +1 -1
- package/dist/{float-B6RBb2dN.js → float-BWy39CXr.js} +2 -2
- package/dist/{float-B6RBb2dN.js.map → float-BWy39CXr.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/form-DhjedCWm.js +258 -0
- package/dist/form-DhjedCWm.js.map +1 -0
- package/dist/form-g5c70rac.cjs +42 -0
- package/dist/form-g5c70rac.cjs.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +2 -2
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-Bobsobip.cjs.map → hashContent-Ck6laKlk.cjs.map} +1 -1
- package/dist/{hashContent-BU6jl5ih.js.map → hashContent-dJrI-9sc.js.map} +1 -1
- package/dist/{icons-r-S17M8U.cjs → icons-1HIENBco.cjs} +2 -2
- package/dist/{icons-r-S17M8U.cjs.map → icons-1HIENBco.cjs.map} +1 -1
- package/dist/{icons-CoDo95Cu.js → icons-3y0kr1aB.js} +3 -3
- package/dist/{icons-CoDo95Cu.js.map → icons-3y0kr1aB.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-P9c_qg1-.cjs → iframe-CjqYuZG5.cjs} +2 -2
- package/dist/{iframe-P9c_qg1-.cjs.map → iframe-CjqYuZG5.cjs.map} +1 -1
- package/dist/{iframe-k4oI-TIj.js → iframe-Z5gTK-gd.js} +2 -2
- package/dist/{iframe-k4oI-TIj.js.map → iframe-Z5gTK-gd.js.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 +60 -60
- package/dist/{input-D95GjINh.js → input-B-fw6f_r.js} +103 -104
- package/dist/input-B-fw6f_r.js.map +1 -0
- package/dist/input-BtcIhu0Q.cjs +52 -0
- package/dist/input-BtcIhu0Q.cjs.map +1 -0
- package/dist/{input-chip-DpC_XEKN.js → input-chip-CtQ0pH5b.js} +2 -2
- package/dist/{input-chip-DpC_XEKN.js.map → input-chip-CtQ0pH5b.js.map} +1 -1
- package/dist/{input-chip-D0ZXqTt5.cjs → input-chip-DZktYohr.cjs} +2 -2
- package/dist/{input-chip-D0ZXqTt5.cjs.map → input-chip-DZktYohr.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +2 -2
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +3 -3
- package/dist/kbd.cjs +2 -2
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +2 -2
- package/dist/{layout-CXPNsUIo.js → layout-BH28sKGc.js} +1 -1
- package/dist/{layout-CXPNsUIo.js.map → layout-BH28sKGc.js.map} +1 -1
- package/dist/{layout-Zhe7wSZ_.cjs → layout-Delq-QvR.cjs} +1 -1
- package/dist/{layout-Zhe7wSZ_.cjs.map → layout-Delq-QvR.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{lazy-Dq9mRRjT.cjs.map → lazy-CayEFyC3.cjs.map} +1 -1
- package/dist/{lazy-B0ia54tT.js.map → lazy-D-bO2r4m.js.map} +1 -1
- package/dist/{lightbox-C-yHeoK0.cjs → lightbox-BHTZOn8K.cjs} +3 -3
- package/dist/{lightbox-C-yHeoK0.cjs.map → lightbox-BHTZOn8K.cjs.map} +1 -1
- package/dist/{lightbox-CovQtmyn.js → lightbox-BL3LWp-P.js} +9 -9
- package/dist/{lightbox-CovQtmyn.js.map → lightbox-BL3LWp-P.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CAijuky4.cjs → list-CHYa5VGY.cjs} +3 -3
- package/dist/{list-CAijuky4.cjs.map → list-CHYa5VGY.cjs.map} +1 -1
- package/dist/{list-C1pR9vhu.js → list-DLJL1JQj.js} +2 -2
- package/dist/{list-C1pR9vhu.js.map → list-DLJL1JQj.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{magnetic-BJgB1dVi.cjs → magnetic-Bgh7aHHI.cjs} +1 -1
- package/dist/{magnetic-BJgB1dVi.cjs.map → magnetic-Bgh7aHHI.cjs.map} +1 -1
- package/dist/{magnetic-YwCNvtbB.js → magnetic-DxvoEz8_.js} +2 -2
- package/dist/{magnetic-YwCNvtbB.js.map → magnetic-DxvoEz8_.js.map} +1 -1
- package/dist/{menu-B59vZv9n.js → menu-BNq93w6X.js} +3 -3
- package/dist/{menu-B59vZv9n.js.map → menu-BNq93w6X.js.map} +1 -1
- package/dist/{menu-BaHO3Cip.cjs → menu-DAikvkeV.cjs} +3 -3
- package/dist/{menu-BaHO3Cip.cjs.map → menu-DAikvkeV.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-BOOu6q2n.cjs +298 -0
- package/dist/mixins-BOOu6q2n.cjs.map +1 -0
- package/dist/mixins-BWb9_e1s.js +680 -0
- package/dist/mixins-BWb9_e1s.js.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -2
- 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-BeLoVa47.js → notification-CUmb9c3Y.js} +4 -4
- package/dist/{notification-BeLoVa47.js.map → notification-CUmb9c3Y.js.map} +1 -1
- package/dist/notification-Dy2azMyt.cjs +23 -0
- package/dist/{notification-BC9nG8Sr.cjs.map → notification-Dy2azMyt.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BWF4GBp-.cjs → option-CDgIKifG.cjs} +2 -2
- package/dist/{option-BWF4GBp-.cjs.map → option-CDgIKifG.cjs.map} +1 -1
- package/dist/{option-UvlSAcC4.js → option-DFvQ551b.js} +2 -2
- package/dist/{option-UvlSAcC4.js.map → option-DFvQ551b.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-DCDS17uj.js.map → overlay-stack-BR4iYivO.js.map} +1 -1
- package/dist/{overlay-stack-DPIe_aYv.cjs.map → overlay-stack-Dk0xETTy.cjs.map} +1 -1
- package/dist/overlay.cjs +2 -2
- package/dist/overlay.cjs.map +1 -1
- package/dist/{overlay.confirm-body-URtE1gI3.cjs → overlay.confirm-body-BkhNvr0c.cjs} +2 -2
- package/dist/{overlay.confirm-body-URtE1gI3.cjs.map → overlay.confirm-body-BkhNvr0c.cjs.map} +1 -1
- package/dist/{overlay.confirm-body-9W0B5QGv.js → overlay.confirm-body-uFp-0Zfh.js} +2 -2
- package/dist/{overlay.confirm-body-9W0B5QGv.js.map → overlay.confirm-body-uFp-0Zfh.js.map} +1 -1
- package/dist/overlay.js +8 -8
- package/dist/{overlay.service-DnZTcKyJ.cjs → overlay.service-1YWfUD2S.cjs} +1 -1
- package/dist/{overlay.service-DnZTcKyJ.cjs.map → overlay.service-1YWfUD2S.cjs.map} +1 -1
- package/dist/{overlay.service-CVqs2Gu1.js → overlay.service-BcF12kGb.js} +2 -2
- package/dist/{overlay.service-CVqs2Gu1.js.map → overlay.service-BcF12kGb.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-CwzwY8Oe.cjs → progress-C02sWkmE.cjs} +2 -2
- package/dist/{progress-CwzwY8Oe.cjs.map → progress-C02sWkmE.cjs.map} +1 -1
- package/dist/{progress-C29Uw-WJ.js → progress-bLbGRuQ1.js} +2 -2
- package/dist/{progress-C29Uw-WJ.js.map → progress-bLbGRuQ1.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/radio-group-BA-jRct5.cjs +40 -0
- package/dist/radio-group-BA-jRct5.cjs.map +1 -0
- package/dist/{radio-group-CW8airhZ.js → radio-group-DA4eIGCj.js} +4 -4
- package/dist/radio-group-DA4eIGCj.js.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +6 -4
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +19 -15
- package/dist/range.js.map +1 -1
- package/dist/{reduced-motion-D-L12p7G.js.map → reduced-motion-D7LqTUMn.js.map} +1 -1
- package/dist/{reduced-motion-Ds-HjMzn.cjs.map → reduced-motion-Dzfp_w5x.cjs.map} +1 -1
- package/dist/{rxjs-utils-CVeJQ9KG.js.map → rxjs-utils-D9U4MW0Q.js.map} +1 -1
- package/dist/{rxjs-utils-DCUHg_Ml.cjs.map → rxjs-utils-kWPShgKu.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-BotoGcMU.js → scroll-CG5up5oy.js} +2 -2
- package/dist/{scroll-BotoGcMU.js.map → scroll-CG5up5oy.js.map} +1 -1
- package/dist/{scroll-CmhmUebp.cjs → scroll-D8vBF_gY.cjs} +2 -2
- package/dist/{scroll-CmhmUebp.cjs.map → scroll-D8vBF_gY.cjs.map} +1 -1
- package/dist/{search-BLCRsxIC.cjs.map → search-DPKoC-dT.cjs.map} +1 -1
- package/dist/{search-BTz7-Rev.js.map → search-MvIBA93K.js.map} +1 -1
- package/dist/{select-Dbn-CImU.js → select-BrK1BJoU.js} +52 -73
- package/dist/select-BrK1BJoU.js.map +1 -0
- package/dist/select-Dh2j7Qc-.cjs +56 -0
- package/dist/select-Dh2j7Qc-.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +2 -2
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +2 -2
- package/dist/skills/autocomplete.md +16 -3
- package/dist/skills/button.md +19 -0
- package/dist/skills/checkbox.md +19 -0
- package/dist/skills/date-range.md +19 -0
- package/dist/skills/form-ux-rules.md +55 -0
- package/dist/skills/form.md +121 -25
- package/dist/skills/input.md +19 -4
- package/dist/skills/range.md +15 -1
- package/dist/skills/schmancy/autocomplete.md +16 -3
- package/dist/skills/schmancy/button.md +19 -0
- package/dist/skills/schmancy/checkbox.md +19 -0
- package/dist/skills/schmancy/date-range.md +19 -0
- package/dist/skills/schmancy/form-ux-rules.md +55 -0
- package/dist/skills/schmancy/form.md +121 -25
- package/dist/skills/schmancy/input.md +19 -4
- package/dist/skills/schmancy/range.md +15 -1
- package/dist/skills/schmancy/select.md +13 -1
- package/dist/skills/schmancy/switch.md +21 -2
- package/dist/skills/schmancy/textarea.md +13 -0
- package/dist/skills/select.md +13 -1
- package/dist/skills/switch.md +21 -2
- package/dist/skills/textarea.md +13 -0
- package/dist/slider.cjs +3 -3
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-kKfsN0m-.js → sound.service-BIN2W7Rv.js} +1 -1
- package/dist/{sound.service-kKfsN0m-.js.map → sound.service-BIN2W7Rv.js.map} +1 -1
- package/dist/{sound.service-BGs6m0Cm.cjs → sound.service-DyY78ukR.cjs} +1 -1
- package/dist/{sound.service-BGs6m0Cm.cjs.map → sound.service-DyY78ukR.cjs.map} +1 -1
- package/dist/{splash-screen-DtkjCJYo.js → splash-screen-BcjjJSlK.js} +2 -2
- package/dist/{splash-screen-DtkjCJYo.js.map → splash-screen-BcjjJSlK.js.map} +1 -1
- package/dist/{splash-screen-DlQUv-kV.cjs → splash-screen-Kr1sPtME.cjs} +2 -2
- package/dist/{splash-screen-DlQUv-kV.cjs.map → splash-screen-Kr1sPtME.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-DEUjlTsX.cjs → src-B2-CU8fu.cjs} +11 -11
- package/dist/{src-DEUjlTsX.cjs.map → src-B2-CU8fu.cjs.map} +1 -1
- package/dist/{src-D6e0adHi.js → src-DvywUq7l.js} +38 -38
- package/dist/{src-D6e0adHi.js.map → src-DvywUq7l.js.map} +1 -1
- package/dist/state-avic94Ft.cjs +1 -0
- package/dist/{state-DNdCPITt.cjs.map → state-avic94Ft.cjs.map} +1 -1
- package/dist/{state-BusMG6sM.js → state-nm8yzMPp.js} +1 -2
- package/dist/{state-BusMG6sM.js.map → state-nm8yzMPp.js.map} +1 -1
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +3 -3
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +2 -2
- package/dist/{surface-A82O1kgu.js → surface-BtMMHKol.js} +2 -2
- package/dist/{surface-A82O1kgu.js.map → surface-BtMMHKol.js.map} +1 -1
- package/dist/surface-CgXeKdGL.cjs +7 -0
- package/dist/{surface-BpppoNXN.cjs.map → surface-CgXeKdGL.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +3 -3
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +27 -43
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +3 -3
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +2 -2
- package/dist/{tabs-cVHHd1dY.js → tabs-CikPr7by.js} +2 -2
- package/dist/{tabs-cVHHd1dY.js.map → tabs-CikPr7by.js.map} +1 -1
- package/dist/{tabs-TO3UiBsm.cjs → tabs-CitVls3_.cjs} +2 -2
- package/dist/{tabs-TO3UiBsm.cjs.map → tabs-CitVls3_.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/textarea-CqV1wvmB.cjs +43 -0
- package/dist/textarea-CqV1wvmB.cjs.map +1 -0
- package/dist/textarea-DVkwQSis.js +186 -0
- package/dist/textarea-DVkwQSis.js.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-CT408FqH.js → theme-BIWS4TOW.js} +9 -9
- package/dist/{theme-CT408FqH.js.map → theme-BIWS4TOW.js.map} +1 -1
- package/dist/theme-DMgjiKda.cjs +181 -0
- package/dist/{theme-CpuF3D3q.cjs.map → theme-DMgjiKda.cjs.map} +1 -1
- package/dist/{theme-button-pTb5-Wxx.js → theme-button-DC_shZ_7.js} +2 -2
- package/dist/{theme-button-pTb5-Wxx.js.map → theme-button-DC_shZ_7.js.map} +1 -1
- package/dist/theme-button-ENKa3TPT.cjs +8 -0
- package/dist/{theme-button-B6Xf-EiH.cjs.map → theme-button-ENKa3TPT.cjs.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.interface-B9TjbSBF.js.map → theme.interface-C8OHheXg.js.map} +1 -1
- package/dist/{theme.interface-BujperTo.cjs.map → theme.interface-CYo4UpWK.cjs.map} +1 -1
- package/dist/theme.js +4 -4
- package/dist/{theme.service-DIUo1mBP.js → theme.service-BOWIT_5k.js} +1 -1
- package/dist/{theme.service-DIUo1mBP.js.map → theme.service-BOWIT_5k.js.map} +1 -1
- package/dist/{theme.service-Cfk88qHK.cjs → theme.service-DkdH1t60.cjs} +1 -1
- package/dist/{theme.service-Cfk88qHK.cjs.map → theme.service-DkdH1t60.cjs.map} +1 -1
- package/dist/tree.cjs +2 -2
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +2 -2
- package/dist/typography.cjs +2 -2
- package/dist/typography.cjs.map +1 -1
- package/dist/typography.js +2 -2
- package/dist/{utils-kND2Z9Xg.js → utils-Cj_nRRyx.js} +2 -2
- package/dist/{utils-kND2Z9Xg.js.map → utils-Cj_nRRyx.js.map} +1 -1
- package/dist/{utils-Dt5PpmaQ.cjs → utils-D2QUu4-g.cjs} +1 -1
- package/dist/{utils-Dt5PpmaQ.cjs.map → utils-D2QUu4-g.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +4 -4
- package/dist/visually-hidden.cjs +2 -2
- package/dist/visually-hidden.cjs.map +1 -1
- package/dist/visually-hidden.js +2 -2
- package/dist/{window-CuBcOxbc.js → window-BTecgE_U.js} +7 -7
- package/dist/{window-CuBcOxbc.js.map → window-BTecgE_U.js.map} +1 -1
- package/dist/{window-CSKvv4Ts.cjs → window-DGydMS0g.cjs} +2 -2
- package/dist/{window-CSKvv4Ts.cjs.map → window-DGydMS0g.cjs.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/autocomplete.md +16 -3
- package/skills/schmancy/button.md +19 -0
- package/skills/schmancy/checkbox.md +19 -0
- package/skills/schmancy/date-range.md +19 -0
- package/skills/schmancy/form-ux-rules.md +55 -0
- package/skills/schmancy/form.md +121 -25
- package/skills/schmancy/input.md +19 -4
- package/skills/schmancy/range.md +15 -1
- package/skills/schmancy/select.md +13 -1
- package/skills/schmancy/switch.md +21 -2
- package/skills/schmancy/textarea.md +13 -0
- package/src/button/button.test.ts +122 -0
- package/src/button/button.ts +36 -0
- package/src/{autocomplete → form/fields/autocomplete}/autocomplete.ts +48 -75
- package/src/{checkbox → form/fields/checkbox}/checkbox.test.ts +1 -1
- package/src/form/fields/checkbox/checkbox.ts +126 -0
- package/src/form/fields/date-range/date-range.test.ts +102 -0
- package/src/{date-range → form/fields/date-range}/date-range.ts +90 -7
- package/src/form/fields/input/input.test.ts +201 -0
- package/src/{input → form/fields/input}/input.ts +153 -238
- package/src/{radio-group → form/fields/radio-group}/radio-button.ts +1 -1
- package/src/{radio-group → form/fields/radio-group}/radio-group.ts +1 -1
- package/src/form/fields/range/range.test.ts +90 -0
- package/src/{range → form/fields/range}/range.ts +34 -13
- package/src/{select → form/fields/select}/select.ts +77 -108
- package/src/{switch → form/fields/switch}/switch.test.ts +1 -1
- package/src/{switch → form/fields/switch}/switch.ts +71 -51
- package/src/form/fields/textarea/textarea.test.ts +54 -0
- package/src/{textarea → form/fields/textarea}/textarea.ts +33 -72
- package/src/form/form-state.ts +31 -0
- package/src/form/form-summary.test.ts +105 -0
- package/src/form/form-summary.ts +171 -0
- package/src/form/form.test.ts +218 -35
- package/src/form/form.ts +330 -99
- package/src/form/index.ts +2 -0
- package/src/index.ts +9 -9
- package/types/mixins/formField.mixin.d.ts +90 -0
- package/types/src/button/button.d.ts +9 -0
- package/types/src/button/button.test.d.ts +3 -0
- package/types/src/{autocomplete → form/fields/autocomplete}/autocomplete.d.ts +6 -15
- package/types/src/form/fields/checkbox/checkbox.d.ts +47 -0
- package/types/src/{date-range → form/fields/date-range}/date-range.d.ts +22 -4
- package/types/src/form/fields/date-range/date-range.test.d.ts +1 -0
- package/types/src/{input → form/fields/input}/input.d.ts +20 -45
- package/types/src/form/fields/input/input.test.d.ts +1 -0
- package/types/src/{radio-group → form/fields/radio-group}/radio-button.d.ts +1 -1
- package/types/src/{radio-group → form/fields/radio-group}/radio-group.d.ts +1 -1
- package/types/src/form/fields/range/range.d.ts +28 -0
- package/types/src/form/fields/range/range.test.d.ts +1 -0
- package/types/src/{select → form/fields/select}/select.d.ts +23 -24
- package/types/src/form/fields/switch/switch.d.ts +57 -0
- package/types/src/{textarea → form/fields/textarea}/textarea.d.ts +6 -39
- package/types/src/form/fields/textarea/textarea.test.d.ts +1 -0
- package/types/src/form/form-state.d.ts +22 -0
- package/types/src/form/form-summary.d.ts +42 -0
- package/types/src/form/form-summary.test.d.ts +4 -0
- package/types/src/form/form.d.ts +79 -34
- package/types/src/form/form.test.d.ts +2 -2
- package/types/src/form/index.d.ts +2 -0
- package/types/src/index.d.ts +9 -9
- package/dist/active-host-CcIa2tmW.cjs +0 -1
- package/dist/active-host-CvNYoprt.js +0 -57
- package/dist/autocomplete-DWSuwSRS.js.map +0 -1
- package/dist/autocomplete-iCJOia-q.cjs +0 -115
- package/dist/autocomplete-iCJOia-q.cjs.map +0 -1
- package/dist/checkbox-NNReP9s_.cjs.map +0 -1
- package/dist/date-range-CaOxwZDq.cjs +0 -131
- package/dist/date-range-CaOxwZDq.cjs.map +0 -1
- package/dist/date-range-CgNujP8r.js.map +0 -1
- package/dist/date-range-inline-D4IjOOO0.cjs +0 -43
- package/dist/decorate-23nYs4Le.js +0 -7
- package/dist/decorate-DpFmy0nm.cjs +0 -1
- package/dist/float-CKmd-0-t.cjs +0 -1
- package/dist/form-CFvwnfuJ.js +0 -68
- package/dist/form-CFvwnfuJ.js.map +0 -1
- package/dist/form-Ceijw1aA.cjs +0 -1
- package/dist/form-Ceijw1aA.cjs.map +0 -1
- package/dist/input-D95GjINh.js.map +0 -1
- package/dist/input-D9s4jDAb.cjs +0 -51
- package/dist/input-D9s4jDAb.cjs.map +0 -1
- package/dist/mixins-BV0w2yIE.js +0 -627
- package/dist/mixins-BV0w2yIE.js.map +0 -1
- package/dist/mixins-DvAYa-F7.cjs +0 -298
- package/dist/mixins-DvAYa-F7.cjs.map +0 -1
- package/dist/notification-BC9nG8Sr.cjs +0 -23
- package/dist/radio-group-ByMD6Lsj.cjs +0 -40
- package/dist/radio-group-ByMD6Lsj.cjs.map +0 -1
- package/dist/radio-group-CW8airhZ.js.map +0 -1
- package/dist/select-BdBThja4.cjs +0 -56
- package/dist/select-BdBThja4.cjs.map +0 -1
- package/dist/select-Dbn-CImU.js.map +0 -1
- package/dist/state-DNdCPITt.cjs +0 -1
- package/dist/surface-BpppoNXN.cjs +0 -7
- package/dist/textarea-B9dy-yec.js +0 -211
- package/dist/textarea-B9dy-yec.js.map +0 -1
- package/dist/textarea-DFY0Flgv.cjs +0 -39
- package/dist/textarea-DFY0Flgv.cjs.map +0 -1
- package/dist/theme-CpuF3D3q.cjs +0 -181
- package/dist/theme-button-B6Xf-EiH.cjs +0 -8
- package/src/checkbox/checkbox.ts +0 -162
- package/types/src/checkbox/checkbox.d.ts +0 -71
- package/types/src/range/range.d.ts +0 -25
- package/types/src/switch/switch.d.ts +0 -53
- /package/dist/{animation-CO_Csq84.cjs → animation-CCOIW4wJ.cjs} +0 -0
- /package/dist/{animation-BK-8BwY8.js → animation-DCznELuT.js} +0 -0
- /package/dist/{context-DJTJnSK4.js → context-6oXCZmZN.js} +0 -0
- /package/dist/{context-BpCETidA.cjs → context-CRZeiCqq.cjs} +0 -0
- /package/dist/{hashContent-Bobsobip.cjs → hashContent-Ck6laKlk.cjs} +0 -0
- /package/dist/{hashContent-BU6jl5ih.js → hashContent-dJrI-9sc.js} +0 -0
- /package/dist/{lazy-Dq9mRRjT.cjs → lazy-CayEFyC3.cjs} +0 -0
- /package/dist/{lazy-B0ia54tT.js → lazy-D-bO2r4m.js} +0 -0
- /package/dist/{overlay-stack-DCDS17uj.js → overlay-stack-BR4iYivO.js} +0 -0
- /package/dist/{overlay-stack-DPIe_aYv.cjs → overlay-stack-Dk0xETTy.cjs} +0 -0
- /package/dist/{reduced-motion-D-L12p7G.js → reduced-motion-D7LqTUMn.js} +0 -0
- /package/dist/{reduced-motion-Ds-HjMzn.cjs → reduced-motion-Dzfp_w5x.cjs} +0 -0
- /package/dist/{rxjs-utils-CVeJQ9KG.js → rxjs-utils-D9U4MW0Q.js} +0 -0
- /package/dist/{rxjs-utils-DCUHg_Ml.cjs → rxjs-utils-kWPShgKu.cjs} +0 -0
- /package/dist/{search-BLCRsxIC.cjs → search-DPKoC-dT.cjs} +0 -0
- /package/dist/{search-BTz7-Rev.js → search-MvIBA93K.js} +0 -0
- /package/dist/{theme.interface-B9TjbSBF.js → theme.interface-C8OHheXg.js} +0 -0
- /package/dist/{theme.interface-BujperTo.cjs → theme.interface-CYo4UpWK.cjs} +0 -0
- /package/src/{autocomplete → form/fields/autocomplete}/autocomplete.scss +0 -0
- /package/src/{autocomplete → form/fields/autocomplete}/index.ts +0 -0
- /package/src/{checkbox → form/fields/checkbox}/index.ts +0 -0
- /package/src/{date-range → form/fields/date-range}/date-range-dialog.ts +0 -0
- /package/src/{date-range → form/fields/date-range}/date-range-helpers.ts +0 -0
- /package/src/{date-range → form/fields/date-range}/date-range-presets.ts +0 -0
- /package/src/{date-range → form/fields/date-range}/date-utils.ts +0 -0
- /package/src/{date-range → form/fields/date-range}/index.ts +0 -0
- /package/src/{input → form/fields/input}/index.ts +0 -0
- /package/src/{input → form/fields/input}/input.scss +0 -0
- /package/src/{radio-group → form/fields/radio-group}/index.ts +0 -0
- /package/src/{radio-group → form/fields/radio-group}/radio-group.scss +0 -0
- /package/src/{range → form/fields/range}/index.ts +0 -0
- /package/src/{select → form/fields/select}/index.ts +0 -0
- /package/src/{switch → form/fields/switch}/index.ts +0 -0
- /package/src/{textarea → form/fields/textarea}/index.ts +0 -0
- /package/src/{textarea → form/fields/textarea}/textarea.scss +0 -0
- /package/types/src/{autocomplete → form/fields/autocomplete}/index.d.ts +0 -0
- /package/types/src/{checkbox → form/fields/checkbox}/checkbox.test.d.ts +0 -0
- /package/types/src/{checkbox → form/fields/checkbox}/index.d.ts +0 -0
- /package/types/src/{date-range → form/fields/date-range}/date-range-dialog.d.ts +0 -0
- /package/types/src/{date-range → form/fields/date-range}/date-range-helpers.d.ts +0 -0
- /package/types/src/{date-range → form/fields/date-range}/date-range-presets.d.ts +0 -0
- /package/types/src/{date-range → form/fields/date-range}/date-utils.d.ts +0 -0
- /package/types/src/{date-range → form/fields/date-range}/index.d.ts +0 -0
- /package/types/src/{input → form/fields/input}/index.d.ts +0 -0
- /package/types/src/{radio-group → form/fields/radio-group}/index.d.ts +0 -0
- /package/types/src/{range → form/fields/range}/index.d.ts +0 -0
- /package/types/src/{select → form/fields/select}/index.d.ts +0 -0
- /package/types/src/{switch → form/fields/switch}/index.d.ts +0 -0
- /package/types/src/{switch → form/fields/switch}/switch.test.d.ts +0 -0
- /package/types/src/{textarea → form/fields/textarea}/index.d.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchmancyFormField } from '@mixins/index'
|
|
2
2
|
import { InputSize, SchmancyInput } from '@schmancy/input'
|
|
3
3
|
import SchmancyOption from '@schmancy/option/option'
|
|
4
4
|
import { html, nothing, unsafeCSS } from 'lit'
|
|
@@ -10,21 +10,22 @@ import { repeat } from 'lit/directives/repeat.js'
|
|
|
10
10
|
import { when } from 'lit/directives/when.js'
|
|
11
11
|
import {
|
|
12
12
|
BehaviorSubject,
|
|
13
|
-
combineLatest
|
|
13
|
+
combineLatest,
|
|
14
|
+
fromEvent,
|
|
15
|
+
timer
|
|
14
16
|
} from 'rxjs'
|
|
15
17
|
import {
|
|
16
18
|
debounceTime,
|
|
17
19
|
distinctUntilChanged,
|
|
18
|
-
take,
|
|
19
20
|
takeUntil,
|
|
20
21
|
tap
|
|
21
22
|
} from 'rxjs/operators'
|
|
22
23
|
import style from './autocomplete.scss?inline'
|
|
23
24
|
|
|
24
25
|
// Import the similarity function (or include it inline)
|
|
25
|
-
import { similarity } from '
|
|
26
|
+
import { similarity } from '../../../utils/search'
|
|
26
27
|
// Import chip component for multi-select display
|
|
27
|
-
import '
|
|
28
|
+
import '../../../chips/input-chip'
|
|
28
29
|
|
|
29
30
|
export type SchmancyAutocompleteChangeEvent = CustomEvent<{
|
|
30
31
|
value: string | string[]
|
|
@@ -48,26 +49,16 @@ interface FilteredOption {
|
|
|
48
49
|
* @prop {string[]} values - Selected values (multi-select mode)
|
|
49
50
|
*/
|
|
50
51
|
@customElement('schmancy-autocomplete')
|
|
51
|
-
export default class SchmancyAutocomplete extends
|
|
52
|
-
static styles = [unsafeCSS(style)];
|
|
53
|
-
|
|
54
|
-
static formAssociated = true
|
|
55
|
-
internals: ElementInternals | undefined
|
|
56
|
-
|
|
57
|
-
constructor() {
|
|
58
|
-
super()
|
|
59
|
-
try {
|
|
60
|
-
this.internals = this.attachInternals()
|
|
61
|
-
} catch {
|
|
62
|
-
this.internals = undefined
|
|
63
|
-
}
|
|
64
|
-
}
|
|
52
|
+
export default class SchmancyAutocomplete extends SchmancyFormField(unsafeCSS(style)) {
|
|
65
53
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
54
|
+
// `formAssociated`, `internals`, `attachInternals`, `name`, `label`,
|
|
55
|
+
// `required`, `disabled`, `error`, `validationMessage`, `hint`, `id`,
|
|
56
|
+
// `validateOn`, `touched/dirty/submitted`, `markTouched/markSubmitted`,
|
|
57
|
+
// `setCustomValidity`, `formDisabledCallback`, FIELD_CONNECT_EVENT dispatch
|
|
58
|
+
// — all from the mixin.
|
|
69
59
|
|
|
70
|
-
|
|
60
|
+
/** Override mixin's resetForm with autocomplete-specific subject reset. */
|
|
61
|
+
override resetForm(): void {
|
|
71
62
|
if (this.multi) {
|
|
72
63
|
this._selectedValues$.next([])
|
|
73
64
|
} else {
|
|
@@ -75,25 +66,16 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
75
66
|
}
|
|
76
67
|
this._inputValue = ''
|
|
77
68
|
this._inputValue$.next('')
|
|
78
|
-
|
|
79
|
-
this.validationMessage = ''
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
formDisabledCallback(disabled: boolean): void {
|
|
83
|
-
// The component does not expose a disabled prop directly; propagate via attribute.
|
|
84
|
-
if (disabled) this.setAttribute('disabled', '')
|
|
85
|
-
else this.removeAttribute('disabled')
|
|
69
|
+
super.resetForm()
|
|
86
70
|
}
|
|
87
71
|
|
|
88
72
|
// Track whether value/values have been explicitly set
|
|
89
73
|
_valueSet: boolean = false
|
|
90
74
|
_valuesSet: boolean = false
|
|
91
75
|
|
|
92
|
-
//
|
|
93
|
-
|
|
76
|
+
// Autocomplete-specific properties only — `name`, `label`, `required`,
|
|
77
|
+
// `error`, `validationMessage` come from the mixin.
|
|
94
78
|
@property({ type: String }) placeholder = ''
|
|
95
|
-
@property({ type: String, reflect: true }) label = ''
|
|
96
|
-
@property({ type: String }) name = ''
|
|
97
79
|
@property({ type: String }) maxHeight = '300px'
|
|
98
80
|
@property({ type: Boolean }) multi = false
|
|
99
81
|
@property({ type: String }) description = ''
|
|
@@ -101,8 +83,6 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
101
83
|
@property({ type: String }) autocomplete = 'off'
|
|
102
84
|
@property({ type: Number }) debounceMs = 200
|
|
103
85
|
@property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option
|
|
104
|
-
@property({ type: Boolean }) error = false
|
|
105
|
-
@property({ type: String }) validationMessage = ''
|
|
106
86
|
|
|
107
87
|
private readonly _a11yId = `schmancy-autocomplete-${Math.random().toString(36).slice(2, 10)}`
|
|
108
88
|
|
|
@@ -116,14 +96,14 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
116
96
|
this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])
|
|
117
97
|
}
|
|
118
98
|
|
|
119
|
-
// Value property
|
|
99
|
+
// Value property — narrowed override of the mixin's wide value union.
|
|
120
100
|
@property({ type: String, reflect: true })
|
|
121
|
-
get value() {
|
|
122
|
-
return this.multi
|
|
101
|
+
override get value(): string {
|
|
102
|
+
return this.multi
|
|
123
103
|
? this._selectedValues$.value.join(',')
|
|
124
104
|
: this._selectedValue$.value
|
|
125
105
|
}
|
|
126
|
-
set value(val: string) {
|
|
106
|
+
override set value(val: string) {
|
|
127
107
|
this._valueSet = true
|
|
128
108
|
if (this.multi) {
|
|
129
109
|
const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []
|
|
@@ -159,13 +139,9 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
159
139
|
private _selectedValues$ = new BehaviorSubject<string[]>([])
|
|
160
140
|
private _inputValue$ = new BehaviorSubject<string>('')
|
|
161
141
|
|
|
162
|
-
connectedCallback() {
|
|
142
|
+
override connectedCallback() {
|
|
143
|
+
// FIELD_CONNECT_EVENT is dispatched by the mixin's connectedCallback.
|
|
163
144
|
super.connectedCallback()
|
|
164
|
-
|
|
165
|
-
if (!this.id) {
|
|
166
|
-
this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`
|
|
167
|
-
}
|
|
168
|
-
|
|
169
145
|
this._setupAutocompleteLogic()
|
|
170
146
|
this._setupDocumentClickHandler()
|
|
171
147
|
}
|
|
@@ -218,15 +194,17 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
218
194
|
option.dataset.schmancyAutocompleteHandlers = 'attached'
|
|
219
195
|
|
|
220
196
|
// Prevent blur handler from interfering with option selection
|
|
221
|
-
option
|
|
222
|
-
|
|
223
|
-
|
|
197
|
+
fromEvent<MouseEvent>(option, 'mousedown')
|
|
198
|
+
.pipe(takeUntil(this.disconnecting))
|
|
199
|
+
.subscribe(e => e.preventDefault())
|
|
224
200
|
|
|
225
201
|
// Handle the actual selection
|
|
226
|
-
option
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
202
|
+
fromEvent<MouseEvent>(option, 'click')
|
|
203
|
+
.pipe(takeUntil(this.disconnecting))
|
|
204
|
+
.subscribe(e => {
|
|
205
|
+
e.stopPropagation()
|
|
206
|
+
this._selectOption(option)
|
|
207
|
+
})
|
|
230
208
|
})
|
|
231
209
|
}
|
|
232
210
|
|
|
@@ -331,23 +309,16 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
331
309
|
}
|
|
332
310
|
|
|
333
311
|
private _setupDocumentClickHandler() {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
document.addEventListener('click', handleDocumentClick)
|
|
346
|
-
|
|
347
|
-
// Cleanup on disconnect
|
|
348
|
-
this.disconnecting.pipe(take(1)).subscribe(() => {
|
|
349
|
-
document.removeEventListener('click', handleDocumentClick)
|
|
350
|
-
})
|
|
312
|
+
fromEvent<MouseEvent>(document, 'click')
|
|
313
|
+
.pipe(takeUntil(this.disconnecting))
|
|
314
|
+
.subscribe(e => {
|
|
315
|
+
if (!this._open) return
|
|
316
|
+
const path = e.composedPath()
|
|
317
|
+
if (!path.includes(this) && !this._options.some(opt => path.includes(opt))) {
|
|
318
|
+
this._open = false
|
|
319
|
+
this._updateInputDisplay()
|
|
320
|
+
}
|
|
321
|
+
})
|
|
351
322
|
}
|
|
352
323
|
|
|
353
324
|
|
|
@@ -721,10 +692,12 @@ export default class SchmancyAutocomplete extends SchmancyElement {
|
|
|
721
692
|
event.preventDefault()
|
|
722
693
|
this._openDropdown()
|
|
723
694
|
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
695
|
+
timer(10)
|
|
696
|
+
.pipe(takeUntil(this.disconnecting))
|
|
697
|
+
.subscribe(() => {
|
|
698
|
+
const firstVisible = this._options.find(opt => !opt.hidden)
|
|
699
|
+
firstVisible?.focus()
|
|
700
|
+
})
|
|
728
701
|
return
|
|
729
702
|
}
|
|
730
703
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
2
|
-
import { expectNoA11yViolations } from '
|
|
2
|
+
import { expectNoA11yViolations } from '../../../test-utils/a11y'
|
|
3
3
|
import './checkbox'
|
|
4
4
|
|
|
5
5
|
const nextUpdate = () => new Promise(r => requestAnimationFrame(() => r(null)))
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import '@material/web/checkbox/checkbox.js'
|
|
2
|
+
import { html, LitElement, type PropertyValues } from 'lit'
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js'
|
|
4
|
+
import { when } from 'lit/directives/when.js'
|
|
5
|
+
import { SchmancyFormField } from '@mixins/index'
|
|
6
|
+
|
|
7
|
+
export type schmancyCheckBoxChangeEvent = CustomEvent<{
|
|
8
|
+
value: boolean
|
|
9
|
+
}>
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @element schmancy-checkbox
|
|
13
|
+
* @slot - The label for the checkbox.
|
|
14
|
+
* @fires change - Event fired when the checkbox value changes.
|
|
15
|
+
*/
|
|
16
|
+
@customElement('schmancy-checkbox')
|
|
17
|
+
class SchmancyCheckboxElement extends SchmancyFormField() {
|
|
18
|
+
// Inner <md-checkbox> is the focusable surface; route host focus to it.
|
|
19
|
+
protected static shadowRootOptions = {
|
|
20
|
+
...LitElement.shadowRootOptions,
|
|
21
|
+
delegatesFocus: true,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// FACE wiring (formAssociated, internals, attachInternals), `name`,
|
|
25
|
+
// `disabled`, `required`, `id`, `label`, `error`, `validationMessage`,
|
|
26
|
+
// `validateOn`, touched/dirty/submitted, markTouched/markSubmitted,
|
|
27
|
+
// FIELD_CONNECT_EVENT dispatch — all from the mixin.
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Boolean checked state. Test contract: `cb.value = true` flips the state.
|
|
31
|
+
* The FormData *string* is read from `true-value` attribute (or `'on'`
|
|
32
|
+
* default) — kept separate from `value` to keep the boolean-state ergonomic.
|
|
33
|
+
*/
|
|
34
|
+
@property({ type: Boolean, reflect: true })
|
|
35
|
+
override value: boolean = false
|
|
36
|
+
|
|
37
|
+
/** Alias for `value` for read-side ergonomics. */
|
|
38
|
+
@property({ type: Boolean })
|
|
39
|
+
get checked(): boolean {
|
|
40
|
+
return this.value
|
|
41
|
+
}
|
|
42
|
+
set checked(val: boolean) {
|
|
43
|
+
this.value = val
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* M3-aligned sizes: 24dp (xxs) → 32dp (xs) → 40dp (sm) → 48dp (md) → 56dp (lg).
|
|
48
|
+
*/
|
|
49
|
+
@property({ type: String })
|
|
50
|
+
size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'md'
|
|
51
|
+
|
|
52
|
+
private get _trueValue(): string {
|
|
53
|
+
return this.getAttribute('true-value') ?? 'on'
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
override willUpdate(changed: PropertyValues): void {
|
|
57
|
+
super.willUpdate(changed)
|
|
58
|
+
if (changed.has('value') || changed.has('name')) {
|
|
59
|
+
this.internals?.setFormValue(this.value ? this._trueValue : null)
|
|
60
|
+
if (this.value) this.internals?.states.add('checked')
|
|
61
|
+
else this.internals?.states.delete('checked')
|
|
62
|
+
this.checkValidity()
|
|
63
|
+
}
|
|
64
|
+
if (changed.has('required') || changed.has('disabled')) {
|
|
65
|
+
this.checkValidity()
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Checkbox validity is `checked === true` when required. */
|
|
70
|
+
override checkValidity(): boolean {
|
|
71
|
+
if (this.disabled) {
|
|
72
|
+
this.internals?.setValidity({})
|
|
73
|
+
return true
|
|
74
|
+
}
|
|
75
|
+
const isValid = !this.required || this.value === true
|
|
76
|
+
const message = isValid ? '' : 'Please check this box if you want to proceed.'
|
|
77
|
+
|
|
78
|
+
this.internals?.setValidity(
|
|
79
|
+
isValid ? {} : { valueMissing: true },
|
|
80
|
+
isValid ? undefined : message,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
if (this._shouldShowError()) {
|
|
84
|
+
this.error = !isValid
|
|
85
|
+
this.validationMessage = message
|
|
86
|
+
}
|
|
87
|
+
return isValid
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Emit only when checked. */
|
|
91
|
+
override toFormEntries(): Array<[string, FormDataEntryValue]> {
|
|
92
|
+
if (!this.name || this.disabled || !this.value) return []
|
|
93
|
+
return [[this.name, this._trueValue]]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
render() {
|
|
97
|
+
return html`
|
|
98
|
+
<label class="grid grid-flow-col items-center space-x-2 w-fit">
|
|
99
|
+
<md-checkbox
|
|
100
|
+
.required=${this.required}
|
|
101
|
+
.disabled=${this.disabled}
|
|
102
|
+
?checked=${this.value === true}
|
|
103
|
+
@change=${(e: Event) => {
|
|
104
|
+
this.value = (e.target as HTMLInputElement).checked
|
|
105
|
+
this.markTouched()
|
|
106
|
+
this.emitChange({ value: this.value })
|
|
107
|
+
}}
|
|
108
|
+
>
|
|
109
|
+
</md-checkbox>
|
|
110
|
+
${when(
|
|
111
|
+
this.label,
|
|
112
|
+
() => html`<span>${this.label}</span>`,
|
|
113
|
+
() => html`<slot></slot>`,
|
|
114
|
+
)}
|
|
115
|
+
</label>
|
|
116
|
+
`
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { SchmancyCheckboxElement as SchmancyCheckbox }
|
|
121
|
+
|
|
122
|
+
declare global {
|
|
123
|
+
interface HTMLElementTagNameMap {
|
|
124
|
+
'schmancy-checkbox': SchmancyCheckboxElement
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
2
|
+
import './date-range'
|
|
3
|
+
import { expectNoA11yViolations } from '../../../test-utils/a11y'
|
|
4
|
+
|
|
5
|
+
const nextUpdate = () => new Promise(r => requestAnimationFrame(() => r(null)))
|
|
6
|
+
|
|
7
|
+
describe('schmancy-date-range', () => {
|
|
8
|
+
let host: HTMLDivElement
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
host = document.createElement('div')
|
|
12
|
+
document.body.appendChild(host)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
host.remove()
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('contributes flat-suffix dateFrom/dateTo entries to FormData', async () => {
|
|
20
|
+
host.innerHTML = `
|
|
21
|
+
<form>
|
|
22
|
+
<schmancy-date-range name="window"></schmancy-date-range>
|
|
23
|
+
</form>
|
|
24
|
+
`
|
|
25
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
26
|
+
const dr = host.querySelector('schmancy-date-range') as HTMLElement & {
|
|
27
|
+
dateFrom: { label: string; value: string }
|
|
28
|
+
dateTo: { label: string; value: string }
|
|
29
|
+
}
|
|
30
|
+
await nextUpdate()
|
|
31
|
+
await nextUpdate()
|
|
32
|
+
dr.dateFrom = { label: 'From', value: '2026-01-01' }
|
|
33
|
+
dr.dateTo = { label: 'To', value: '2026-01-31' }
|
|
34
|
+
await nextUpdate()
|
|
35
|
+
await nextUpdate()
|
|
36
|
+
const fd = new FormData(form)
|
|
37
|
+
expect(fd.get('windowFrom')).toBe('2026-01-01')
|
|
38
|
+
expect(fd.get('windowTo')).toBe('2026-01-31')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('omits from FormData when name is not set', async () => {
|
|
42
|
+
host.innerHTML = `<form><schmancy-date-range></schmancy-date-range></form>`
|
|
43
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
44
|
+
await nextUpdate()
|
|
45
|
+
expect([...new FormData(form).keys()]).toEqual([])
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('reports invalid when required and both dates empty', async () => {
|
|
49
|
+
host.innerHTML = `<form><schmancy-date-range name="w" required></schmancy-date-range></form>`
|
|
50
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
51
|
+
const dr = host.querySelector('schmancy-date-range') as HTMLElement & {
|
|
52
|
+
dateFrom: { label: string; value: string }
|
|
53
|
+
dateTo: { label: string; value: string }
|
|
54
|
+
checkValidity(): boolean
|
|
55
|
+
}
|
|
56
|
+
await nextUpdate()
|
|
57
|
+
await nextUpdate()
|
|
58
|
+
dr.dateFrom = { label: 'From', value: '' }
|
|
59
|
+
dr.dateTo = { label: 'To', value: '' }
|
|
60
|
+
await nextUpdate()
|
|
61
|
+
expect(dr.checkValidity()).toBe(false)
|
|
62
|
+
expect(form.checkValidity()).toBe(false)
|
|
63
|
+
dr.dateFrom = { label: 'From', value: '2026-01-01' }
|
|
64
|
+
dr.dateTo = { label: 'To', value: '2026-01-02' }
|
|
65
|
+
await nextUpdate()
|
|
66
|
+
await nextUpdate()
|
|
67
|
+
expect(dr.checkValidity()).toBe(true)
|
|
68
|
+
expect(form.checkValidity()).toBe(true)
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('has no axe-core a11y violations', async () => {
|
|
72
|
+
host.innerHTML = `<schmancy-date-range name="window"></schmancy-date-range>`
|
|
73
|
+
await nextUpdate()
|
|
74
|
+
await nextUpdate()
|
|
75
|
+
// Trigger button-group rendering with values populated.
|
|
76
|
+
const dr = host.querySelector('schmancy-date-range') as HTMLElement & {
|
|
77
|
+
dateFrom: { label: string; value: string }
|
|
78
|
+
dateTo: { label: string; value: string }
|
|
79
|
+
}
|
|
80
|
+
dr.dateFrom = { label: 'From', value: '2026-01-01' }
|
|
81
|
+
dr.dateTo = { label: 'To', value: '2026-01-31' }
|
|
82
|
+
await nextUpdate()
|
|
83
|
+
await nextUpdate()
|
|
84
|
+
await expectNoA11yViolations(host)
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('omits empty dates from FormData', async () => {
|
|
88
|
+
host.innerHTML = `<form><schmancy-date-range name="w"></schmancy-date-range></form>`
|
|
89
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
90
|
+
const dr = host.querySelector('schmancy-date-range') as HTMLElement & {
|
|
91
|
+
dateFrom: { label: string; value: string }
|
|
92
|
+
dateTo: { label: string; value: string }
|
|
93
|
+
}
|
|
94
|
+
await nextUpdate()
|
|
95
|
+
dr.dateFrom = { label: 'From', value: '' }
|
|
96
|
+
dr.dateTo = { label: 'To', value: '' }
|
|
97
|
+
await nextUpdate()
|
|
98
|
+
const fd = new FormData(form)
|
|
99
|
+
expect(fd.get('wFrom')).toBeNull()
|
|
100
|
+
expect(fd.get('wTo')).toBeNull()
|
|
101
|
+
})
|
|
102
|
+
})
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SchmancyElement } from '@mixins/index'
|
|
2
1
|
import dayjs from 'dayjs'
|
|
3
2
|
import quarterOfYear from 'dayjs/plugin/quarterOfYear'
|
|
4
3
|
import { html, PropertyValues } from 'lit'
|
|
5
4
|
import { customElement, property, state } from 'lit/decorators.js'
|
|
6
5
|
import { fromEvent, Subscription, takeUntil, timer } from 'rxjs'
|
|
7
|
-
import {
|
|
6
|
+
import { SchmancyFormField } from '@mixins/index'
|
|
7
|
+
import { show } from '../../../overlay/overlay.service'
|
|
8
8
|
import { detectDateRangeType, formatDateRange } from './date-range-helpers'
|
|
9
9
|
import { DateRangePreset, generatePresetCategories, PresetCategory } from './date-range-presets'
|
|
10
10
|
import { validateInitialDateRange } from './date-utils'
|
|
@@ -32,23 +32,23 @@ export type SchmancyDateRangeChangeEvent = CustomEvent<{
|
|
|
32
32
|
* @fires change - Fired when the date range changes with dateFrom and dateTo values
|
|
33
33
|
*/
|
|
34
34
|
@customElement('schmancy-date-range')
|
|
35
|
-
export class SchmancyDateRange extends
|
|
36
|
-
//
|
|
35
|
+
export class SchmancyDateRange extends SchmancyFormField() {
|
|
36
|
+
// `name`, `disabled`, `required`, `error`, `validationMessage`, `id`,
|
|
37
|
+
// `validateOn`, `touched`, `submitted`, `markTouched`, `markSubmitted`,
|
|
38
|
+
// FACE wiring, FIELD_CONNECT_EVENT dispatch — all from the mixin.
|
|
39
|
+
|
|
37
40
|
@property({ type: String }) type: 'date' | 'datetime-local' = 'date'
|
|
38
41
|
@property({ type: Object }) dateFrom: { label: string; value: string } = { label: 'From', value: '' }
|
|
39
42
|
@property({ type: Object }) dateTo: { label: string; value: string } = { label: 'To', value: '' }
|
|
40
43
|
@property({ type: String }) minDate?: string
|
|
41
44
|
@property({ type: String }) maxDate?: string
|
|
42
45
|
|
|
43
|
-
// Enhanced functionality
|
|
44
46
|
@property({ type: Array }) customPresets: Array<{
|
|
45
47
|
label: string
|
|
46
48
|
dateFrom: string
|
|
47
49
|
dateTo: string
|
|
48
50
|
}> = []
|
|
49
51
|
@property({ type: String }) format?: string
|
|
50
|
-
@property({ type: Boolean }) disabled = false
|
|
51
|
-
@property({ type: Boolean }) required = false
|
|
52
52
|
@property({ type: String }) placeholder = 'Select date range'
|
|
53
53
|
@property({ type: Boolean }) clearable = true
|
|
54
54
|
@property() step?: 'day' | 'week' | 'month' | 'year' | number
|
|
@@ -119,6 +119,89 @@ export class SchmancyDateRange extends SchmancyElement {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
+
override willUpdate(changed: PropertyValues): void {
|
|
123
|
+
super.willUpdate(changed)
|
|
124
|
+
if (changed.has('dateFrom') || changed.has('dateTo') || changed.has('name')) {
|
|
125
|
+
// Multi-entry FACE submission: setFormValue accepts a FormData
|
|
126
|
+
// object whose entries are appended to the owning form's FormData.
|
|
127
|
+
// native `new FormData(form)` then sees both `${name}From` and
|
|
128
|
+
// `${name}To` without any consumer-side parsing.
|
|
129
|
+
if (this.name && !this.disabled) {
|
|
130
|
+
const fd = new FormData()
|
|
131
|
+
if (this.dateFrom?.value) fd.append(`${this.name}From`, this.dateFrom.value)
|
|
132
|
+
if (this.dateTo?.value) fd.append(`${this.name}To`, this.dateTo.value)
|
|
133
|
+
this.internals?.setFormValue(fd)
|
|
134
|
+
} else {
|
|
135
|
+
this.internals?.setFormValue(null)
|
|
136
|
+
}
|
|
137
|
+
this.checkValidity()
|
|
138
|
+
}
|
|
139
|
+
if (changed.has('required') || changed.has('disabled')) {
|
|
140
|
+
this.checkValidity()
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Date-range validity is `both dates non-empty` when required.
|
|
146
|
+
* (Order/range constraints are out of scope here — they belong to a
|
|
147
|
+
* domain-specific schema layer.)
|
|
148
|
+
*/
|
|
149
|
+
override checkValidity(): boolean {
|
|
150
|
+
if (this.disabled) {
|
|
151
|
+
this.internals?.setValidity({})
|
|
152
|
+
return true
|
|
153
|
+
}
|
|
154
|
+
const fromEmpty = !this.dateFrom?.value
|
|
155
|
+
const toEmpty = !this.dateTo?.value
|
|
156
|
+
const isValid = !this.required || (!fromEmpty && !toEmpty)
|
|
157
|
+
const message = isValid ? '' : 'Please select a date range.'
|
|
158
|
+
|
|
159
|
+
this.internals?.setValidity(
|
|
160
|
+
isValid ? {} : { valueMissing: true },
|
|
161
|
+
isValid ? undefined : message,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
if (this._shouldShowError()) {
|
|
165
|
+
this.error = !isValid
|
|
166
|
+
this.validationMessage = message
|
|
167
|
+
}
|
|
168
|
+
return isValid
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Override — emit `${name}From` and `${name}To` flat-suffix entries (the
|
|
173
|
+
* plan's chosen multi-entry encoding; native to JS consumers without
|
|
174
|
+
* server-side bracket parsing).
|
|
175
|
+
*/
|
|
176
|
+
override toFormEntries(): Array<[string, FormDataEntryValue]> {
|
|
177
|
+
if (!this.name || this.disabled) return []
|
|
178
|
+
const entries: Array<[string, FormDataEntryValue]> = []
|
|
179
|
+
if (this.dateFrom?.value) entries.push([`${this.name}From`, this.dateFrom.value])
|
|
180
|
+
if (this.dateTo?.value) entries.push([`${this.name}To`, this.dateTo.value])
|
|
181
|
+
return entries
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** `dirty` tracks the underlying date strings, not the wide-union value. */
|
|
185
|
+
private _dateFromDefault: string = ''
|
|
186
|
+
private _dateToDefault: string = ''
|
|
187
|
+
override firstUpdated(changed: PropertyValues): void {
|
|
188
|
+
super.firstUpdated(changed)
|
|
189
|
+
this._dateFromDefault = this.dateFrom?.value ?? ''
|
|
190
|
+
this._dateToDefault = this.dateTo?.value ?? ''
|
|
191
|
+
}
|
|
192
|
+
override get dirty(): boolean {
|
|
193
|
+
return (
|
|
194
|
+
(this.dateFrom?.value ?? '') !== this._dateFromDefault ||
|
|
195
|
+
(this.dateTo?.value ?? '') !== this._dateToDefault
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
override resetForm(): void {
|
|
200
|
+
this.dateFrom = { ...this.dateFrom, value: this._dateFromDefault }
|
|
201
|
+
this.dateTo = { ...this.dateTo, value: this._dateToDefault }
|
|
202
|
+
super.resetForm()
|
|
203
|
+
}
|
|
204
|
+
|
|
122
205
|
private initPresetRanges() {
|
|
123
206
|
const format = this.getDateFormat()
|
|
124
207
|
const cacheKey = `${this.type}-${format}-${JSON.stringify(this.customPresets)}`
|