@mhmo91/schmancy 0.10.42 → 0.10.43
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 +264 -79
- package/dist/SchmancyElement-CeKrBW2j.cjs +2 -0
- package/dist/SchmancyElement-CeKrBW2j.cjs.map +1 -0
- package/dist/SchmancyElement-Ob9yGkiG.js +286 -0
- package/dist/SchmancyElement-Ob9yGkiG.js.map +1 -0
- package/dist/agent/schmancy.agent.js +4031 -3891
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +215 -58
- package/dist/animation-CCOIW4wJ.cjs.map +1 -1
- package/dist/animation-DCznELuT.js.map +1 -1
- package/dist/area-CbajcnmJ.cjs +21 -0
- package/dist/area-CbajcnmJ.cjs.map +1 -0
- package/dist/{area-DtCNCb8w.js → area-MxLAyWgV.js} +22 -22
- package/dist/area-MxLAyWgV.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-DdN76ikW.js → audio-B_0PGwYC.js} +1 -1
- package/dist/audio-B_0PGwYC.js.map +1 -0
- package/dist/{audio-B924fI5N.cjs → audio-CpwrIaw-.cjs} +1 -1
- package/dist/audio-CpwrIaw-.cjs.map +1 -0
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-CILzaDB7.cjs +115 -0
- package/dist/autocomplete-CILzaDB7.cjs.map +1 -0
- package/dist/{autocomplete-UNOknYUz.js → autocomplete-DV9RxCun.js} +113 -113
- package/dist/autocomplete-DV9RxCun.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +4 -4
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-BZah1Sf9.js → boat-DoZGgQ0P.js} +5 -5
- package/dist/{boat-BZah1Sf9.js.map → boat-DoZGgQ0P.js.map} +1 -1
- package/dist/{boat-D3bEjxf8.cjs → boat-sg0cWO8a.cjs} +2 -2
- package/dist/{boat-D3bEjxf8.cjs.map → boat-sg0cWO8a.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +32 -31
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +33 -32
- package/dist/breadcrumb.js.map +1 -1
- package/dist/busy-Brs-TDh9.cjs +133 -0
- package/dist/busy-Brs-TDh9.cjs.map +1 -0
- package/dist/busy-g4LoQmhB.js +172 -0
- package/dist/busy-g4LoQmhB.js.map +1 -0
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-CTvS5YX4.cjs → button-Cml67Y_d.cjs} +41 -32
- package/dist/button-Cml67Y_d.cjs.map +1 -0
- package/dist/{button-DgoDfcJx.js → button-DWANpZfD.js} +43 -34
- package/dist/button-DWANpZfD.js.map +1 -0
- package/dist/button.cjs +40 -33
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +42 -35
- package/dist/button.js.map +1 -1
- package/dist/calendar-2dJrw9pR.cjs +58 -0
- package/dist/calendar-2dJrw9pR.cjs.map +1 -0
- package/dist/calendar-kCe5LaBa.js +434 -0
- package/dist/calendar-kCe5LaBa.js.map +1 -0
- package/dist/calendar.cjs +1 -0
- package/dist/calendar.js +2 -0
- package/dist/{card-C6ijJZpF.js → card-CS_hYJbz.js} +136 -136
- package/dist/card-CS_hYJbz.js.map +1 -0
- package/dist/card-d0KhTnx5.cjs +177 -0
- package/dist/card-d0KhTnx5.cjs.map +1 -0
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-7vEPZuGC.js → checkbox-Bjp7kWuE.js} +2 -2
- package/dist/{checkbox-7vEPZuGC.js.map → checkbox-Bjp7kWuE.js.map} +1 -1
- package/dist/{checkbox-DXKdxkXE.cjs → checkbox-DZ2Wrz7Y.cjs} +1 -1
- package/dist/{checkbox-DXKdxkXE.cjs.map → checkbox-DZ2Wrz7Y.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-9eG-96_D.cjs → chips-BHBVkxsa.cjs} +142 -153
- package/dist/chips-BHBVkxsa.cjs.map +1 -0
- package/dist/{chips-DF7akwz7.js → chips-DACeW7YL.js} +127 -138
- package/dist/chips-DACeW7YL.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +53 -35
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +55 -37
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
- package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
- package/dist/date-range-CVAWMdar.cjs +138 -0
- package/dist/date-range-CVAWMdar.cjs.map +1 -0
- package/dist/date-range-D2NZU5Yg.js +433 -0
- package/dist/date-range-D2NZU5Yg.js.map +1 -0
- package/dist/{date-range-inline-DV2c_gWM.cjs → date-range-inline-CGM0SPK9.cjs} +2 -4
- package/dist/date-range-inline-CGM0SPK9.cjs.map +1 -0
- package/dist/{date-range-inline-BnOD-ddB.js → date-range-inline-D6Ozerzw.js} +3 -5
- package/dist/date-range-inline-D6Ozerzw.js.map +1 -0
- 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 +2 -2
- package/dist/dayjs.min-CvRZTfam.cjs +1 -0
- package/dist/dayjs.min-CvRZTfam.cjs.map +1 -0
- package/dist/dayjs.min-DnELezPs.js +296 -0
- package/dist/dayjs.min-DnELezPs.js.map +1 -0
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +3 -3
- package/dist/{details-ByF66CyY.js → details-Ct1_GwKr.js} +104 -93
- package/dist/details-Ct1_GwKr.js.map +1 -0
- package/dist/{details-B2-jECBh.cjs → details-D4fVOaj4.cjs} +109 -98
- package/dist/details-D4fVOaj4.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-DCb_LA9R.cjs → directives-B2VxfwRL.cjs} +1 -1
- package/dist/directives-B2VxfwRL.cjs.map +1 -0
- package/dist/{directives-BL7mzVsA.js → directives-Dj8jlv-Q.js} +3 -3
- package/dist/directives-Dj8jlv-Q.js.map +1 -0
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/discovery.service-CIa3Eeuk.cjs.map +1 -1
- package/dist/discovery.service-DZFxtRwW.js.map +1 -1
- package/dist/divider-B3v33OnX.cjs +57 -0
- package/dist/divider-B3v33OnX.cjs.map +1 -0
- package/dist/divider-BJHW3q11.js +89 -0
- package/dist/divider-BJHW3q11.js.map +1 -0
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +40 -40
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +41 -41
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-cZ8rfCWP.js → expand-BT8mOu8Q.js} +103 -97
- package/dist/expand-BT8mOu8Q.js.map +1 -0
- package/dist/expand-D0YdR9nR.cjs +147 -0
- package/dist/expand-D0YdR9nR.cjs.map +1 -0
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/fab.cjs +1 -1
- package/dist/fab.cjs.map +1 -1
- package/dist/fab.js +2 -2
- package/dist/fab.js.map +1 -1
- package/dist/{float-DkGyWSWy.cjs → float-BPQlDyai.cjs} +1 -1
- package/dist/{float-DkGyWSWy.cjs.map → float-BPQlDyai.cjs.map} +1 -1
- package/dist/{float-zn3DgXBT.js → float-BQcxj3i_.js} +2 -2
- package/dist/{float-zn3DgXBT.js.map → float-BQcxj3i_.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-DowzVsgI.cjs → form-CoWFnClb.cjs} +8 -13
- package/dist/form-CoWFnClb.cjs.map +1 -0
- package/dist/{form-tG7LwDm4.js → form-hC2LvCHX.js} +10 -15
- package/dist/form-hC2LvCHX.js.map +1 -0
- package/dist/form.cjs +12 -13
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +23 -24
- package/dist/form.js.map +1 -1
- package/dist/gravity-6pL6CfIr.cjs.map +1 -1
- package/dist/gravity-sVK3zGBF.js.map +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-iRZJJWtE.cjs.map → hashContent--s09Ed_g.cjs.map} +1 -1
- package/dist/{hashContent-BqU6v1Xr.js.map → hashContent-CAvrQ56N.js.map} +1 -1
- package/dist/icons-BeGKDZ-k.cjs +22 -0
- package/dist/icons-BeGKDZ-k.cjs.map +1 -0
- package/dist/{icons-Dup5skuk.js → icons-DEJnIxml.js} +20 -22
- package/dist/icons-DEJnIxml.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CDJjnNmo.cjs → iframe-BkSukM9C.cjs} +9 -9
- package/dist/iframe-BkSukM9C.cjs.map +1 -0
- package/dist/{iframe-Xc3EPMZT.js → iframe-V3S-bwEY.js} +10 -10
- package/dist/iframe-V3S-bwEY.js.map +1 -0
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +61 -60
- package/dist/{input-cTyDxW9L.js → input-CPFCSQld.js} +3 -10
- package/dist/input-CPFCSQld.js.map +1 -0
- package/dist/{input-DnmC6J1T.cjs → input-DSfwfhhj.cjs} +2 -9
- package/dist/input-DSfwfhhj.cjs.map +1 -0
- package/dist/input-chip-BUuFJUky.cjs +129 -0
- package/dist/input-chip-BUuFJUky.cjs.map +1 -0
- package/dist/{input-chip-CYI17YOq.js → input-chip-C3a1fwKB.js} +87 -104
- package/dist/input-chip-C3a1fwKB.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +5 -1
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +8 -4
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +28 -28
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +29 -29
- package/dist/kbd.js.map +1 -1
- package/dist/{layout-CNlZSJFU.cjs → layout-CdyHy_oX.cjs} +1 -1
- package/dist/layout-CdyHy_oX.cjs.map +1 -0
- package/dist/{layout-DDxw0EwL.js → layout-k6fOkpif.js} +1 -1
- package/dist/layout-k6fOkpif.js.map +1 -0
- package/dist/layout.cjs +26 -26
- package/dist/layout.cjs.map +1 -1
- package/dist/layout.js +27 -27
- package/dist/layout.js.map +1 -1
- package/dist/lazy-BaAiIUru.js.map +1 -1
- package/dist/lazy-C-7a4FAe.cjs.map +1 -1
- package/dist/{lightbox-CH-y3rYB.js → lightbox-DIG0VLOK.js} +8 -14
- package/dist/lightbox-DIG0VLOK.js.map +1 -0
- package/dist/{lightbox-CvtqoInF.cjs → lightbox-E5rgd-hu.cjs} +7 -13
- package/dist/lightbox-E5rgd-hu.cjs.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/list-BRz0rDSH.cjs +47 -0
- package/dist/list-BRz0rDSH.cjs.map +1 -0
- package/dist/{list-DrsawQ5R.js → list-NrOYDPBo.js} +42 -35
- package/dist/list-NrOYDPBo.js.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/magnetic-DKtc4umC.cjs.map +1 -1
- package/dist/magnetic-DaOOv5Dz.js.map +1 -1
- package/dist/{menu-CsY5lMqY.js → menu-B1Ei9SVj.js} +12 -12
- package/dist/menu-B1Ei9SVj.js.map +1 -0
- package/dist/{menu-BFRcTe3o.cjs → menu-Duvl66Nl.cjs} +10 -10
- package/dist/menu-Duvl66Nl.cjs.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/{mixins-BoMURWag.cjs → mixins-Cjn20BQH.cjs} +42 -100
- package/dist/mixins-Cjn20BQH.cjs.map +1 -0
- package/dist/{mixins-bCEXbwJV.js → mixins-q4KAL8Xr.js} +42 -100
- package/dist/mixins-q4KAL8Xr.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 +2 -4
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +3 -5
- package/dist/navigation-rail.js.map +1 -1
- package/dist/{notification-DFKRMmSq.js → notification-COhUhUCr.js} +5 -7
- package/dist/notification-COhUhUCr.js.map +1 -0
- package/dist/{notification-FBf3Mb2e.cjs → notification-DsdA_MJe.cjs} +2 -4
- package/dist/notification-DsdA_MJe.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-Ct0lGdH3.js → option-BIzgTbXz.js} +20 -20
- package/dist/option-BIzgTbXz.js.map +1 -0
- package/dist/option-C5hhqR2z.cjs +43 -0
- package/dist/option-C5hhqR2z.cjs.map +1 -0
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-sRXiMkjn.cjs → overlay-BzgF8P7i.cjs} +48 -41
- package/dist/overlay-BzgF8P7i.cjs.map +1 -0
- package/dist/{overlay-Bh8Q_R01.js → overlay-LoRRemny.js} +52 -45
- package/dist/overlay-LoRRemny.js.map +1 -0
- package/dist/overlay-stack-Bdr9lOqi.cjs.map +1 -1
- package/dist/overlay-stack-D2rgxQLh.js.map +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-CQihsR20.js → overlay.confirm-body-D0b1MoCw.js} +30 -45
- package/dist/overlay.confirm-body-D0b1MoCw.js.map +1 -0
- package/dist/{overlay.confirm-body-Jc1EuMGs.cjs → overlay.confirm-body-DCneq73Z.cjs} +22 -37
- package/dist/overlay.confirm-body-DCneq73Z.cjs.map +1 -0
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-BXPgS7ay.js → overlay.service-BuUeti6X.js} +2 -2
- package/dist/overlay.service-BuUeti6X.js.map +1 -0
- package/dist/{overlay.service-9Dp3g7ot.cjs → overlay.service-MMTiW2T3.cjs} +1 -1
- package/dist/overlay.service-MMTiW2T3.cjs.map +1 -0
- package/dist/{progress-CYLshdo2.js → progress-D7n3SKAO.js} +50 -50
- package/dist/progress-D7n3SKAO.js.map +1 -0
- package/dist/progress-DsCnFsH5.cjs +51 -0
- package/dist/progress-DsCnFsH5.cjs.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-6kCgOgBL.cjs → radio-group-CaAjg9UV.cjs} +1 -1
- package/dist/radio-group-CaAjg9UV.cjs.map +1 -0
- package/dist/{radio-group-bZtZHOj_.js → radio-group-Drpl6Pl8.js} +2 -2
- package/dist/radio-group-Drpl6Pl8.js.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +4 -2
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +5 -3
- package/dist/range.js.map +1 -1
- package/dist/reduced-motion-D-L12p7G.js.map +1 -1
- package/dist/reduced-motion-Ds-HjMzn.cjs.map +1 -1
- package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-4P2v57ke.cjs.map} +1 -1
- package/dist/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-JMFdgQSl.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/search-DPKoC-dT.cjs.map +1 -1
- package/dist/search-MvIBA93K.js.map +1 -1
- package/dist/{select-CU3X-PIa.js → select-CTXkrrVZ.js} +13 -13
- package/dist/select-CTXkrrVZ.js.map +1 -0
- package/dist/select-DcLcpPCh.cjs +56 -0
- package/dist/select-DcLcpPCh.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +37 -33
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +38 -34
- package/dist/skeleton.js.map +1 -1
- package/dist/skills/schmancy/surface.md +38 -22
- package/dist/skills/surface.md +38 -22
- package/dist/slider.cjs +31 -31
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +32 -32
- package/dist/slider.js.map +1 -1
- package/dist/{sound.service-B4ZmXpH9.js → sound.service-AJwuk3yr.js} +1 -1
- package/dist/sound.service-AJwuk3yr.js.map +1 -0
- package/dist/{sound.service-DjlMvicQ.cjs → sound.service-CVsxhQkX.cjs} +1 -1
- package/dist/sound.service-CVsxhQkX.cjs.map +1 -0
- package/dist/{splash-screen-emCLYoVl.js → splash-screen-DANfqvlo.js} +23 -26
- package/dist/splash-screen-DANfqvlo.js.map +1 -0
- package/dist/splash-screen-K74cgU6S.cjs +38 -0
- package/dist/splash-screen-K74cgU6S.cjs.map +1 -0
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-DGDTkOvC.js → src-DAtcPmCb.js} +173 -175
- package/dist/src-DAtcPmCb.js.map +1 -0
- package/dist/src-DuRvYagm.cjs +237 -0
- package/dist/src-DuRvYagm.cjs.map +1 -0
- package/dist/{state-CumAEPQH.cjs → state-BWQiqN6I.cjs} +1 -1
- package/dist/state-BWQiqN6I.cjs.map +1 -0
- package/dist/{state-DMd_FUeA.js → state-DBA_gzJO.js} +1 -1
- package/dist/state-DBA_gzJO.js.map +1 -0
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +20 -12
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +21 -13
- package/dist/steps.js.map +1 -1
- package/dist/surface-COBvWWFb.cjs +7 -0
- package/dist/surface-COBvWWFb.cjs.map +1 -0
- package/dist/{surface-DNiYigsX.js → surface-DXk1X1tL.js} +9 -9
- package/dist/{surface-DNiYigsX.js.map → surface-DXk1X1tL.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +13 -4
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +14 -5
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +4 -10
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +5 -11
- package/dist/table.js.map +1 -1
- package/dist/{tabs-4T_4kCf-.js → tabs-BYhFWnsx.js} +7 -7
- package/dist/tabs-BYhFWnsx.js.map +1 -0
- package/dist/{tabs-Byxxt-AH.cjs → tabs-CJwB0fr0.cjs} +6 -6
- package/dist/tabs-CJwB0fr0.cjs.map +1 -0
- 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-kkYNk1ET.js → textarea-BjDx1w2g.js} +37 -41
- package/dist/textarea-BjDx1w2g.js.map +1 -0
- package/dist/{textarea-BwYwH9fu.cjs → textarea-CGgznhd6.cjs} +36 -40
- package/dist/textarea-CGgznhd6.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-BG0EnzYP.cjs → theme-BVul7lHS.cjs} +6 -6
- package/dist/{theme-BG0EnzYP.cjs.map → theme-BVul7lHS.cjs.map} +1 -1
- package/dist/{theme-DwQBl6sr.js → theme-Dvm5J8nh.js} +11 -11
- package/dist/{theme-DwQBl6sr.js.map → theme-Dvm5J8nh.js.map} +1 -1
- package/dist/{theme-button-BD8anzsZ.js → theme-button-Bko5ohFP.js} +2 -2
- package/dist/{theme-button-BD8anzsZ.js.map → theme-button-Bko5ohFP.js.map} +1 -1
- package/dist/{theme-button-DlrNoCMA.cjs → theme-button-YLY7zR1c.cjs} +1 -1
- package/dist/{theme-button-DlrNoCMA.cjs.map → theme-button-YLY7zR1c.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-CSt7JUBD.cjs.map → theme.interface-B-qxDsZQ.cjs.map} +1 -1
- package/dist/{theme.interface-odQEpZZH.js.map → theme.interface-B7caS5cg.js.map} +1 -1
- package/dist/theme.js +4 -4
- package/dist/{theme.service-Dv_55nfE.js → theme.service-D94nm7Bf.js} +1 -1
- package/dist/theme.service-D94nm7Bf.js.map +1 -0
- package/dist/{theme.service-pjkTM209.cjs → theme.service-h2fXQq7x.cjs} +1 -1
- package/dist/theme.service-h2fXQq7x.cjs.map +1 -0
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +14 -14
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +15 -15
- package/dist/tree.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +19 -2
- package/dist/types.js.map +1 -1
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js.map +1 -1
- package/dist/typography-ByF2k5yW.js +358 -0
- package/dist/typography-ByF2k5yW.js.map +1 -0
- package/dist/typography-Cfav17it.cjs +282 -0
- package/dist/typography-Cfav17it.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils-DIXndz6Q.cjs.map +1 -0
- package/dist/utils-dSPH7Oh9.js.map +1 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/visually-hidden.cjs +13 -13
- package/dist/visually-hidden.cjs.map +1 -1
- package/dist/visually-hidden.js +14 -14
- package/dist/visually-hidden.js.map +1 -1
- package/dist/window-Br1OmpL-.cjs +67 -0
- package/dist/window-Br1OmpL-.cjs.map +1 -0
- package/dist/{window-C76zstbV.js → window-CCmN4but.js} +24 -15
- package/dist/window-CCmN4but.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/surface.md +38 -22
- package/src/area/area.component.ts +249 -163
- package/src/area/area.service.test.ts +994 -1006
- package/src/area/area.service.ts +76 -72
- package/src/area/index.ts +7 -7
- package/src/area/lazy.ts +39 -42
- package/src/area/route.component.ts +54 -52
- package/src/area/router.types.ts +7 -7
- package/src/audio/emotional-sounds.ts +880 -801
- package/src/audio/sound.service.ts +26 -5
- package/src/avatar/avatar.ts +4 -4
- package/src/badge/badge.ts +15 -12
- package/src/badge/index.ts +1 -1
- package/src/boat/boat.ts +1 -1
- package/src/breadcrumb/breadcrumb.ts +37 -32
- package/src/busy/busy.ts +15 -12
- package/src/busy/index.ts +2 -2
- package/src/busy/spinner.ts +132 -119
- package/src/button/button.test.ts +5 -1
- package/src/button/button.ts +113 -72
- package/src/button/icon-button.ts +64 -46
- package/src/button/index.ts +2 -2
- package/src/calendar/calendar.test.ts +504 -0
- package/src/calendar/calendar.ts +587 -0
- package/src/calendar/index.ts +2 -0
- package/src/card/actions.ts +11 -9
- package/src/card/card.ts +79 -77
- package/src/card/content.ts +8 -6
- package/src/card/index.ts +4 -4
- package/src/card/media.ts +50 -50
- package/src/chips/assist-chip.ts +1 -1
- package/src/chips/chips.ts +1 -1
- package/src/chips/filter-chip.ts +1 -1
- package/src/chips/index.ts +1 -1
- package/src/chips/input-chip.ts +1 -1
- package/src/chips/suggestion-chip.ts +1 -1
- package/src/connectivity/connectivity-status.ts +90 -62
- package/src/content-drawer/drawer.service.ts +47 -36
- package/src/content-drawer/drawer.ts +31 -18
- package/src/content-drawer/index.ts +5 -5
- package/src/content-drawer/main.ts +9 -7
- package/src/content-drawer/sheet.ts +8 -6
- package/src/date-range-inline/date-range-inline.ts +523 -522
- package/src/date-range-inline/index.ts +2 -2
- package/src/delay/index.ts +1 -1
- package/src/details/details.ts +119 -105
- package/src/details/index.ts +1 -1
- package/src/directives/ai-badge.ts +1 -5
- package/src/directives/animate-text.ts +43 -31
- package/src/directives/art/effects/howl.ts +1 -4
- package/src/directives/art/effects/samwa.ts +11 -5
- package/src/directives/art/effects/snow.ts +1 -2
- package/src/directives/battery.ts +21 -12
- package/src/directives/confirm-click.ts +9 -17
- package/src/directives/cursor-glow.ts +1 -1
- package/src/directives/cycle-text.ts +7 -21
- package/src/directives/drag.ts +50 -45
- package/src/directives/fyi.ts +1 -6
- package/src/directives/gravity.ts +10 -8
- package/src/directives/hummingbird.ts +256 -107
- package/src/directives/index.ts +29 -29
- package/src/directives/intersect.ts +11 -11
- package/src/directives/layout.ts +25 -36
- package/src/directives/liquid.ts +4 -10
- package/src/directives/living-border.ts +7 -5
- package/src/directives/long-press.ts +2 -1
- package/src/directives/magnetic.ts +7 -6
- package/src/directives/nebula.ts +34 -28
- package/src/directives/overflow-within.ts +18 -20
- package/src/directives/reduced-motion.ts +9 -9
- package/src/directives/reveal.ts +193 -195
- package/src/directives/ripple.ts +9 -7
- package/src/directives/urgent.ts +3 -1
- package/src/directives/working-snake.ts +1 -1
- package/src/discovery/discovery.service.ts +198 -210
- package/src/discovery/index.ts +1 -1
- package/src/divider/divider.ts +49 -47
- package/src/divider/index.ts +1 -1
- package/src/dropdown/dropdown-content.ts +42 -40
- package/src/dropdown/index.ts +2 -2
- package/src/expand/expand-root.component.ts +70 -61
- package/src/expand/expand.component.ts +48 -43
- package/src/fab/fab.test.ts +1 -2
- package/src/fab/fab.ts +2 -4
- package/src/form/fields/autocomplete/autocomplete.scss +6 -2
- package/src/form/fields/autocomplete/autocomplete.ts +712 -724
- package/src/form/fields/autocomplete/index.ts +1 -1
- package/src/form/fields/checkbox/checkbox.ts +1 -4
- package/src/form/fields/chips/assist-chip.ts +69 -72
- package/src/form/fields/chips/chips.ts +14 -15
- package/src/form/fields/chips/filter-chip.ts +36 -32
- package/src/form/fields/chips/index.ts +5 -5
- package/src/form/fields/chips/input-chip.ts +130 -142
- package/src/form/fields/chips/suggestion-chip.ts +69 -72
- package/src/form/fields/date-range/date-range-dialog.ts +141 -194
- package/src/form/fields/date-range/date-range-helpers.ts +63 -64
- package/src/form/fields/date-range/date-range.test.ts +359 -122
- package/src/form/fields/date-range/date-range.ts +319 -395
- package/src/form/fields/date-range/index.ts +2 -2
- package/src/form/fields/input/index.ts +8 -8
- package/src/form/fields/input/input.scss +30 -26
- package/src/form/fields/input/input.test.ts +4 -1
- package/src/form/fields/input/input.ts +4 -20
- package/src/form/fields/radio-group/index.ts +2 -2
- package/src/form/fields/radio-group/radio-button.ts +8 -8
- package/src/form/fields/radio-group/radio-group.ts +4 -1
- package/src/form/fields/range/range.ts +3 -1
- package/src/form/fields/select/index.ts +2 -2
- package/src/form/fields/select/select.ts +51 -45
- package/src/form/fields/switch/switch.ts +13 -7
- package/src/form/fields/textarea/index.ts +1 -1
- package/src/form/fields/textarea/textarea.ts +44 -49
- package/src/form/form-summary.ts +15 -14
- package/src/form/form.test.ts +0 -1
- package/src/form/form.ts +11 -23
- package/src/icons/icon.ts +25 -25
- package/src/icons/index.ts +1 -1
- package/src/iframe/iframe.ts +11 -9
- package/src/index.ts +1 -0
- package/src/json/json.ts +9 -2
- package/src/kbd/kbd.ts +30 -28
- package/src/layout/scroll/index.ts +1 -1
- package/src/layout/scroll/scroll.ts +54 -54
- package/src/lightbox/lightbox-service.ts +27 -18
- package/src/lightbox/lightbox.directive.ts +2 -1
- package/src/lightbox/lightbox.ts +21 -38
- package/src/list/index.ts +3 -3
- package/src/list/list-item.ts +32 -26
- package/src/list/list.ts +13 -8
- package/src/menu/index.ts +2 -2
- package/src/menu/menu-item.ts +7 -5
- package/src/menu/menu.ts +8 -6
- package/src/nav-drawer/appbar.ts +9 -7
- package/src/nav-drawer/content.ts +10 -8
- package/src/nav-drawer/drawer.ts +29 -25
- package/src/nav-drawer/index.ts +6 -6
- package/src/navigation-bar/index.ts +2 -2
- package/src/navigation-bar/navigation-bar-item.ts +127 -118
- package/src/navigation-bar/navigation-bar.ts +103 -91
- package/src/navigation-rail/index.ts +2 -2
- package/src/navigation-rail/navigation-rail.ts +21 -22
- package/src/notification/index.ts +6 -6
- package/src/notification/notification-service.ts +1 -2
- package/src/notification/notification.scss +5 -1
- package/src/notification/notification.ts +1 -3
- package/src/notification/notify.ts +204 -207
- package/src/option/index.ts +1 -1
- package/src/option/option.ts +26 -25
- package/src/overlay/overlay.animations.ts +4 -14
- package/src/overlay/overlay.component.ts +110 -131
- package/src/overlay/overlay.confirm-body.ts +26 -48
- package/src/overlay/overlay.gestures.ts +8 -10
- package/src/overlay/overlay.layout.ts +1 -4
- package/src/overlay/overlay.positioning.ts +4 -15
- package/src/overlay/overlay.service.ts +9 -24
- package/src/overlay/overlay.stack.test.ts +4 -1
- package/src/overlay/overlay.stack.ts +4 -4
- package/src/overlay/overlay.types.ts +11 -20
- package/src/progress/index.ts +1 -1
- package/src/progress/progress.ts +135 -133
- package/src/rxjs-utils/index.ts +6 -6
- package/src/rxjs-utils/waitForElement.ts +20 -20
- package/src/rxjs-utils/waitForElementAll.ts +21 -21
- package/src/rxjs-utils/waitForElements.ts +27 -27
- package/src/rxjs-utils/waitForElementsAll.ts +27 -29
- package/src/rxjs-utils/waitUntil.ts +7 -12
- package/src/skeleton/skeleton.ts +39 -33
- package/src/slider/index.ts +2 -2
- package/src/slider/slide.ts +14 -12
- package/src/slider/slider.ts +24 -22
- package/src/splash-screen/index.ts +1 -1
- package/src/splash-screen/splash-screen.ts +26 -27
- package/src/state/active-host.ts +4 -5
- package/src/state/index.ts +34 -53
- package/src/state/persist.ts +14 -11
- package/src/state/schmancy-context.ts +88 -88
- package/src/state/state.test-d.ts +3 -13
- package/src/state/state.test.ts +1 -4
- package/src/steps/index.ts +3 -3
- package/src/steps/schmancy-step.ts +41 -31
- package/src/steps/schmancy-steps.ts +7 -5
- package/src/surface/index.ts +1 -1
- package/src/surface/surface.styles.ts +53 -104
- package/src/surface/surface.ts +10 -8
- package/src/table/index.ts +2 -2
- package/src/table/row.ts +1 -4
- package/src/table/table.ts +2 -5
- package/src/tabs/index.ts +2 -2
- package/src/tabs/tabs-group.ts +8 -6
- package/src/teleport/index.ts +2 -2
- package/src/test-utils/a11y.ts +1 -3
- package/src/theme/index.ts +17 -17
- package/src/theme/theme-audio-player.ts +18 -16
- package/src/theme/theme-controller-boat.ts +1 -1
- package/src/theme/theme-controller.ts +36 -32
- package/src/theme/theme.component.ts +5 -9
- package/src/theme/theme.events.ts +1 -1
- package/src/theme/theme.format.ts +7 -7
- package/src/theme/theme.service.ts +453 -468
- package/src/theme/theme.style.css +78 -23
- package/src/theme-button/index.ts +1 -1
- package/src/tooltip/tooltip.directive.ts +1 -1
- package/src/tree/index.ts +1 -1
- package/src/tree/tree.ts +24 -16
- package/src/types/surface.ts +38 -44
- package/src/typewriter/typewriter.directive.ts +30 -39
- package/src/typography/typography.ts +289 -269
- package/src/utils/animation.ts +2 -8
- package/src/utils/index.ts +6 -6
- package/src/utils/number.ts +480 -517
- package/src/utils/overlay-stack.ts +1 -3
- package/src/utils/search.ts +5 -9
- package/src/visually-hidden/visually-hidden.ts +15 -13
- package/src/window/window-manager.ts +6 -1
- package/src/window/window-position.ts +7 -5
- package/src/window/window.ts +143 -108
- package/types/src/calendar/calendar.d.ts +108 -0
- package/types/src/calendar/calendar.test.d.ts +1 -0
- package/types/src/calendar/index.d.ts +2 -0
- package/types/src/directives/cursor-glow.d.ts +1 -1
- package/types/src/directives/hummingbird.d.ts +3 -3
- package/types/src/form/fields/date-range/date-range-dialog.d.ts +24 -28
- package/types/src/form/fields/date-range/date-range.d.ts +35 -66
- package/types/src/form/fields/date-range/date-range.test.d.ts +1 -0
- package/types/src/form/fields/date-range/index.d.ts +1 -1
- package/types/src/index.d.ts +1 -0
- package/types/src/surface/surface.styles.d.ts +13 -6
- package/types/src/types/surface.d.ts +17 -22
- package/types/src/utils/number.d.ts +1 -1
- package/dist/SchmancyElement-OG71FtNv.js +0 -286
- package/dist/SchmancyElement-OG71FtNv.js.map +0 -1
- package/dist/SchmancyElement-PS1u0j1B.cjs +0 -2
- package/dist/SchmancyElement-PS1u0j1B.cjs.map +0 -1
- package/dist/area-CaEI33G0.cjs +0 -21
- package/dist/area-CaEI33G0.cjs.map +0 -1
- package/dist/area-DtCNCb8w.js.map +0 -1
- package/dist/audio-B924fI5N.cjs.map +0 -1
- package/dist/audio-DdN76ikW.js.map +0 -1
- package/dist/autocomplete-Dq3BkitV.cjs +0 -115
- package/dist/autocomplete-Dq3BkitV.cjs.map +0 -1
- package/dist/autocomplete-UNOknYUz.js.map +0 -1
- package/dist/busy--WqiXKnl.cjs +0 -134
- package/dist/busy--WqiXKnl.cjs.map +0 -1
- package/dist/busy-DzXyO0z6.js +0 -173
- package/dist/busy-DzXyO0z6.js.map +0 -1
- package/dist/button-CTvS5YX4.cjs.map +0 -1
- package/dist/button-DgoDfcJx.js.map +0 -1
- package/dist/card-C6ijJZpF.js.map +0 -1
- package/dist/card-Ci3_9Dd4.cjs +0 -177
- package/dist/card-Ci3_9Dd4.cjs.map +0 -1
- package/dist/chips-9eG-96_D.cjs.map +0 -1
- package/dist/chips-DF7akwz7.js.map +0 -1
- package/dist/date-range-C13_R3OA.js +0 -966
- package/dist/date-range-C13_R3OA.js.map +0 -1
- package/dist/date-range-Q2xj5Syc.cjs +0 -142
- package/dist/date-range-Q2xj5Syc.cjs.map +0 -1
- package/dist/date-range-inline-BnOD-ddB.js.map +0 -1
- package/dist/date-range-inline-DV2c_gWM.cjs.map +0 -1
- package/dist/details-B2-jECBh.cjs.map +0 -1
- package/dist/details-ByF66CyY.js.map +0 -1
- package/dist/directives-BL7mzVsA.js.map +0 -1
- package/dist/directives-DCb_LA9R.cjs.map +0 -1
- package/dist/divider-Bv2QiOZL.cjs +0 -57
- package/dist/divider-Bv2QiOZL.cjs.map +0 -1
- package/dist/divider-gYuz0zDU.js +0 -89
- package/dist/divider-gYuz0zDU.js.map +0 -1
- package/dist/expand-B9IUGVtc.cjs +0 -141
- package/dist/expand-B9IUGVtc.cjs.map +0 -1
- package/dist/expand-cZ8rfCWP.js.map +0 -1
- package/dist/form-DowzVsgI.cjs.map +0 -1
- package/dist/form-tG7LwDm4.js.map +0 -1
- package/dist/icons-BZeCloP9.cjs +0 -24
- package/dist/icons-BZeCloP9.cjs.map +0 -1
- package/dist/icons-Dup5skuk.js.map +0 -1
- package/dist/iframe-CDJjnNmo.cjs.map +0 -1
- package/dist/iframe-Xc3EPMZT.js.map +0 -1
- package/dist/input-DnmC6J1T.cjs.map +0 -1
- package/dist/input-cTyDxW9L.js.map +0 -1
- package/dist/input-chip-CV91URyU.cjs +0 -146
- package/dist/input-chip-CV91URyU.cjs.map +0 -1
- package/dist/input-chip-CYI17YOq.js.map +0 -1
- package/dist/layout-CNlZSJFU.cjs.map +0 -1
- package/dist/layout-DDxw0EwL.js.map +0 -1
- package/dist/lightbox-CH-y3rYB.js.map +0 -1
- package/dist/lightbox-CvtqoInF.cjs.map +0 -1
- package/dist/list-Dl8KfxrF.cjs +0 -40
- package/dist/list-Dl8KfxrF.cjs.map +0 -1
- package/dist/list-DrsawQ5R.js.map +0 -1
- package/dist/menu-BFRcTe3o.cjs.map +0 -1
- package/dist/menu-CsY5lMqY.js.map +0 -1
- package/dist/mixins-BoMURWag.cjs.map +0 -1
- package/dist/mixins-bCEXbwJV.js.map +0 -1
- package/dist/notification-DFKRMmSq.js.map +0 -1
- package/dist/notification-FBf3Mb2e.cjs.map +0 -1
- package/dist/option-Ct0lGdH3.js.map +0 -1
- package/dist/option-Il1KpU8M.cjs +0 -43
- package/dist/option-Il1KpU8M.cjs.map +0 -1
- package/dist/overlay-Bh8Q_R01.js.map +0 -1
- package/dist/overlay-sRXiMkjn.cjs.map +0 -1
- package/dist/overlay.confirm-body-CQihsR20.js.map +0 -1
- package/dist/overlay.confirm-body-Jc1EuMGs.cjs.map +0 -1
- package/dist/overlay.service-9Dp3g7ot.cjs.map +0 -1
- package/dist/overlay.service-BXPgS7ay.js.map +0 -1
- package/dist/progress-CWC5XYZ_.cjs +0 -51
- package/dist/progress-CWC5XYZ_.cjs.map +0 -1
- package/dist/progress-CYLshdo2.js.map +0 -1
- package/dist/radio-group-6kCgOgBL.cjs.map +0 -1
- package/dist/radio-group-bZtZHOj_.js.map +0 -1
- package/dist/select-CU3X-PIa.js.map +0 -1
- package/dist/select-MXsF8KsU.cjs +0 -56
- package/dist/select-MXsF8KsU.cjs.map +0 -1
- package/dist/sound.service-B4ZmXpH9.js.map +0 -1
- package/dist/sound.service-DjlMvicQ.cjs.map +0 -1
- package/dist/splash-screen-CN9dZcqC.cjs +0 -41
- package/dist/splash-screen-CN9dZcqC.cjs.map +0 -1
- package/dist/splash-screen-emCLYoVl.js.map +0 -1
- package/dist/src-DGDTkOvC.js.map +0 -1
- package/dist/src-DK3111z_.cjs +0 -240
- package/dist/src-DK3111z_.cjs.map +0 -1
- package/dist/state-CumAEPQH.cjs.map +0 -1
- package/dist/state-DMd_FUeA.js.map +0 -1
- package/dist/surface-DGI-FBoi.cjs +0 -7
- package/dist/surface-DGI-FBoi.cjs.map +0 -1
- package/dist/tabs-4T_4kCf-.js.map +0 -1
- package/dist/tabs-Byxxt-AH.cjs.map +0 -1
- package/dist/textarea-BwYwH9fu.cjs.map +0 -1
- package/dist/textarea-kkYNk1ET.js.map +0 -1
- package/dist/theme.service-Dv_55nfE.js.map +0 -1
- package/dist/theme.service-pjkTM209.cjs.map +0 -1
- package/dist/typography-BVkU11_q.js +0 -358
- package/dist/typography-BVkU11_q.js.map +0 -1
- package/dist/typography-aaQaIcNc.cjs +0 -282
- package/dist/typography-aaQaIcNc.cjs.map +0 -1
- package/dist/utils-DTa3QHxk.cjs.map +0 -1
- package/dist/utils-H8wNknWC.js.map +0 -1
- package/dist/window-C76zstbV.js.map +0 -1
- package/dist/window-CmB9XZzT.cjs +0 -58
- package/dist/window-CmB9XZzT.cjs.map +0 -1
- package/src/form/fields/date-range/date-range-presets.ts +0 -220
- package/src/form/fields/date-range/date-utils.ts +0 -58
- package/types/src/form/fields/date-range/date-range-presets.d.ts +0 -18
- package/types/src/form/fields/date-range/date-utils.d.ts +0 -15
- /package/dist/{hashContent-iRZJJWtE.cjs → hashContent--s09Ed_g.cjs} +0 -0
- /package/dist/{hashContent-BqU6v1Xr.js → hashContent-CAvrQ56N.js} +0 -0
- /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-4P2v57ke.cjs} +0 -0
- /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-JMFdgQSl.js} +0 -0
- /package/dist/{theme.interface-CSt7JUBD.cjs → theme.interface-B-qxDsZQ.cjs} +0 -0
- /package/dist/{theme.interface-odQEpZZH.js → theme.interface-B7caS5cg.js} +0 -0
- /package/dist/{utils-DTa3QHxk.cjs → utils-DIXndz6Q.cjs} +0 -0
- /package/dist/{utils-H8wNknWC.js → utils-dSPH7Oh9.js} +0 -0
|
@@ -1,522 +1,523 @@
|
|
|
1
|
-
import { html } from 'lit'
|
|
2
|
-
import { customElement, property, state } from 'lit/decorators.js'
|
|
3
|
-
import { SchmancyFormField } from '@mixins/index'
|
|
4
|
-
|
|
5
|
-
declare global {
|
|
6
|
-
interface HTMLElementTagNameMap {
|
|
7
|
-
'schmancy-date-range-inline': SchmancyDateRangeInline
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type SchmancyDateRangeInlineChangeEvent = CustomEvent<{
|
|
12
|
-
dateFrom: string
|
|
13
|
-
dateTo: string
|
|
14
|
-
isValid: boolean
|
|
15
|
-
}>
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Smart inline date range picker that handles all the heavy lifting.
|
|
19
|
-
* Auto-corrects invalid ranges, provides smart defaults, and validates dates.
|
|
20
|
-
*/
|
|
21
|
-
@customElement('schmancy-date-range-inline')
|
|
22
|
-
export default class SchmancyDateRangeInline extends SchmancyFormField() {
|
|
23
|
-
/**
|
|
24
|
-
* Input type - 'date' or 'datetime-local'
|
|
25
|
-
*/
|
|
26
|
-
@property({ type: String })
|
|
27
|
-
type: 'date' | 'datetime-local' = 'date'
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* From date configuration
|
|
31
|
-
*/
|
|
32
|
-
@property({ type: Object })
|
|
33
|
-
dateFrom: { label: string; value: string } = { label: 'From', value: '' }
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* To date configuration
|
|
37
|
-
*/
|
|
38
|
-
@property({ type: Object })
|
|
39
|
-
dateTo: { label: string; value: string } = { label: 'To', value: '' }
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Minimum allowed date
|
|
43
|
-
*/
|
|
44
|
-
@property({ type: String })
|
|
45
|
-
minDate?: string
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Maximum allowed date
|
|
49
|
-
*/
|
|
50
|
-
@property({ type: String })
|
|
51
|
-
maxDate?: string
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Compact mode for smaller UI
|
|
55
|
-
*/
|
|
56
|
-
@property({ type: Boolean })
|
|
57
|
-
compact = false
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Auto-correct invalid date ranges
|
|
61
|
-
*/
|
|
62
|
-
@property({ type: Boolean })
|
|
63
|
-
autoCorrect = true
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Minimum gap between dates (in days)
|
|
67
|
-
*/
|
|
68
|
-
@property({ type: Number })
|
|
69
|
-
minGap = 0
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Maximum gap between dates (in days)
|
|
73
|
-
*/
|
|
74
|
-
@property({ type: Number })
|
|
75
|
-
maxGap?: number
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Default gap when auto-setting dates (in days)
|
|
79
|
-
*/
|
|
80
|
-
@property({ type: Number })
|
|
81
|
-
defaultGap = 1
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Whether to allow same date selection
|
|
85
|
-
*/
|
|
86
|
-
@property({ type: Boolean })
|
|
87
|
-
allowSameDate = false
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Internal validation state
|
|
91
|
-
*/
|
|
92
|
-
@state()
|
|
93
|
-
private validationState = {
|
|
94
|
-
dateFromError: '',
|
|
95
|
-
dateToError: '',
|
|
96
|
-
rangeError: ''
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
connectedCallback() {
|
|
100
|
-
super.connectedCallback()
|
|
101
|
-
// Initialize with smart defaults if no values provided
|
|
102
|
-
if (!this.dateFrom.value && !this.dateTo.value) {
|
|
103
|
-
this.setSmartDefaults()
|
|
104
|
-
} else {
|
|
105
|
-
// Validate initial values
|
|
106
|
-
this.validateAndCorrect()
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Set smart default dates based on context
|
|
112
|
-
*/
|
|
113
|
-
private setSmartDefaults() {
|
|
114
|
-
const today = new Date()
|
|
115
|
-
const tomorrow = new Date(today)
|
|
116
|
-
tomorrow.setDate(tomorrow.getDate() + this.defaultGap)
|
|
117
|
-
|
|
118
|
-
const format = this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'
|
|
119
|
-
|
|
120
|
-
this.dateFrom = {
|
|
121
|
-
...this.dateFrom,
|
|
122
|
-
value: this.formatDate(today, format)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
this.dateTo = {
|
|
126
|
-
...this.dateTo,
|
|
127
|
-
value: this.formatDate(tomorrow, format)
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Format date to required string format
|
|
133
|
-
*/
|
|
134
|
-
private formatDate(date: Date, format: string): string {
|
|
135
|
-
const year = date.getFullYear()
|
|
136
|
-
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
137
|
-
const day = String(date.getDate()).padStart(2, '0')
|
|
138
|
-
|
|
139
|
-
if (format === 'YYYY-MM-DD') {
|
|
140
|
-
return `${year}-${month}-${day}`
|
|
141
|
-
} else {
|
|
142
|
-
const hours = String(date.getHours()).padStart(2, '0')
|
|
143
|
-
const minutes = String(date.getMinutes()).padStart(2, '0')
|
|
144
|
-
return `${year}-${month}-${day}T${hours}:${minutes}`
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Parse date string to Date object
|
|
150
|
-
*/
|
|
151
|
-
private parseDate(dateStr: string): Date | null {
|
|
152
|
-
if (!dateStr) return null
|
|
153
|
-
const date = new Date(dateStr)
|
|
154
|
-
return isNaN(date.getTime()) ? null : date
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Calculate days between two dates
|
|
159
|
-
*/
|
|
160
|
-
private getDaysBetween(date1: Date, date2: Date): number {
|
|
161
|
-
const msPerDay = 24 * 60 * 60 * 1000
|
|
162
|
-
return Math.floor((date2.getTime() - date1.getTime()) / msPerDay)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Handle from date change with validation and auto-correction
|
|
167
|
-
*/
|
|
168
|
-
private handleDateFromChange(e: Event) {
|
|
169
|
-
const input = e.target as HTMLInputElement
|
|
170
|
-
const newValue = input.value
|
|
171
|
-
|
|
172
|
-
// Update the value
|
|
173
|
-
this.dateFrom = { ...this.dateFrom, value: newValue }
|
|
174
|
-
|
|
175
|
-
// Clear previous errors
|
|
176
|
-
this.validationState = { ...this.validationState, dateFromError: '', rangeError: '' }
|
|
177
|
-
|
|
178
|
-
if (!newValue) {
|
|
179
|
-
// Allow empty for optional fields
|
|
180
|
-
if (!this.required) {
|
|
181
|
-
this.emitChange()
|
|
182
|
-
return
|
|
183
|
-
}
|
|
184
|
-
this.validationState = { ...this.validationState, dateFromError: 'Start date is required' }
|
|
185
|
-
this.error = true
|
|
186
|
-
return
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Validate and potentially auto-correct
|
|
190
|
-
this.validateAndCorrect('from')
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Handle to date change with validation and auto-correction
|
|
195
|
-
*/
|
|
196
|
-
private handleDateToChange(e: Event) {
|
|
197
|
-
const input = e.target as HTMLInputElement
|
|
198
|
-
const newValue = input.value
|
|
199
|
-
|
|
200
|
-
// Update the value
|
|
201
|
-
this.dateTo = { ...this.dateTo, value: newValue }
|
|
202
|
-
|
|
203
|
-
// Clear previous errors
|
|
204
|
-
this.validationState = { ...this.validationState, dateToError: '', rangeError: '' }
|
|
205
|
-
|
|
206
|
-
if (!newValue) {
|
|
207
|
-
// Allow empty for optional fields
|
|
208
|
-
if (!this.required) {
|
|
209
|
-
this.emitChange()
|
|
210
|
-
return
|
|
211
|
-
}
|
|
212
|
-
this.validationState = { ...this.validationState, dateToError: 'End date is required' }
|
|
213
|
-
this.error = true
|
|
214
|
-
return
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// Validate and potentially auto-correct
|
|
218
|
-
this.validateAndCorrect('to')
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Validate dates and auto-correct if enabled
|
|
223
|
-
*/
|
|
224
|
-
private validateAndCorrect(changedField?: 'from' | 'to') {
|
|
225
|
-
const fromDate = this.parseDate(this.dateFrom.value)
|
|
226
|
-
const toDate = this.parseDate(this.dateTo.value)
|
|
227
|
-
|
|
228
|
-
// Reset validation state
|
|
229
|
-
let hasError = false
|
|
230
|
-
const newValidationState = { dateFromError: '', dateToError: '', rangeError: '' }
|
|
231
|
-
|
|
232
|
-
// Validate individual dates
|
|
233
|
-
if (this.dateFrom.value && !fromDate) {
|
|
234
|
-
newValidationState.dateFromError = 'Invalid date format'
|
|
235
|
-
hasError = true
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
if (this.dateTo.value && !toDate) {
|
|
239
|
-
newValidationState.dateToError = 'Invalid date format'
|
|
240
|
-
hasError = true
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// If both dates are valid, check range constraints
|
|
244
|
-
if (fromDate && toDate) {
|
|
245
|
-
const daysBetween = this.getDaysBetween(fromDate, toDate)
|
|
246
|
-
|
|
247
|
-
// Check if from date is after to date
|
|
248
|
-
if (fromDate > toDate) {
|
|
249
|
-
if (this.autoCorrect) {
|
|
250
|
-
// Auto-correct based on which field changed
|
|
251
|
-
if (changedField === 'from') {
|
|
252
|
-
// User changed from date, adjust to date
|
|
253
|
-
const newToDate = new Date(fromDate)
|
|
254
|
-
newToDate.setDate(newToDate.getDate() + this.defaultGap)
|
|
255
|
-
this.dateTo = {
|
|
256
|
-
...this.dateTo,
|
|
257
|
-
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
258
|
-
}
|
|
259
|
-
} else if (changedField === 'to') {
|
|
260
|
-
// User changed to date, adjust from date
|
|
261
|
-
const newFromDate = new Date(toDate)
|
|
262
|
-
newFromDate.setDate(newFromDate.getDate() - this.defaultGap)
|
|
263
|
-
this.dateFrom = {
|
|
264
|
-
...this.dateFrom,
|
|
265
|
-
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
266
|
-
}
|
|
267
|
-
} else {
|
|
268
|
-
// No specific field changed, swap them
|
|
269
|
-
const tempValue = this.dateFrom.value
|
|
270
|
-
this.dateFrom = { ...this.dateFrom, value: this.dateTo.value }
|
|
271
|
-
this.dateTo = { ...this.dateTo, value: tempValue }
|
|
272
|
-
}
|
|
273
|
-
// Re-validate after correction
|
|
274
|
-
this.validateAndCorrect()
|
|
275
|
-
return
|
|
276
|
-
} else {
|
|
277
|
-
newValidationState.rangeError = 'End date must be after start date'
|
|
278
|
-
hasError = true
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Check same date constraint
|
|
283
|
-
if (!this.allowSameDate && daysBetween === 0) {
|
|
284
|
-
if (this.autoCorrect && changedField) {
|
|
285
|
-
// Auto-correct by adjusting the other date
|
|
286
|
-
if (changedField === 'from') {
|
|
287
|
-
const newToDate = new Date(fromDate)
|
|
288
|
-
newToDate.setDate(newToDate.getDate() + this.defaultGap)
|
|
289
|
-
this.dateTo = {
|
|
290
|
-
...this.dateTo,
|
|
291
|
-
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
292
|
-
}
|
|
293
|
-
} else {
|
|
294
|
-
const newFromDate = new Date(toDate)
|
|
295
|
-
newFromDate.setDate(newFromDate.getDate() - this.defaultGap)
|
|
296
|
-
this.dateFrom = {
|
|
297
|
-
...this.dateFrom,
|
|
298
|
-
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
// Re-validate after correction
|
|
302
|
-
this.validateAndCorrect()
|
|
303
|
-
return
|
|
304
|
-
} else {
|
|
305
|
-
newValidationState.rangeError = 'Start and end dates cannot be the same'
|
|
306
|
-
hasError = true
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// Check minimum gap
|
|
311
|
-
if (this.minGap > 0 && daysBetween < this.minGap) {
|
|
312
|
-
if (this.autoCorrect && changedField) {
|
|
313
|
-
// Auto-correct to maintain minimum gap
|
|
314
|
-
if (changedField === 'from') {
|
|
315
|
-
const newToDate = new Date(fromDate)
|
|
316
|
-
newToDate.setDate(newToDate.getDate() + this.minGap)
|
|
317
|
-
this.dateTo = {
|
|
318
|
-
...this.dateTo,
|
|
319
|
-
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
320
|
-
}
|
|
321
|
-
} else {
|
|
322
|
-
const newFromDate = new Date(toDate)
|
|
323
|
-
newFromDate.setDate(newFromDate.getDate() - this.minGap)
|
|
324
|
-
this.dateFrom = {
|
|
325
|
-
...this.dateFrom,
|
|
326
|
-
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
// Re-validate after correction
|
|
330
|
-
this.validateAndCorrect()
|
|
331
|
-
return
|
|
332
|
-
} else {
|
|
333
|
-
newValidationState.rangeError = `Minimum ${this.minGap} day${this.minGap > 1 ? 's' : ''} required between dates`
|
|
334
|
-
hasError = true
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// Check maximum gap
|
|
339
|
-
if (this.maxGap !== undefined && daysBetween > this.maxGap) {
|
|
340
|
-
if (this.autoCorrect && changedField) {
|
|
341
|
-
// Auto-correct to maintain maximum gap
|
|
342
|
-
if (changedField === 'from') {
|
|
343
|
-
const newToDate = new Date(fromDate)
|
|
344
|
-
newToDate.setDate(newToDate.getDate() + this.maxGap)
|
|
345
|
-
this.dateTo = {
|
|
346
|
-
...this.dateTo,
|
|
347
|
-
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
348
|
-
}
|
|
349
|
-
} else {
|
|
350
|
-
const newFromDate = new Date(toDate)
|
|
351
|
-
newFromDate.setDate(newFromDate.getDate() - this.maxGap)
|
|
352
|
-
this.dateFrom = {
|
|
353
|
-
...this.dateFrom,
|
|
354
|
-
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
// Re-validate after correction
|
|
358
|
-
this.validateAndCorrect()
|
|
359
|
-
return
|
|
360
|
-
} else {
|
|
361
|
-
newValidationState.rangeError = `Maximum ${this.maxGap} day${this.maxGap > 1 ? 's' : ''} allowed between dates`
|
|
362
|
-
hasError = true
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Check against min/max date constraints
|
|
367
|
-
if (this.minDate) {
|
|
368
|
-
const minDateObj = this.parseDate(this.minDate)
|
|
369
|
-
if (minDateObj && fromDate < minDateObj) {
|
|
370
|
-
newValidationState.dateFromError = 'Date is before minimum allowed date'
|
|
371
|
-
hasError = true
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
if (this.maxDate) {
|
|
376
|
-
const maxDateObj = this.parseDate(this.maxDate)
|
|
377
|
-
if (maxDateObj && toDate > maxDateObj) {
|
|
378
|
-
newValidationState.dateToError = 'Date is after maximum allowed date'
|
|
379
|
-
hasError = true
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// Update validation state
|
|
385
|
-
this.validationState = newValidationState
|
|
386
|
-
this.error = hasError
|
|
387
|
-
|
|
388
|
-
// Emit change event with validation status
|
|
389
|
-
this.emitChange()
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* Get computed min date for the "to" field based on "from" value
|
|
394
|
-
*/
|
|
395
|
-
private getComputedMinDateTo(): string | undefined {
|
|
396
|
-
if (!this.dateFrom.value) return this.minDate
|
|
397
|
-
|
|
398
|
-
const fromDate = this.parseDate(this.dateFrom.value)
|
|
399
|
-
if (!fromDate) return this.minDate
|
|
400
|
-
|
|
401
|
-
// Calculate minimum date based on constraints
|
|
402
|
-
const minToDate = new Date(fromDate)
|
|
403
|
-
|
|
404
|
-
if (!this.allowSameDate) {
|
|
405
|
-
minToDate.setDate(minToDate.getDate() + 1)
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
if (this.minGap > 0) {
|
|
409
|
-
minToDate.setDate(fromDate.getDate() + this.minGap)
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// Compare with global minDate if set
|
|
413
|
-
if (this.minDate) {
|
|
414
|
-
const globalMin = this.parseDate(this.minDate)
|
|
415
|
-
if (globalMin && globalMin > minToDate) {
|
|
416
|
-
return this.minDate
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
return this.formatDate(minToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Get computed max date for the "from" field based on "to" value
|
|
425
|
-
*/
|
|
426
|
-
private getComputedMaxDateFrom(): string | undefined {
|
|
427
|
-
if (!this.dateTo.value) return this.maxDate
|
|
428
|
-
|
|
429
|
-
const toDate = this.parseDate(this.dateTo.value)
|
|
430
|
-
if (!toDate) return this.maxDate
|
|
431
|
-
|
|
432
|
-
// Calculate maximum date based on constraints
|
|
433
|
-
const maxFromDate = new Date(toDate)
|
|
434
|
-
|
|
435
|
-
if (!this.allowSameDate) {
|
|
436
|
-
maxFromDate.setDate(maxFromDate.getDate() - 1)
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
if (this.minGap > 0) {
|
|
440
|
-
maxFromDate.setDate(toDate.getDate() - this.minGap)
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
// Compare with global maxDate if set
|
|
444
|
-
if (this.maxDate) {
|
|
445
|
-
const globalMax = this.parseDate(this.maxDate)
|
|
446
|
-
if (globalMax && globalMax < maxFromDate) {
|
|
447
|
-
return this.maxDate
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
return this.formatDate(maxFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
emitChange() {
|
|
455
|
-
const isValid =
|
|
456
|
-
|
|
457
|
-
!!this.
|
|
458
|
-
|
|
459
|
-
!this.validationState.
|
|
460
|
-
!this.validationState.
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
.
|
|
487
|
-
.
|
|
488
|
-
|
|
489
|
-
.
|
|
490
|
-
.
|
|
491
|
-
|
|
492
|
-
.
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
.
|
|
507
|
-
.
|
|
508
|
-
.
|
|
509
|
-
.
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
.
|
|
513
|
-
.
|
|
514
|
-
.
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
}
|
|
1
|
+
import { html } from 'lit'
|
|
2
|
+
import { customElement, property, state } from 'lit/decorators.js'
|
|
3
|
+
import { SchmancyFormField } from '@mixins/index'
|
|
4
|
+
|
|
5
|
+
declare global {
|
|
6
|
+
interface HTMLElementTagNameMap {
|
|
7
|
+
'schmancy-date-range-inline': SchmancyDateRangeInline
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type SchmancyDateRangeInlineChangeEvent = CustomEvent<{
|
|
12
|
+
dateFrom: string
|
|
13
|
+
dateTo: string
|
|
14
|
+
isValid: boolean
|
|
15
|
+
}>
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Smart inline date range picker that handles all the heavy lifting.
|
|
19
|
+
* Auto-corrects invalid ranges, provides smart defaults, and validates dates.
|
|
20
|
+
*/
|
|
21
|
+
@customElement('schmancy-date-range-inline')
|
|
22
|
+
export default class SchmancyDateRangeInline extends SchmancyFormField() {
|
|
23
|
+
/**
|
|
24
|
+
* Input type - 'date' or 'datetime-local'
|
|
25
|
+
*/
|
|
26
|
+
@property({ type: String })
|
|
27
|
+
type: 'date' | 'datetime-local' = 'date'
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* From date configuration
|
|
31
|
+
*/
|
|
32
|
+
@property({ type: Object })
|
|
33
|
+
dateFrom: { label: string; value: string } = { label: 'From', value: '' }
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* To date configuration
|
|
37
|
+
*/
|
|
38
|
+
@property({ type: Object })
|
|
39
|
+
dateTo: { label: string; value: string } = { label: 'To', value: '' }
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Minimum allowed date
|
|
43
|
+
*/
|
|
44
|
+
@property({ type: String })
|
|
45
|
+
minDate?: string
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Maximum allowed date
|
|
49
|
+
*/
|
|
50
|
+
@property({ type: String })
|
|
51
|
+
maxDate?: string
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Compact mode for smaller UI
|
|
55
|
+
*/
|
|
56
|
+
@property({ type: Boolean })
|
|
57
|
+
compact = false
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Auto-correct invalid date ranges
|
|
61
|
+
*/
|
|
62
|
+
@property({ type: Boolean })
|
|
63
|
+
autoCorrect = true
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Minimum gap between dates (in days)
|
|
67
|
+
*/
|
|
68
|
+
@property({ type: Number })
|
|
69
|
+
minGap = 0
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Maximum gap between dates (in days)
|
|
73
|
+
*/
|
|
74
|
+
@property({ type: Number })
|
|
75
|
+
maxGap?: number
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Default gap when auto-setting dates (in days)
|
|
79
|
+
*/
|
|
80
|
+
@property({ type: Number })
|
|
81
|
+
defaultGap = 1
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Whether to allow same date selection
|
|
85
|
+
*/
|
|
86
|
+
@property({ type: Boolean })
|
|
87
|
+
allowSameDate = false
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Internal validation state
|
|
91
|
+
*/
|
|
92
|
+
@state()
|
|
93
|
+
private validationState = {
|
|
94
|
+
dateFromError: '',
|
|
95
|
+
dateToError: '',
|
|
96
|
+
rangeError: '',
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
connectedCallback() {
|
|
100
|
+
super.connectedCallback()
|
|
101
|
+
// Initialize with smart defaults if no values provided
|
|
102
|
+
if (!this.dateFrom.value && !this.dateTo.value) {
|
|
103
|
+
this.setSmartDefaults()
|
|
104
|
+
} else {
|
|
105
|
+
// Validate initial values
|
|
106
|
+
this.validateAndCorrect()
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Set smart default dates based on context
|
|
112
|
+
*/
|
|
113
|
+
private setSmartDefaults() {
|
|
114
|
+
const today = new Date()
|
|
115
|
+
const tomorrow = new Date(today)
|
|
116
|
+
tomorrow.setDate(tomorrow.getDate() + this.defaultGap)
|
|
117
|
+
|
|
118
|
+
const format = this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'
|
|
119
|
+
|
|
120
|
+
this.dateFrom = {
|
|
121
|
+
...this.dateFrom,
|
|
122
|
+
value: this.formatDate(today, format),
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
this.dateTo = {
|
|
126
|
+
...this.dateTo,
|
|
127
|
+
value: this.formatDate(tomorrow, format),
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Format date to required string format
|
|
133
|
+
*/
|
|
134
|
+
private formatDate(date: Date, format: string): string {
|
|
135
|
+
const year = date.getFullYear()
|
|
136
|
+
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
137
|
+
const day = String(date.getDate()).padStart(2, '0')
|
|
138
|
+
|
|
139
|
+
if (format === 'YYYY-MM-DD') {
|
|
140
|
+
return `${year}-${month}-${day}`
|
|
141
|
+
} else {
|
|
142
|
+
const hours = String(date.getHours()).padStart(2, '0')
|
|
143
|
+
const minutes = String(date.getMinutes()).padStart(2, '0')
|
|
144
|
+
return `${year}-${month}-${day}T${hours}:${minutes}`
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Parse date string to Date object
|
|
150
|
+
*/
|
|
151
|
+
private parseDate(dateStr: string): Date | null {
|
|
152
|
+
if (!dateStr) return null
|
|
153
|
+
const date = new Date(dateStr)
|
|
154
|
+
return isNaN(date.getTime()) ? null : date
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Calculate days between two dates
|
|
159
|
+
*/
|
|
160
|
+
private getDaysBetween(date1: Date, date2: Date): number {
|
|
161
|
+
const msPerDay = 24 * 60 * 60 * 1000
|
|
162
|
+
return Math.floor((date2.getTime() - date1.getTime()) / msPerDay)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Handle from date change with validation and auto-correction
|
|
167
|
+
*/
|
|
168
|
+
private handleDateFromChange(e: Event) {
|
|
169
|
+
const input = e.target as HTMLInputElement
|
|
170
|
+
const newValue = input.value
|
|
171
|
+
|
|
172
|
+
// Update the value
|
|
173
|
+
this.dateFrom = { ...this.dateFrom, value: newValue }
|
|
174
|
+
|
|
175
|
+
// Clear previous errors
|
|
176
|
+
this.validationState = { ...this.validationState, dateFromError: '', rangeError: '' }
|
|
177
|
+
|
|
178
|
+
if (!newValue) {
|
|
179
|
+
// Allow empty for optional fields
|
|
180
|
+
if (!this.required) {
|
|
181
|
+
this.emitChange()
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
this.validationState = { ...this.validationState, dateFromError: 'Start date is required' }
|
|
185
|
+
this.error = true
|
|
186
|
+
return
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Validate and potentially auto-correct
|
|
190
|
+
this.validateAndCorrect('from')
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Handle to date change with validation and auto-correction
|
|
195
|
+
*/
|
|
196
|
+
private handleDateToChange(e: Event) {
|
|
197
|
+
const input = e.target as HTMLInputElement
|
|
198
|
+
const newValue = input.value
|
|
199
|
+
|
|
200
|
+
// Update the value
|
|
201
|
+
this.dateTo = { ...this.dateTo, value: newValue }
|
|
202
|
+
|
|
203
|
+
// Clear previous errors
|
|
204
|
+
this.validationState = { ...this.validationState, dateToError: '', rangeError: '' }
|
|
205
|
+
|
|
206
|
+
if (!newValue) {
|
|
207
|
+
// Allow empty for optional fields
|
|
208
|
+
if (!this.required) {
|
|
209
|
+
this.emitChange()
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
this.validationState = { ...this.validationState, dateToError: 'End date is required' }
|
|
213
|
+
this.error = true
|
|
214
|
+
return
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Validate and potentially auto-correct
|
|
218
|
+
this.validateAndCorrect('to')
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Validate dates and auto-correct if enabled
|
|
223
|
+
*/
|
|
224
|
+
private validateAndCorrect(changedField?: 'from' | 'to') {
|
|
225
|
+
const fromDate = this.parseDate(this.dateFrom.value)
|
|
226
|
+
const toDate = this.parseDate(this.dateTo.value)
|
|
227
|
+
|
|
228
|
+
// Reset validation state
|
|
229
|
+
let hasError = false
|
|
230
|
+
const newValidationState = { dateFromError: '', dateToError: '', rangeError: '' }
|
|
231
|
+
|
|
232
|
+
// Validate individual dates
|
|
233
|
+
if (this.dateFrom.value && !fromDate) {
|
|
234
|
+
newValidationState.dateFromError = 'Invalid date format'
|
|
235
|
+
hasError = true
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (this.dateTo.value && !toDate) {
|
|
239
|
+
newValidationState.dateToError = 'Invalid date format'
|
|
240
|
+
hasError = true
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// If both dates are valid, check range constraints
|
|
244
|
+
if (fromDate && toDate) {
|
|
245
|
+
const daysBetween = this.getDaysBetween(fromDate, toDate)
|
|
246
|
+
|
|
247
|
+
// Check if from date is after to date
|
|
248
|
+
if (fromDate > toDate) {
|
|
249
|
+
if (this.autoCorrect) {
|
|
250
|
+
// Auto-correct based on which field changed
|
|
251
|
+
if (changedField === 'from') {
|
|
252
|
+
// User changed from date, adjust to date
|
|
253
|
+
const newToDate = new Date(fromDate)
|
|
254
|
+
newToDate.setDate(newToDate.getDate() + this.defaultGap)
|
|
255
|
+
this.dateTo = {
|
|
256
|
+
...this.dateTo,
|
|
257
|
+
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
258
|
+
}
|
|
259
|
+
} else if (changedField === 'to') {
|
|
260
|
+
// User changed to date, adjust from date
|
|
261
|
+
const newFromDate = new Date(toDate)
|
|
262
|
+
newFromDate.setDate(newFromDate.getDate() - this.defaultGap)
|
|
263
|
+
this.dateFrom = {
|
|
264
|
+
...this.dateFrom,
|
|
265
|
+
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
266
|
+
}
|
|
267
|
+
} else {
|
|
268
|
+
// No specific field changed, swap them
|
|
269
|
+
const tempValue = this.dateFrom.value
|
|
270
|
+
this.dateFrom = { ...this.dateFrom, value: this.dateTo.value }
|
|
271
|
+
this.dateTo = { ...this.dateTo, value: tempValue }
|
|
272
|
+
}
|
|
273
|
+
// Re-validate after correction
|
|
274
|
+
this.validateAndCorrect()
|
|
275
|
+
return
|
|
276
|
+
} else {
|
|
277
|
+
newValidationState.rangeError = 'End date must be after start date'
|
|
278
|
+
hasError = true
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Check same date constraint
|
|
283
|
+
if (!this.allowSameDate && daysBetween === 0) {
|
|
284
|
+
if (this.autoCorrect && changedField) {
|
|
285
|
+
// Auto-correct by adjusting the other date
|
|
286
|
+
if (changedField === 'from') {
|
|
287
|
+
const newToDate = new Date(fromDate)
|
|
288
|
+
newToDate.setDate(newToDate.getDate() + this.defaultGap)
|
|
289
|
+
this.dateTo = {
|
|
290
|
+
...this.dateTo,
|
|
291
|
+
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
292
|
+
}
|
|
293
|
+
} else {
|
|
294
|
+
const newFromDate = new Date(toDate)
|
|
295
|
+
newFromDate.setDate(newFromDate.getDate() - this.defaultGap)
|
|
296
|
+
this.dateFrom = {
|
|
297
|
+
...this.dateFrom,
|
|
298
|
+
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Re-validate after correction
|
|
302
|
+
this.validateAndCorrect()
|
|
303
|
+
return
|
|
304
|
+
} else {
|
|
305
|
+
newValidationState.rangeError = 'Start and end dates cannot be the same'
|
|
306
|
+
hasError = true
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Check minimum gap
|
|
311
|
+
if (this.minGap > 0 && daysBetween < this.minGap) {
|
|
312
|
+
if (this.autoCorrect && changedField) {
|
|
313
|
+
// Auto-correct to maintain minimum gap
|
|
314
|
+
if (changedField === 'from') {
|
|
315
|
+
const newToDate = new Date(fromDate)
|
|
316
|
+
newToDate.setDate(newToDate.getDate() + this.minGap)
|
|
317
|
+
this.dateTo = {
|
|
318
|
+
...this.dateTo,
|
|
319
|
+
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
320
|
+
}
|
|
321
|
+
} else {
|
|
322
|
+
const newFromDate = new Date(toDate)
|
|
323
|
+
newFromDate.setDate(newFromDate.getDate() - this.minGap)
|
|
324
|
+
this.dateFrom = {
|
|
325
|
+
...this.dateFrom,
|
|
326
|
+
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// Re-validate after correction
|
|
330
|
+
this.validateAndCorrect()
|
|
331
|
+
return
|
|
332
|
+
} else {
|
|
333
|
+
newValidationState.rangeError = `Minimum ${this.minGap} day${this.minGap > 1 ? 's' : ''} required between dates`
|
|
334
|
+
hasError = true
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Check maximum gap
|
|
339
|
+
if (this.maxGap !== undefined && daysBetween > this.maxGap) {
|
|
340
|
+
if (this.autoCorrect && changedField) {
|
|
341
|
+
// Auto-correct to maintain maximum gap
|
|
342
|
+
if (changedField === 'from') {
|
|
343
|
+
const newToDate = new Date(fromDate)
|
|
344
|
+
newToDate.setDate(newToDate.getDate() + this.maxGap)
|
|
345
|
+
this.dateTo = {
|
|
346
|
+
...this.dateTo,
|
|
347
|
+
value: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
const newFromDate = new Date(toDate)
|
|
351
|
+
newFromDate.setDate(newFromDate.getDate() - this.maxGap)
|
|
352
|
+
this.dateFrom = {
|
|
353
|
+
...this.dateFrom,
|
|
354
|
+
value: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'),
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Re-validate after correction
|
|
358
|
+
this.validateAndCorrect()
|
|
359
|
+
return
|
|
360
|
+
} else {
|
|
361
|
+
newValidationState.rangeError = `Maximum ${this.maxGap} day${this.maxGap > 1 ? 's' : ''} allowed between dates`
|
|
362
|
+
hasError = true
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Check against min/max date constraints
|
|
367
|
+
if (this.minDate) {
|
|
368
|
+
const minDateObj = this.parseDate(this.minDate)
|
|
369
|
+
if (minDateObj && fromDate < minDateObj) {
|
|
370
|
+
newValidationState.dateFromError = 'Date is before minimum allowed date'
|
|
371
|
+
hasError = true
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (this.maxDate) {
|
|
376
|
+
const maxDateObj = this.parseDate(this.maxDate)
|
|
377
|
+
if (maxDateObj && toDate > maxDateObj) {
|
|
378
|
+
newValidationState.dateToError = 'Date is after maximum allowed date'
|
|
379
|
+
hasError = true
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Update validation state
|
|
385
|
+
this.validationState = newValidationState
|
|
386
|
+
this.error = hasError
|
|
387
|
+
|
|
388
|
+
// Emit change event with validation status
|
|
389
|
+
this.emitChange()
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Get computed min date for the "to" field based on "from" value
|
|
394
|
+
*/
|
|
395
|
+
private getComputedMinDateTo(): string | undefined {
|
|
396
|
+
if (!this.dateFrom.value) return this.minDate
|
|
397
|
+
|
|
398
|
+
const fromDate = this.parseDate(this.dateFrom.value)
|
|
399
|
+
if (!fromDate) return this.minDate
|
|
400
|
+
|
|
401
|
+
// Calculate minimum date based on constraints
|
|
402
|
+
const minToDate = new Date(fromDate)
|
|
403
|
+
|
|
404
|
+
if (!this.allowSameDate) {
|
|
405
|
+
minToDate.setDate(minToDate.getDate() + 1)
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (this.minGap > 0) {
|
|
409
|
+
minToDate.setDate(fromDate.getDate() + this.minGap)
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// Compare with global minDate if set
|
|
413
|
+
if (this.minDate) {
|
|
414
|
+
const globalMin = this.parseDate(this.minDate)
|
|
415
|
+
if (globalMin && globalMin > minToDate) {
|
|
416
|
+
return this.minDate
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return this.formatDate(minToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Get computed max date for the "from" field based on "to" value
|
|
425
|
+
*/
|
|
426
|
+
private getComputedMaxDateFrom(): string | undefined {
|
|
427
|
+
if (!this.dateTo.value) return this.maxDate
|
|
428
|
+
|
|
429
|
+
const toDate = this.parseDate(this.dateTo.value)
|
|
430
|
+
if (!toDate) return this.maxDate
|
|
431
|
+
|
|
432
|
+
// Calculate maximum date based on constraints
|
|
433
|
+
const maxFromDate = new Date(toDate)
|
|
434
|
+
|
|
435
|
+
if (!this.allowSameDate) {
|
|
436
|
+
maxFromDate.setDate(maxFromDate.getDate() - 1)
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
if (this.minGap > 0) {
|
|
440
|
+
maxFromDate.setDate(toDate.getDate() - this.minGap)
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// Compare with global maxDate if set
|
|
444
|
+
if (this.maxDate) {
|
|
445
|
+
const globalMax = this.parseDate(this.maxDate)
|
|
446
|
+
if (globalMax && globalMax < maxFromDate) {
|
|
447
|
+
return this.maxDate
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
return this.formatDate(maxFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
emitChange() {
|
|
455
|
+
const isValid =
|
|
456
|
+
!this.error &&
|
|
457
|
+
!!this.dateFrom.value &&
|
|
458
|
+
!!this.dateTo.value &&
|
|
459
|
+
!this.validationState.dateFromError &&
|
|
460
|
+
!this.validationState.dateToError &&
|
|
461
|
+
!this.validationState.rangeError
|
|
462
|
+
|
|
463
|
+
this.dispatchEvent(
|
|
464
|
+
new CustomEvent<SchmancyDateRangeInlineChangeEvent['detail']>('change', {
|
|
465
|
+
detail: {
|
|
466
|
+
dateFrom: this.dateFrom.value,
|
|
467
|
+
dateTo: this.dateTo.value,
|
|
468
|
+
isValid,
|
|
469
|
+
},
|
|
470
|
+
bubbles: true,
|
|
471
|
+
composed: true,
|
|
472
|
+
}),
|
|
473
|
+
)
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
protected render() {
|
|
477
|
+
// Determine which error to show on each input
|
|
478
|
+
const fromError = this.validationState.dateFromError || this.validationState.rangeError
|
|
479
|
+
const toError = this.validationState.dateToError || this.validationState.rangeError
|
|
480
|
+
|
|
481
|
+
return html`
|
|
482
|
+
<div class="w-full">
|
|
483
|
+
<div class="flex items-start gap-2 w-full">
|
|
484
|
+
<div class="flex-1">
|
|
485
|
+
<schmancy-input
|
|
486
|
+
.type=${this.type}
|
|
487
|
+
.label=${this.dateFrom.label}
|
|
488
|
+
.value=${this.dateFrom.value}
|
|
489
|
+
.min=${this.minDate}
|
|
490
|
+
.max=${this.getComputedMaxDateFrom()}
|
|
491
|
+
@change=${this.handleDateFromChange}
|
|
492
|
+
.error=${!!fromError}
|
|
493
|
+
.hint=${fromError || ''}
|
|
494
|
+
.required=${this.required}
|
|
495
|
+
.disabled=${this.disabled}
|
|
496
|
+
size=${this.compact ? 'sm' : 'md'}
|
|
497
|
+
></schmancy-input>
|
|
498
|
+
</div>
|
|
499
|
+
|
|
500
|
+
<div class="flex items-center justify-center ${this.compact ? 'pt-8' : 'pt-10'} px-1">
|
|
501
|
+
<schmancy-icon class="text-surface-onVariant opacity-50"> arrow_forward </schmancy-icon>
|
|
502
|
+
</div>
|
|
503
|
+
|
|
504
|
+
<div class="flex-1">
|
|
505
|
+
<schmancy-input
|
|
506
|
+
.type=${this.type}
|
|
507
|
+
.label=${this.dateTo.label}
|
|
508
|
+
.value=${this.dateTo.value}
|
|
509
|
+
.min=${this.getComputedMinDateTo()}
|
|
510
|
+
.max=${this.maxDate}
|
|
511
|
+
@change=${this.handleDateToChange}
|
|
512
|
+
.error=${!!toError}
|
|
513
|
+
.hint=${toError || ''}
|
|
514
|
+
.required=${this.required}
|
|
515
|
+
.disabled=${this.disabled}
|
|
516
|
+
size=${this.compact ? 'sm' : 'md'}
|
|
517
|
+
></schmancy-input>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
</div>
|
|
521
|
+
`
|
|
522
|
+
}
|
|
523
|
+
}
|