@mhmo91/schmancy 0.10.15 → 0.10.17
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/flow-CvG1fLW5.js.map +1 -1
- package/dist/agent/schmancy.agent.js +5694 -5500
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +971 -1189
- package/dist/agent/vendor-material-color-DcL7ZPxx.js.map +1 -1
- 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/avatar.js.map +1 -1
- 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/breadcrumb.js.map +1 -1
- 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/connectivity.js.map +1 -1
- 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/delay.js.map +1 -1
- 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.cjs.map +1 -1
- package/dist/directives.js +5 -5
- package/dist/directives.js.map +1 -1
- package/dist/discovery.js.map +1 -1
- 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/dropdown.js.map +1 -1
- 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-D1iJOLVb.js +267 -0
- package/dist/form-D1iJOLVb.js.map +1 -0
- package/dist/form-D9K1GhlP.cjs +42 -0
- package/dist/form-D9K1GhlP.cjs.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +9 -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-BXp4vbnW.cjs} +2 -2
- package/dist/{icons-r-S17M8U.cjs.map → icons-BXp4vbnW.cjs.map} +1 -1
- package/dist/{icons-CoDo95Cu.js → icons-COrlmBPB.js} +3 -3
- package/dist/{icons-CoDo95Cu.js.map → icons-COrlmBPB.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-P9c_qg1-.cjs → iframe-BwXj6mLp.cjs} +2 -2
- package/dist/{iframe-P9c_qg1-.cjs.map → iframe-BwXj6mLp.cjs.map} +1 -1
- package/dist/{iframe-k4oI-TIj.js → iframe-CPNsIy7k.js} +2 -2
- package/dist/{iframe-k4oI-TIj.js.map → iframe-CPNsIy7k.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-BGrF2qVq.cjs +52 -0
- package/dist/input-BGrF2qVq.cjs.map +1 -0
- package/dist/{input-D95GjINh.js → input-C1SnMNuQ.js} +103 -104
- package/dist/input-C1SnMNuQ.js.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/json.js.map +1 -1
- package/dist/kbd.cjs +2 -2
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +2 -2
- package/dist/kbd.js.map +1 -1
- 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-CovQtmyn.js → lightbox-CLwpaiai.js} +9 -9
- package/dist/{lightbox-CovQtmyn.js.map → lightbox-CLwpaiai.js.map} +1 -1
- package/dist/{lightbox-C-yHeoK0.cjs → lightbox-Ck6BpN5u.cjs} +3 -3
- package/dist/{lightbox-C-yHeoK0.cjs.map → lightbox-Ck6BpN5u.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-C1pR9vhu.js → list-Bmce1Rb8.js} +2 -2
- package/dist/{list-C1pR9vhu.js.map → list-Bmce1Rb8.js.map} +1 -1
- package/dist/{list-CAijuky4.cjs → list-EmRwSpTU.cjs} +3 -3
- package/dist/{list-CAijuky4.cjs.map → list-EmRwSpTU.cjs.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-BA_B7QOG.js} +3 -3
- package/dist/{menu-B59vZv9n.js.map → menu-BA_B7QOG.js.map} +1 -1
- package/dist/{menu-BaHO3Cip.cjs → menu-BTU3wGP6.cjs} +3 -3
- package/dist/{menu-BaHO3Cip.cjs.map → menu-BTU3wGP6.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/navigation-rail.js.map +1 -1
- package/dist/notification-CliGbcfU.cjs +23 -0
- package/dist/{notification-BC9nG8Sr.cjs.map → notification-CliGbcfU.cjs.map} +1 -1
- package/dist/{notification-BeLoVa47.js → notification-R2_Mf1HR.js} +4 -4
- package/dist/{notification-BeLoVa47.js.map → notification-R2_Mf1HR.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-UvlSAcC4.js → option-DU1X4SDu.js} +2 -2
- package/dist/{option-UvlSAcC4.js.map → option-DU1X4SDu.js.map} +1 -1
- package/dist/{option-BWF4GBp-.cjs → option-Db98Ndzv.cjs} +2 -2
- package/dist/{option-BWF4GBp-.cjs.map → option-Db98Ndzv.cjs.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.js.map +1 -1
- 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/page.js.map +1 -1
- package/dist/{progress-C29Uw-WJ.js → progress-C9Y2D5cm.js} +2 -2
- package/dist/{progress-C29Uw-WJ.js.map → progress-C9Y2D5cm.js.map} +1 -1
- package/dist/{progress-CwzwY8Oe.cjs → progress-DiVTGAXa.cjs} +2 -2
- package/dist/{progress-CwzwY8Oe.cjs.map → progress-DiVTGAXa.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-CW8airhZ.js → radio-group-CAzjBI2n.js} +4 -4
- package/dist/radio-group-CAzjBI2n.js.map +1 -0
- package/dist/radio-group-DIRJyYv6.cjs +40 -0
- package/dist/radio-group-DIRJyYv6.cjs.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-DCUHg_Ml.cjs.map → rxjs-utils-BKB2UM_j.cjs.map} +1 -1
- package/dist/{rxjs-utils-CVeJQ9KG.js.map → rxjs-utils-Dv9T9IpA.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-BotoGcMU.js → scroll-BFHUtZOa.js} +2 -2
- package/dist/{scroll-BotoGcMU.js.map → scroll-BFHUtZOa.js.map} +1 -1
- package/dist/{scroll-CmhmUebp.cjs → scroll-nIZyoEMt.cjs} +2 -2
- package/dist/{scroll-CmhmUebp.cjs.map → scroll-nIZyoEMt.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-7WqaUWBU.js} +52 -73
- package/dist/select-7WqaUWBU.js.map +1 -0
- package/dist/select-DTuf6p6T.cjs +56 -0
- package/dist/select-DTuf6p6T.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/skeleton.js.map +1 -1
- package/dist/skills/SKILL.md +3 -0
- 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/SKILL.md +3 -0
- 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/slider.js.map +1 -1
- 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-BbMJeLk9.cjs} +11 -11
- package/dist/{src-DEUjlTsX.cjs.map → src-BbMJeLk9.cjs.map} +1 -1
- package/dist/{src-D6e0adHi.js → src-DCu_mEk4.js} +40 -40
- package/dist/{src-D6e0adHi.js.map → src-DCu_mEk4.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/steps.js.map +1 -1
- 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/table.js.map +1 -1
- package/dist/{tabs-cVHHd1dY.js → tabs-81ADWQqa.js} +2 -2
- package/dist/{tabs-cVHHd1dY.js.map → tabs-81ADWQqa.js.map} +1 -1
- package/dist/{tabs-TO3UiBsm.cjs → tabs-DnG3K0bu.cjs} +2 -2
- package/dist/{tabs-TO3UiBsm.cjs.map → tabs-DnG3K0bu.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-3mWewuAf.js +186 -0
- package/dist/textarea-3mWewuAf.js.map +1 -0
- package/dist/textarea-BenjiTXB.cjs +43 -0
- package/dist/textarea-BenjiTXB.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-CT408FqH.js → theme-CFPJW933.js} +9 -9
- package/dist/{theme-CT408FqH.js.map → theme-CFPJW933.js.map} +1 -1
- package/dist/theme-DNymrucy.cjs +181 -0
- package/dist/{theme-CpuF3D3q.cjs.map → theme-DNymrucy.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-C2XNgsLB.js.map} +1 -1
- package/dist/{theme.interface-BujperTo.cjs.map → theme.interface-D4NeufQA.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/tooltip.js.map +1 -1
- package/dist/tree.cjs +2 -2
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +2 -2
- package/dist/tree.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js.map +1 -1
- package/dist/typography.cjs +2 -2
- package/dist/typography.cjs.map +1 -1
- package/dist/typography.js +2 -2
- package/dist/typography.js.map +1 -1
- 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/visually-hidden.js.map +1 -1
- 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/SKILL.md +3 -0
- 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/index.ts +9 -0
- 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 +3 -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/form/fields/index.d.ts +9 -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 +3 -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-DCUHg_Ml.cjs → rxjs-utils-BKB2UM_j.cjs} +0 -0
- /package/dist/{rxjs-utils-CVeJQ9KG.js → rxjs-utils-Dv9T9IpA.js} +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-C2XNgsLB.js} +0 -0
- /package/dist/{theme.interface-BujperTo.cjs → theme.interface-D4NeufQA.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)}`
|