@mhmo91/schmancy 0.10.35 → 0.10.36
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 +1155 -1083
- package/dist/SchmancyElement-BBzRWB1w.cjs +2 -0
- package/dist/SchmancyElement-BBzRWB1w.cjs.map +1 -0
- package/dist/SchmancyElement-C3CpdNsi.js +284 -0
- package/dist/SchmancyElement-C3CpdNsi.js.map +1 -0
- package/dist/agent/schmancy.agent.js +3387 -3228
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +333 -255
- package/dist/{area-DviXdbDx.js → area-BA96mwFY.js} +2 -2
- package/dist/{area-DviXdbDx.js.map → area-BA96mwFY.js.map} +1 -1
- package/dist/{area-CTSTgjlx.cjs → area-DtyQDdOF.cjs} +1 -1
- package/dist/{area-CTSTgjlx.cjs.map → area-DtyQDdOF.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-Q9oB_cQR.cjs → audio-B_jT9Xr7.cjs} +1 -1
- package/dist/{audio-Q9oB_cQR.cjs.map → audio-B_jT9Xr7.cjs.map} +1 -1
- package/dist/{audio-DFYoaw0M.js → audio-D52h1jAT.js} +1 -1
- package/dist/{audio-DFYoaw0M.js.map → audio-D52h1jAT.js.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/{autocomplete-DmLXJr7C.cjs → autocomplete-Bts5Jwwr.cjs} +1 -1
- package/dist/{autocomplete-DmLXJr7C.cjs.map → autocomplete-Bts5Jwwr.cjs.map} +1 -1
- package/dist/{autocomplete-BDvuma6D.js → autocomplete-CI4QJXAN.js} +3 -3
- package/dist/{autocomplete-BDvuma6D.js.map → autocomplete-CI4QJXAN.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.js +3 -3
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/boat-I4B1UNMc.cjs +34 -0
- package/dist/boat-I4B1UNMc.cjs.map +1 -0
- package/dist/{boat-lr7MPZ7H.js → boat-_N1x5U_3.js} +67 -83
- package/dist/boat-_N1x5U_3.js.map +1 -0
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +1 -1
- package/dist/breadcrumb.js +2 -2
- package/dist/{busy-CgzZbGfx.cjs → busy-BIUonyPk.cjs} +1 -1
- package/dist/{busy-CgzZbGfx.cjs.map → busy-BIUonyPk.cjs.map} +1 -1
- package/dist/{busy-DgQ4ux5N.js → busy-CCB3qKnh.js} +2 -2
- package/dist/{busy-DgQ4ux5N.js.map → busy-CCB3qKnh.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-qbN1muQ0.js → button-C89bPnHt.js} +2 -2
- package/dist/{button-qbN1muQ0.js.map → button-C89bPnHt.js.map} +1 -1
- package/dist/{button-DFvR1iXX.cjs → button-CkwQH-g3.cjs} +1 -1
- package/dist/{button-DFvR1iXX.cjs.map → button-CkwQH-g3.cjs.map} +1 -1
- package/dist/button.cjs +4 -4
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +16 -22
- package/dist/button.js.map +1 -1
- package/dist/{card-D_GlwZ5q.cjs → card-BO93_oxQ.cjs} +1 -1
- package/dist/{card-D_GlwZ5q.cjs.map → card-BO93_oxQ.cjs.map} +1 -1
- package/dist/{card-DAbr-7Vy.js → card-CFsCgJKZ.js} +2 -2
- package/dist/{card-DAbr-7Vy.js.map → card-CFsCgJKZ.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-BNORaxMF.js → checkbox-Bh7q0djq.js} +2 -2
- package/dist/{checkbox-BNORaxMF.js.map → checkbox-Bh7q0djq.js.map} +1 -1
- package/dist/{checkbox-BUY_uc_r.cjs → checkbox-CFUBUFtW.cjs} +1 -1
- package/dist/{checkbox-BUY_uc_r.cjs.map → checkbox-CFUBUFtW.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-Dg6Lk6BT.js → chips-6YaoRmeG.js} +145 -122
- package/dist/chips-6YaoRmeG.js.map +1 -0
- package/dist/{chips-CXZ4dJCK.cjs → chips-BfzpsyV1.cjs} +44 -33
- package/dist/chips-BfzpsyV1.cjs.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +3 -3
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-BU6WX7d5.js → date-range-CEo_Kjqw.js} +129 -137
- package/dist/date-range-CEo_Kjqw.js.map +1 -0
- package/dist/{date-range-C-_be3_E.cjs → date-range-N-A249O9.cjs} +25 -19
- package/dist/date-range-N-A249O9.cjs.map +1 -0
- package/dist/{date-range-inline-7o7xtVIu.js → date-range-inline-BwialV9j.js} +2 -2
- package/dist/{date-range-inline-7o7xtVIu.js.map → date-range-inline-BwialV9j.js.map} +1 -1
- package/dist/{date-range-inline-DJtUmHKF.cjs → date-range-inline-DFopysWF.cjs} +1 -1
- package/dist/{date-range-inline-DJtUmHKF.cjs.map → date-range-inline-DFopysWF.cjs.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 +1 -1
- package/dist/delay.js +2 -2
- package/dist/{details-Bs0MyyvF.cjs → details-BLRPV8sY.cjs} +1 -1
- package/dist/{details-Bs0MyyvF.cjs.map → details-BLRPV8sY.cjs.map} +1 -1
- package/dist/{details-EfbDPVEo.js → details-GtpfI2hA.js} +2 -2
- package/dist/{details-EfbDPVEo.js.map → details-GtpfI2hA.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-zi1Mm2er.js → directives-C2dXgpCY.js} +13 -6
- package/dist/directives-C2dXgpCY.js.map +1 -0
- package/dist/{directives-fLwDj6b0.cjs → directives-CvYGSW_a.cjs} +2 -2
- package/dist/directives-CvYGSW_a.cjs.map +1 -0
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/{divider-CEPfrIwe.js → divider-D0pGX2VB.js} +2 -2
- package/dist/{divider-CEPfrIwe.js.map → divider-D0pGX2VB.js.map} +1 -1
- package/dist/{divider-CdIsWZrM.cjs → divider-rNsWCvMi.cjs} +1 -1
- package/dist/{divider-CdIsWZrM.cjs.map → divider-rNsWCvMi.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-g1vqqUp1.js → expand-FcKAzJta.js} +3 -3
- package/dist/{expand-g1vqqUp1.js.map → expand-FcKAzJta.js.map} +1 -1
- package/dist/{expand--at1k3qo.cjs → expand-tffQHGbZ.cjs} +1 -1
- package/dist/{expand--at1k3qo.cjs.map → expand-tffQHGbZ.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/fab.cjs +77 -0
- package/dist/fab.cjs.map +1 -0
- package/dist/fab.js +151 -0
- package/dist/fab.js.map +1 -0
- package/dist/{float-P9HukAm-.cjs → float-CDjgxWyy.cjs} +1 -1
- package/dist/{float-P9HukAm-.cjs.map → float-CDjgxWyy.cjs.map} +1 -1
- package/dist/{float-DxVzgI9o.js → float-CQ1WEp3M.js} +2 -2
- package/dist/{float-DxVzgI9o.js.map → float-CQ1WEp3M.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-CqLaozHp.js → form-H24puioV.js} +3 -3
- package/dist/{form-CqLaozHp.js.map → form-H24puioV.js.map} +1 -1
- package/dist/{form-ByYhXe1p.cjs → form-VYhbbir3.cjs} +1 -1
- package/dist/{form-ByYhXe1p.cjs.map → form-VYhbbir3.cjs.map} +1 -1
- package/dist/form.cjs +6 -6
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +25 -23
- package/dist/form.js.map +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{icons-DYtiRU5V.cjs → icons-B_a1HStW.cjs} +1 -1
- package/dist/{icons-DYtiRU5V.cjs.map → icons-B_a1HStW.cjs.map} +1 -1
- package/dist/{icons-CkphcMp6.js → icons-DBxfN91B.js} +2 -2
- package/dist/{icons-CkphcMp6.js.map → icons-DBxfN91B.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CjqJksl8.js → iframe-BDVElN8z.js} +2 -2
- package/dist/{iframe-CjqJksl8.js.map → iframe-BDVElN8z.js.map} +1 -1
- package/dist/{iframe-C3trkP8q.cjs → iframe-CG-z9qev.cjs} +1 -1
- package/dist/{iframe-C3trkP8q.cjs.map → iframe-CG-z9qev.cjs.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +57 -56
- package/dist/{input-DuavpwNL.cjs → input-B14Nn6xD.cjs} +1 -1
- package/dist/{input-DuavpwNL.cjs.map → input-B14Nn6xD.cjs.map} +1 -1
- package/dist/{input-CG51zDVh.js → input-Bt_o4sYo.js} +2 -2
- package/dist/{input-CG51zDVh.js.map → input-Bt_o4sYo.js.map} +1 -1
- package/dist/{input-chip-C6Lq1927.js → input-chip-DEqO0DXc.js} +2 -2
- package/dist/input-chip-DEqO0DXc.js.map +1 -0
- package/dist/{input-chip-57tgNXKT.cjs → input-chip-ugYu9Fn9.cjs} +1 -1
- package/dist/input-chip-ugYu9Fn9.cjs.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +3 -3
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +2 -2
- package/dist/{layout-D4IOwx7p.js → layout-BJ_43VrH.js} +1 -1
- package/dist/{layout-D4IOwx7p.js.map → layout-BJ_43VrH.js.map} +1 -1
- package/dist/{layout-6ipbiWTl.cjs → layout-DF9ZaQ-b.cjs} +1 -1
- package/dist/{layout-6ipbiWTl.cjs.map → layout-DF9ZaQ-b.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-H8pVWGMX.cjs → lightbox-B47Zoqv-.cjs} +1 -1
- package/dist/{lightbox-H8pVWGMX.cjs.map → lightbox-B47Zoqv-.cjs.map} +1 -1
- package/dist/{lightbox-CsyO2XSr.js → lightbox-ZmuoBBFT.js} +2 -2
- package/dist/{lightbox-CsyO2XSr.js.map → lightbox-ZmuoBBFT.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-BAwH0pQW.js → list-C47xzld_.js} +2 -2
- package/dist/{list-BAwH0pQW.js.map → list-C47xzld_.js.map} +1 -1
- package/dist/{list-Bs9m8kw7.cjs → list-CaSWrlG2.cjs} +1 -1
- package/dist/{list-Bs9m8kw7.cjs.map → list-CaSWrlG2.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{menu-tQVARVaC.js → menu-8RObM6Ie.js} +3 -3
- package/dist/{menu-tQVARVaC.js.map → menu-8RObM6Ie.js.map} +1 -1
- package/dist/{menu-BMcGzj1h.cjs → menu-Jpsy85SX.cjs} +1 -1
- package/dist/{menu-BMcGzj1h.cjs.map → menu-Jpsy85SX.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/{mixins-CGXSzZc7.cjs → mixins-DPdzC9ZH.cjs} +1 -1
- package/dist/{mixins-CGXSzZc7.cjs.map → mixins-DPdzC9ZH.cjs.map} +1 -1
- package/dist/{mixins-Bp0wIHg2.js → mixins-DTzfFVyv.js} +1 -1
- package/dist/{mixins-Bp0wIHg2.js.map → mixins-DTzfFVyv.js.map} +1 -1
- 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 +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-D1tX2nx5.js → notification-Ccktcj9H.js} +4 -4
- package/dist/{notification-D1tX2nx5.js.map → notification-Ccktcj9H.js.map} +1 -1
- package/dist/{notification-Bz00zdpV.cjs → notification-DSkB-sn0.cjs} +1 -1
- package/dist/{notification-Bz00zdpV.cjs.map → notification-DSkB-sn0.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BnybLEDO.cjs → option-0aNiVB3Q.cjs} +1 -1
- package/dist/{option-BnybLEDO.cjs.map → option-0aNiVB3Q.cjs.map} +1 -1
- package/dist/{option-BpGV8Apj.js → option-CkMxwBqU.js} +2 -2
- package/dist/{option-BpGV8Apj.js.map → option-CkMxwBqU.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-UQR2Dy3u.cjs → overlay-BS-ta-zq.cjs} +5 -5
- package/dist/overlay-BS-ta-zq.cjs.map +1 -0
- package/dist/{overlay-BpNhd74N.js → overlay-H3Wt_dgQ.js} +108 -108
- package/dist/overlay-H3Wt_dgQ.js.map +1 -0
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-CVDtVk5X.cjs → overlay.confirm-body-CR9xaqOE.cjs} +1 -1
- package/dist/{overlay.confirm-body-CVDtVk5X.cjs.map → overlay.confirm-body-CR9xaqOE.cjs.map} +1 -1
- package/dist/{overlay.confirm-body-BHcXu5Wk.js → overlay.confirm-body-Dxn_wNm3.js} +6 -6
- package/dist/{overlay.confirm-body-BHcXu5Wk.js.map → overlay.confirm-body-Dxn_wNm3.js.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-DTE6NwIM.js → overlay.service-C46kOtUi.js} +2 -2
- package/dist/{overlay.service-DTE6NwIM.js.map → overlay.service-C46kOtUi.js.map} +1 -1
- package/dist/{overlay.service-C8RsQzgM.cjs → overlay.service-DEj3rfRr.cjs} +1 -1
- package/dist/{overlay.service-C8RsQzgM.cjs.map → overlay.service-DEj3rfRr.cjs.map} +1 -1
- package/dist/{progress-CAKsxp29.js → progress-BK7gSq8j.js} +2 -2
- package/dist/{progress-CAKsxp29.js.map → progress-BK7gSq8j.js.map} +1 -1
- package/dist/{progress-gbIALDRs.cjs → progress-zs18GR6C.cjs} +1 -1
- package/dist/{progress-gbIALDRs.cjs.map → progress-zs18GR6C.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-otyvZvUk.js → radio-group-1HCpzRUB.js} +2 -2
- package/dist/{radio-group-otyvZvUk.js.map → radio-group-1HCpzRUB.js.map} +1 -1
- package/dist/{radio-group-CfJ5DtI4.cjs → radio-group-DbYlyPc-.cjs} +1 -1
- package/dist/{radio-group-CfJ5DtI4.cjs.map → radio-group-DbYlyPc-.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +2 -2
- package/dist/{select-81jniVTs.cjs → select-B-SSmUDe.cjs} +1 -1
- package/dist/{select-81jniVTs.cjs.map → select-B-SSmUDe.cjs.map} +1 -1
- package/dist/{select-9vXx1fhr.js → select-CEyhNtZ2.js} +3 -3
- package/dist/{select-9vXx1fhr.js.map → select-CEyhNtZ2.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +2 -2
- package/dist/skills/INDEX.md +1 -1
- package/dist/skills/SKILL.md +6 -7
- package/dist/skills/boat.md +21 -15
- package/dist/skills/fab.md +75 -0
- package/dist/skills/schmancy/INDEX.md +1 -1
- package/dist/skills/schmancy/SKILL.md +6 -7
- package/dist/skills/schmancy/boat.md +21 -15
- package/dist/skills/schmancy/fab.md +75 -0
- package/dist/skills/schmancy/theme.md +1 -1
- package/dist/skills/theme.md +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-D3ZSq1Kj.js → sound.service-DO4SmUUT.js} +1 -1
- package/dist/{sound.service-D3ZSq1Kj.js.map → sound.service-DO4SmUUT.js.map} +1 -1
- package/dist/{sound.service-CmIw63aM.cjs → sound.service-G_8GV_6L.cjs} +1 -1
- package/dist/{sound.service-CmIw63aM.cjs.map → sound.service-G_8GV_6L.cjs.map} +1 -1
- package/dist/{splash-screen-BOjrmGLk.js → splash-screen-B1mM4_xz.js} +2 -2
- package/dist/{splash-screen-BOjrmGLk.js.map → splash-screen-B1mM4_xz.js.map} +1 -1
- package/dist/{splash-screen-C5KAWXvA.cjs → splash-screen-cbz4bxjB.cjs} +1 -1
- package/dist/{splash-screen-C5KAWXvA.cjs.map → splash-screen-cbz4bxjB.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-qzUpLbje.cjs → src-czeiuT1m.cjs} +1 -1
- package/dist/{src-qzUpLbje.cjs.map → src-czeiuT1m.cjs.map} +1 -1
- package/dist/{src-C5g3p1J5.js → src-tncsWsTY.js} +36 -35
- package/dist/{src-C5g3p1J5.js.map → src-tncsWsTY.js.map} +1 -1
- package/dist/{state-Cex3rmx2.cjs → state-Cx0aoL5e.cjs} +1 -1
- package/dist/{state-Cex3rmx2.cjs.map → state-Cx0aoL5e.cjs.map} +1 -1
- package/dist/{state-CWBRTSvE.js → state-DJDp3N7J.js} +1 -1
- package/dist/{state-CWBRTSvE.js.map → state-DJDp3N7J.js.map} +1 -1
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +2 -2
- package/dist/{surface-PfiejLuw.cjs → surface-C3cxTcJD.cjs} +1 -1
- package/dist/{surface-PfiejLuw.cjs.map → surface-C3cxTcJD.cjs.map} +1 -1
- package/dist/{surface-9S5scTsD.js → surface-CYBl8_a3.js} +2 -2
- package/dist/{surface-9S5scTsD.js.map → surface-CYBl8_a3.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +2 -2
- package/dist/table.cjs +1 -1
- package/dist/table.js +2 -2
- package/dist/{tabs-BBOjAmgG.js → tabs-DHy93Q3N.js} +2 -2
- package/dist/{tabs-BBOjAmgG.js.map → tabs-DHy93Q3N.js.map} +1 -1
- package/dist/{tabs-uYvb1P06.cjs → tabs-ORQ_Zd43.cjs} +1 -1
- package/dist/{tabs-uYvb1P06.cjs.map → tabs-ORQ_Zd43.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-YPHX4g7Y.cjs → textarea-CEUaDURR.cjs} +1 -1
- package/dist/{textarea-YPHX4g7Y.cjs.map → textarea-CEUaDURR.cjs.map} +1 -1
- package/dist/{textarea-QzSj8Dkl.js → textarea-DHIMt-ly.js} +2 -2
- package/dist/{textarea-QzSj8Dkl.js.map → textarea-DHIMt-ly.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/theme-CJpjkqHr.cjs +181 -0
- package/dist/{theme-iKUaS9JB.cjs.map → theme-CJpjkqHr.cjs.map} +1 -1
- package/dist/{theme-C2Mp-VGt.js → theme-CgI9PRco.js} +6 -5
- package/dist/{theme-C2Mp-VGt.js.map → theme-CgI9PRco.js.map} +1 -1
- package/dist/{theme-button-CJmhxfMe.cjs → theme-button--FuBkuVr.cjs} +1 -1
- package/dist/{theme-button-CJmhxfMe.cjs.map → theme-button--FuBkuVr.cjs.map} +1 -1
- package/dist/{theme-button-DGWAXhzd.js → theme-button-D-FXb3oO.js} +2 -2
- package/dist/{theme-button-DGWAXhzd.js.map → theme-button-D-FXb3oO.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +3 -3
- package/dist/{theme.service-hc4N-1Oz.js → theme.service-BfTK1Wtl.js} +1 -1
- package/dist/{theme.service-hc4N-1Oz.js.map → theme.service-BfTK1Wtl.js.map} +1 -1
- package/dist/{theme.service-p61RsJBF.cjs → theme.service-Dg7LO0Qz.cjs} +1 -1
- package/dist/{theme.service-p61RsJBF.cjs.map → theme.service-Dg7LO0Qz.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +2 -2
- package/dist/{typography-DwV0sqht.js → typography-BEGLfHwz.js} +2 -2
- package/dist/{typography-DwV0sqht.js.map → typography-BEGLfHwz.js.map} +1 -1
- package/dist/{typography-Bdt8RlX2.cjs → typography-CxA3sx9B.cjs} +1 -1
- package/dist/{typography-Bdt8RlX2.cjs.map → typography-CxA3sx9B.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +2 -2
- package/dist/{window-n4jN60B_.js → window-B_n4P9az.js} +3 -3
- package/dist/{window-n4jN60B_.js.map → window-B_n4P9az.js.map} +1 -1
- package/dist/{window-D2WfvNng.cjs → window-Vl1u1-EG.cjs} +1 -1
- package/dist/{window-D2WfvNng.cjs.map → window-Vl1u1-EG.cjs.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/INDEX.md +1 -1
- package/skills/schmancy/SKILL.md +6 -7
- package/skills/schmancy/boat.md +21 -15
- package/skills/schmancy/fab.md +75 -0
- package/skills/schmancy/theme.md +1 -1
- package/src/CLAUDE.md +22 -16
- package/src/boat/boat.test.ts +130 -0
- package/src/boat/boat.ts +144 -121
- package/src/button/icon-button.ts +18 -30
- package/src/chips/assist-chip.ts +2 -263
- package/src/chips/chips.ts +2 -259
- package/src/chips/filter-chip.ts +2 -255
- package/src/chips/index.ts +2 -5
- package/src/chips/input-chip.ts +2 -413
- package/src/chips/suggestion-chip.ts +2 -266
- package/src/directives/fill.ts +28 -5
- package/src/fab/fab.test.ts +101 -0
- package/src/fab/fab.ts +226 -0
- package/src/fab/index.ts +1 -0
- package/src/form/fields/chips/assist-chip.ts +263 -0
- package/src/form/fields/chips/chips.ts +234 -0
- package/src/form/fields/chips/filter-chip.ts +255 -0
- package/src/form/fields/chips/index.ts +5 -0
- package/src/form/fields/chips/input-chip.ts +413 -0
- package/src/form/fields/chips/suggestion-chip.ts +266 -0
- package/src/form/fields/date-range/date-range.test.ts +44 -0
- package/src/form/fields/date-range/date-range.ts +103 -97
- package/src/form/fields/index.ts +1 -0
- package/src/index.ts +2 -1
- package/src/overlay/overlay.animations.ts +2 -3
- package/src/overlay/overlay.component.ts +8 -4
- package/src/overlay/overlay.types.ts +14 -2
- package/src/theme/theme.component.ts +1 -0
- package/src/theme/theme.style.css +3 -0
- package/types/src/boat/boat.d.ts +27 -9
- package/types/src/boat/boat.test.d.ts +2 -0
- package/types/src/button/icon-button.d.ts +3 -2
- package/types/src/chips/assist-chip.d.ts +1 -47
- package/types/src/chips/chips.d.ts +1 -43
- package/types/src/chips/filter-chip.d.ts +1 -67
- package/types/src/chips/index.d.ts +1 -5
- package/types/src/chips/input-chip.d.ts +1 -82
- package/types/src/chips/suggestion-chip.d.ts +1 -52
- package/types/src/fab/fab.d.ts +80 -0
- package/types/src/fab/fab.test.d.ts +2 -0
- package/types/src/fab/index.d.ts +1 -0
- package/types/src/form/fields/chips/assist-chip.d.ts +47 -0
- package/types/src/form/fields/chips/chips.d.ts +35 -0
- package/types/src/form/fields/chips/filter-chip.d.ts +67 -0
- package/types/src/form/fields/chips/index.d.ts +5 -0
- package/types/src/form/fields/chips/input-chip.d.ts +82 -0
- package/types/src/form/fields/chips/suggestion-chip.d.ts +52 -0
- package/types/src/form/fields/date-range/date-range.d.ts +5 -10
- package/types/src/form/fields/index.d.ts +1 -0
- package/types/src/index.d.ts +2 -1
- package/types/src/overlay/overlay.component.d.ts +1 -0
- package/types/src/overlay/overlay.types.d.ts +12 -2
- package/types/src/theme/theme.component.d.ts +1 -0
- package/dist/SchmancyElement-CA0Wqt8m.js +0 -284
- package/dist/SchmancyElement-CA0Wqt8m.js.map +0 -1
- package/dist/SchmancyElement-CYIif26I.cjs +0 -2
- package/dist/SchmancyElement-CYIif26I.cjs.map +0 -1
- package/dist/boat-Vqjgo10B.cjs +0 -33
- package/dist/boat-Vqjgo10B.cjs.map +0 -1
- package/dist/boat-lr7MPZ7H.js.map +0 -1
- package/dist/chips-CXZ4dJCK.cjs.map +0 -1
- package/dist/chips-Dg6Lk6BT.js.map +0 -1
- package/dist/date-range-BU6WX7d5.js.map +0 -1
- package/dist/date-range-C-_be3_E.cjs.map +0 -1
- package/dist/directives-fLwDj6b0.cjs.map +0 -1
- package/dist/directives-zi1Mm2er.js.map +0 -1
- package/dist/input-chip-57tgNXKT.cjs.map +0 -1
- package/dist/input-chip-C6Lq1927.js.map +0 -1
- package/dist/overlay-BpNhd74N.js.map +0 -1
- package/dist/overlay-UQR2Dy3u.cjs.map +0 -1
- package/dist/theme-iKUaS9JB.cjs +0 -181
|
@@ -68,6 +68,50 @@ describe('schmancy-date-range', () => {
|
|
|
68
68
|
expect(form.checkValidity()).toBe(true)
|
|
69
69
|
})
|
|
70
70
|
|
|
71
|
+
it('paints both validity surfaces when required, empty, and submitted', async () => {
|
|
72
|
+
host.innerHTML = `<form><schmancy-date-range name="w" required></schmancy-date-range></form>`
|
|
73
|
+
const form = host.querySelector('form') as HTMLFormElement
|
|
74
|
+
const dr = host.querySelector('schmancy-date-range') as HTMLElement & {
|
|
75
|
+
dateFrom: { label: string; value: string }
|
|
76
|
+
dateTo: { label: string; value: string }
|
|
77
|
+
markSubmitted(): void
|
|
78
|
+
checkValidity(): boolean
|
|
79
|
+
}
|
|
80
|
+
await nextUpdate()
|
|
81
|
+
await nextUpdate()
|
|
82
|
+
dr.dateFrom = { label: 'From', value: '' }
|
|
83
|
+
dr.dateTo = { label: 'To', value: '' }
|
|
84
|
+
await nextUpdate()
|
|
85
|
+
|
|
86
|
+
// Platform surface: the form blocks submit.
|
|
87
|
+
expect(form.checkValidity()).toBe(false)
|
|
88
|
+
|
|
89
|
+
// Rendered surface is gated until submit (validateOn default 'dirty').
|
|
90
|
+
dr.markSubmitted()
|
|
91
|
+
dr.checkValidity()
|
|
92
|
+
await nextUpdate()
|
|
93
|
+
await nextUpdate()
|
|
94
|
+
|
|
95
|
+
const root = (dr as unknown as { shadowRoot: ShadowRoot }).shadowRoot
|
|
96
|
+
const alert = root.querySelector('[role="alert"]')
|
|
97
|
+
expect(alert, 'a role=alert message must render').not.toBeNull()
|
|
98
|
+
expect(alert?.textContent?.trim()).toBe('Please select a date range.')
|
|
99
|
+
// Control itself carries a visible invalid treatment.
|
|
100
|
+
expect(
|
|
101
|
+
root.querySelector('section.outline-error-default'),
|
|
102
|
+
'the control must carry an invalid treatment',
|
|
103
|
+
).not.toBeNull()
|
|
104
|
+
|
|
105
|
+
// Filling the range clears both surfaces.
|
|
106
|
+
dr.dateFrom = { label: 'From', value: '2026-01-01' }
|
|
107
|
+
dr.dateTo = { label: 'To', value: '2026-01-31' }
|
|
108
|
+
await nextUpdate()
|
|
109
|
+
await nextUpdate()
|
|
110
|
+
expect(form.checkValidity()).toBe(true)
|
|
111
|
+
expect(root.querySelector('[role="alert"]')).toBeNull()
|
|
112
|
+
expect(root.querySelector('section.outline-error-default')).toBeNull()
|
|
113
|
+
})
|
|
114
|
+
|
|
71
115
|
it('has no axe-core a11y violations', async () => {
|
|
72
116
|
host.innerHTML = `<schmancy-date-range name="window"></schmancy-date-range>`
|
|
73
117
|
await nextUpdate()
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import dayjs from 'dayjs'
|
|
2
2
|
import quarterOfYear from 'dayjs/plugin/quarterOfYear'
|
|
3
|
-
import { html, PropertyValues } from 'lit'
|
|
3
|
+
import { html, nothing, PropertyValues } from 'lit'
|
|
4
4
|
import { customElement, property, state } from 'lit/decorators.js'
|
|
5
|
-
import { fromEvent,
|
|
5
|
+
import { concat, exhaustMap, finalize, fromEvent, map, merge, of, Subject, switchMap, takeUntil, tap, timer } from 'rxjs'
|
|
6
6
|
import { SchmancyFormField } from '@mixins/index'
|
|
7
7
|
import { show } from '../../../overlay/overlay.service'
|
|
8
8
|
import { detectDateRangeType, formatDateRange } from './date-range-helpers'
|
|
@@ -55,6 +55,12 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
55
55
|
/** When true, collapses to just an icon button on mobile screens */
|
|
56
56
|
@property({ type: Boolean }) collapse = false
|
|
57
57
|
|
|
58
|
+
// Session inputs — driven by handlers, consumed by the single pipeline
|
|
59
|
+
// in connectedCallback (rxjs ONE_PIPELINE_ONE_SUBSCRIBE / SESSIONS).
|
|
60
|
+
private readonly open$ = new Subject<MouseEvent | undefined>()
|
|
61
|
+
private readonly close$ = new Subject<void>()
|
|
62
|
+
private readonly announce$ = new Subject<string>()
|
|
63
|
+
|
|
58
64
|
// Internal states
|
|
59
65
|
@state() private isOpen = false
|
|
60
66
|
@state() private selectedDateRange: string = ''
|
|
@@ -95,17 +101,71 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
95
101
|
this.updateSelectedDateRange()
|
|
96
102
|
}
|
|
97
103
|
|
|
98
|
-
//
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
// One pipeline, one subscribe (rxjs ONE_PIPELINE_ONE_SUBSCRIBE): the
|
|
105
|
+
// dropdown open/close session, screen-reader announcements, and
|
|
106
|
+
// document keyboard navigation merge into a single chain torn down by
|
|
107
|
+
// takeUntil(this.disconnecting).
|
|
108
|
+
merge(
|
|
109
|
+
// Dropdown is a session (rxjs SESSIONS_USE_HIGHER_ORDER_OBSERVABLES):
|
|
110
|
+
// open$ opens the overlay; show() completes when an inner handler
|
|
111
|
+
// dispatches `close`, close$ dismisses it externally; finalize
|
|
112
|
+
// resets isOpen on either teardown path.
|
|
113
|
+
this.open$.pipe(
|
|
114
|
+
tap(() => {
|
|
115
|
+
this.dispatchEvent(new CustomEvent('beforeopen', { bubbles: true, composed: true }))
|
|
116
|
+
this.isOpen = true
|
|
117
|
+
}),
|
|
118
|
+
exhaustMap(anchor =>
|
|
119
|
+
show(
|
|
120
|
+
html`
|
|
121
|
+
<schmancy-date-range-dialog
|
|
122
|
+
.type="${this.type}"
|
|
123
|
+
.dateFrom="${this.dateFrom}"
|
|
124
|
+
.dateTo="${this.dateTo}"
|
|
125
|
+
.minDate="${this.minDate}"
|
|
126
|
+
.maxDate="${this.maxDate}"
|
|
127
|
+
.activePreset="${this.activePreset}"
|
|
128
|
+
.presetCategories="${this.presetCategories}"
|
|
129
|
+
@preset-select="${(ev: CustomEvent) => {
|
|
130
|
+
this.activePreset = ev.detail.preset.label
|
|
131
|
+
this.setDateRange(ev.detail.preset.range.dateFrom, ev.detail.preset.range.dateTo)
|
|
132
|
+
dispatchClose(ev.currentTarget)
|
|
133
|
+
}}"
|
|
134
|
+
@date-change="${() => this.updateSelectedDateRange()}"
|
|
135
|
+
@apply-dates="${(ev: CustomEvent) => {
|
|
136
|
+
const { dateFrom, dateTo, swapIfNeeded } = ev.detail
|
|
137
|
+
if (swapIfNeeded) {
|
|
138
|
+
this.setDateRange(dateTo, dateFrom)
|
|
139
|
+
} else {
|
|
140
|
+
this.setDateRange(dateFrom, dateTo)
|
|
141
|
+
}
|
|
142
|
+
dispatchClose(ev.currentTarget)
|
|
143
|
+
}}"
|
|
144
|
+
@announce="${(ev: CustomEvent) => this.announce$.next(ev.detail.message)}"
|
|
145
|
+
></schmancy-date-range-dialog>
|
|
146
|
+
`,
|
|
147
|
+
{ anchor },
|
|
148
|
+
).pipe(
|
|
149
|
+
takeUntil(this.close$),
|
|
150
|
+
finalize(() => {
|
|
151
|
+
this.isOpen = false
|
|
152
|
+
}),
|
|
153
|
+
),
|
|
154
|
+
),
|
|
155
|
+
),
|
|
156
|
+
// Announcements (rxjs LIFT_EVERY_ASYNC_SOURCE): one Subject, one
|
|
157
|
+
// switchMap-cleared timer — not a fresh timer().subscribe() per call.
|
|
158
|
+
this.announce$.pipe(
|
|
159
|
+
switchMap(message => concat(of(message), timer(100).pipe(map(() => '')))),
|
|
160
|
+
tap(message => {
|
|
161
|
+
this.announceMessage = message
|
|
162
|
+
}),
|
|
163
|
+
),
|
|
164
|
+
// Document keyboard navigation.
|
|
165
|
+
fromEvent<KeyboardEvent>(document, 'keydown').pipe(tap(event => this.handleKeyboardNavigation(event))),
|
|
166
|
+
)
|
|
105
167
|
.pipe(takeUntil(this.disconnecting))
|
|
106
|
-
.subscribe(
|
|
107
|
-
this.handleKeyboardNavigation(event)
|
|
108
|
-
})
|
|
168
|
+
.subscribe()
|
|
109
169
|
}
|
|
110
170
|
|
|
111
171
|
updated(changedProps: PropertyValues) {
|
|
@@ -182,23 +242,23 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
182
242
|
}
|
|
183
243
|
|
|
184
244
|
/** `dirty` tracks the underlying date strings, not the wide-union value. */
|
|
185
|
-
private
|
|
186
|
-
private
|
|
245
|
+
private dateFromDefault: string = ''
|
|
246
|
+
private dateToDefault: string = ''
|
|
187
247
|
override firstUpdated(changed: PropertyValues): void {
|
|
188
248
|
super.firstUpdated(changed)
|
|
189
|
-
this.
|
|
190
|
-
this.
|
|
249
|
+
this.dateFromDefault = this.dateFrom?.value ?? ''
|
|
250
|
+
this.dateToDefault = this.dateTo?.value ?? ''
|
|
191
251
|
}
|
|
192
252
|
override get dirty(): boolean {
|
|
193
253
|
return (
|
|
194
|
-
(this.dateFrom?.value ?? '') !== this.
|
|
195
|
-
(this.dateTo?.value ?? '') !== this.
|
|
254
|
+
(this.dateFrom?.value ?? '') !== this.dateFromDefault ||
|
|
255
|
+
(this.dateTo?.value ?? '') !== this.dateToDefault
|
|
196
256
|
)
|
|
197
257
|
}
|
|
198
258
|
|
|
199
259
|
override resetForm(): void {
|
|
200
|
-
this.dateFrom = { ...this.dateFrom, value: this.
|
|
201
|
-
this.dateTo = { ...this.dateTo, value: this.
|
|
260
|
+
this.dateFrom = { ...this.dateFrom, value: this.dateFromDefault }
|
|
261
|
+
this.dateTo = { ...this.dateTo, value: this.dateToDefault }
|
|
202
262
|
super.resetForm()
|
|
203
263
|
}
|
|
204
264
|
|
|
@@ -282,7 +342,7 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
282
342
|
this.updateSelectedDateRange()
|
|
283
343
|
|
|
284
344
|
// Announce change to screen readers
|
|
285
|
-
this.
|
|
345
|
+
this.announce$.next(`Date range updated: ${this.selectedDateRange}`)
|
|
286
346
|
|
|
287
347
|
this.dispatchEvent(
|
|
288
348
|
new CustomEvent<{ dateFrom: string; dateTo: string }>('change', {
|
|
@@ -296,72 +356,15 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
296
356
|
private toggleDropdown(e: MouseEvent) {
|
|
297
357
|
e.stopPropagation()
|
|
298
358
|
if (this.disabled || this.step !== undefined) return
|
|
299
|
-
|
|
359
|
+
// Drive the session pipeline (connectedCallback) — no imperative
|
|
360
|
+
// open/close, no manual subscription field.
|
|
300
361
|
if (this.isOpen) {
|
|
301
|
-
this.
|
|
362
|
+
this.close$.next()
|
|
302
363
|
} else {
|
|
303
|
-
this.
|
|
364
|
+
this.open$.next(e)
|
|
304
365
|
}
|
|
305
366
|
}
|
|
306
367
|
|
|
307
|
-
private _overlaySubscription: Subscription | null = null
|
|
308
|
-
|
|
309
|
-
private openDropdown(e?: MouseEvent) {
|
|
310
|
-
if (this.disabled || this.step !== undefined) return
|
|
311
|
-
|
|
312
|
-
this.dispatchEvent(new CustomEvent('beforeopen', { bubbles: true, composed: true }))
|
|
313
|
-
this.isOpen = true
|
|
314
|
-
|
|
315
|
-
// Inline-template overlay. Inner handlers dispatch a 'close' event
|
|
316
|
-
// from the dialog itself (via the module-scoped `dispatchClose`),
|
|
317
|
-
// which `show()` translates into observable completion + an emission.
|
|
318
|
-
// Layout (centered vs sheet) is chosen by the overlay system based on
|
|
319
|
-
// viewport / anchor presence.
|
|
320
|
-
const dialogContent = html`
|
|
321
|
-
<schmancy-date-range-dialog
|
|
322
|
-
.type="${this.type}"
|
|
323
|
-
.dateFrom="${this.dateFrom}"
|
|
324
|
-
.dateTo="${this.dateTo}"
|
|
325
|
-
.minDate="${this.minDate}"
|
|
326
|
-
.maxDate="${this.maxDate}"
|
|
327
|
-
.activePreset="${this.activePreset}"
|
|
328
|
-
.presetCategories="${this.presetCategories}"
|
|
329
|
-
@preset-select="${(ev: CustomEvent) => {
|
|
330
|
-
this.activePreset = ev.detail.preset.label
|
|
331
|
-
this.setDateRange(ev.detail.preset.range.dateFrom, ev.detail.preset.range.dateTo)
|
|
332
|
-
dispatchClose(ev.currentTarget)
|
|
333
|
-
}}"
|
|
334
|
-
@date-change="${() => this.updateSelectedDateRange()}"
|
|
335
|
-
@apply-dates="${(ev: CustomEvent) => {
|
|
336
|
-
const { dateFrom, dateTo, swapIfNeeded } = ev.detail
|
|
337
|
-
if (swapIfNeeded) {
|
|
338
|
-
this.setDateRange(dateTo, dateFrom)
|
|
339
|
-
} else {
|
|
340
|
-
this.setDateRange(dateFrom, dateTo)
|
|
341
|
-
}
|
|
342
|
-
dispatchClose(ev.currentTarget)
|
|
343
|
-
}}"
|
|
344
|
-
@announce="${(ev: CustomEvent) => this.announceToScreenReader(ev.detail.message)}"
|
|
345
|
-
></schmancy-date-range-dialog>
|
|
346
|
-
`
|
|
347
|
-
|
|
348
|
-
this._overlaySubscription?.unsubscribe()
|
|
349
|
-
this._overlaySubscription = show(dialogContent, { anchor: e })
|
|
350
|
-
.pipe(takeUntil(this.disconnecting))
|
|
351
|
-
.subscribe({
|
|
352
|
-
complete: () => {
|
|
353
|
-
this.isOpen = false
|
|
354
|
-
this._overlaySubscription = null
|
|
355
|
-
},
|
|
356
|
-
})
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
private closeDropdown() {
|
|
360
|
-
this._overlaySubscription?.unsubscribe()
|
|
361
|
-
this._overlaySubscription = null
|
|
362
|
-
this.isOpen = false
|
|
363
|
-
}
|
|
364
|
-
|
|
365
368
|
/**
|
|
366
369
|
* Shifts the date range based on the step property
|
|
367
370
|
*/
|
|
@@ -522,20 +525,15 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
522
525
|
return toDate.isBefore(maxDate)
|
|
523
526
|
}
|
|
524
527
|
|
|
525
|
-
/**
|
|
526
|
-
* Announce messages to screen readers
|
|
527
|
-
*/
|
|
528
|
-
private announceToScreenReader(message: string) {
|
|
529
|
-
this.announceMessage = message
|
|
530
|
-
// Clear the message after announcement
|
|
531
|
-
timer(100)
|
|
532
|
-
.pipe(takeUntil(this.disconnecting))
|
|
533
|
-
.subscribe(() => {
|
|
534
|
-
this.announceMessage = ''
|
|
535
|
-
})
|
|
536
|
-
}
|
|
537
528
|
|
|
538
529
|
render() {
|
|
530
|
+
// Step 6 — validity is two surfaces: when checkValidity() has flipped
|
|
531
|
+
// `error` (gated by `_shouldShowError`), the control must visibly carry
|
|
532
|
+
// the invalid treatment AND render the message. Platform validity is
|
|
533
|
+
// set in checkValidity(); this paints the user-facing half.
|
|
534
|
+
const showError = this.error && !!this.validationMessage
|
|
535
|
+
const errorRing = showError ? ' rounded outline outline-2 outline-error-default' : ''
|
|
536
|
+
|
|
539
537
|
return html`
|
|
540
538
|
<div class="relative ${this.disabled ? 'opacity-60 pointer-events-none' : ''}">
|
|
541
539
|
<!-- Screen reader announcements -->
|
|
@@ -545,18 +543,22 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
545
543
|
|
|
546
544
|
<!-- Collapsed: icon-only on mobile when collapse=true -->
|
|
547
545
|
<schmancy-icon-button
|
|
548
|
-
class="${this.collapse ? 'lg:hidden' : 'hidden'}"
|
|
546
|
+
class="${this.collapse ? 'lg:hidden' : 'hidden'}${errorRing}"
|
|
549
547
|
variant="outlined"
|
|
550
548
|
type="button"
|
|
549
|
+
aria-invalid=${showError ? 'true' : 'false'}
|
|
551
550
|
aria-label="Select date range. Current: ${this.selectedDateRange || 'No date selected'}"
|
|
552
551
|
@click=${(e: MouseEvent) => this.toggleDropdown(e)}
|
|
553
552
|
?disabled=${this.disabled}
|
|
554
553
|
>
|
|
555
|
-
|
|
554
|
+
date_range
|
|
556
555
|
</schmancy-icon-button>
|
|
557
556
|
|
|
558
557
|
<!-- Full UI: always visible when collapse=false, or lg+ when collapse=true -->
|
|
559
|
-
<section
|
|
558
|
+
<section
|
|
559
|
+
@click=${(event: Event) => event.stopPropagation()}
|
|
560
|
+
aria-invalid=${showError ? 'true' : 'false'}
|
|
561
|
+
class="${this.collapse ? 'hidden lg:flex' : 'flex'}${errorRing}">
|
|
560
562
|
<schmancy-icon-button
|
|
561
563
|
type="button"
|
|
562
564
|
aria-label="Previous ${this.activePreset ? this.activePreset.toLowerCase() : 'date range'}"
|
|
@@ -590,6 +592,10 @@ export class SchmancyDateRange extends SchmancyFormField() {
|
|
|
590
592
|
arrow_right
|
|
591
593
|
</schmancy-icon-button>
|
|
592
594
|
</section>
|
|
595
|
+
|
|
596
|
+
${showError
|
|
597
|
+
? html`<div role="alert" class="text-error-default text-sm mt-1">${this.validationMessage}</div>`
|
|
598
|
+
: nothing}
|
|
593
599
|
</div>
|
|
594
600
|
`
|
|
595
601
|
}
|
package/src/form/fields/index.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -7,7 +7,7 @@ export * from './busy';
|
|
|
7
7
|
export * from './button';
|
|
8
8
|
export * from './card';
|
|
9
9
|
export * from './form/fields/checkbox';
|
|
10
|
-
export * from './chips';
|
|
10
|
+
export * from './form/fields/chips';
|
|
11
11
|
export * from './connectivity';
|
|
12
12
|
export * from './content-drawer';
|
|
13
13
|
export * from './form/fields/date-range';
|
|
@@ -19,6 +19,7 @@ export * from './discovery';
|
|
|
19
19
|
export * from './divider';
|
|
20
20
|
export * from './dropdown';
|
|
21
21
|
export * from './expand';
|
|
22
|
+
export * from './fab';
|
|
22
23
|
export * from './float';
|
|
23
24
|
export * from './window';
|
|
24
25
|
export * from './form';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DURATION_EXIT,
|
|
3
3
|
getEasing,
|
|
4
|
-
SPRING_GENTLE,
|
|
5
4
|
SPRING_SMOOTH,
|
|
6
5
|
SPRING_SNAPPY,
|
|
7
6
|
} from '../utils/animation'
|
|
@@ -162,8 +161,8 @@ export function surfaceAnimation(layout: OverlayLayout, direction: 'in' | 'out')
|
|
|
162
161
|
{ opacity: 1, transform: 'translateY(0)' },
|
|
163
162
|
],
|
|
164
163
|
options: {
|
|
165
|
-
duration:
|
|
166
|
-
easing: getEasing(
|
|
164
|
+
duration: SPRING_SNAPPY.duration,
|
|
165
|
+
easing: getEasing(SPRING_SNAPPY),
|
|
167
166
|
fill: 'forwards',
|
|
168
167
|
},
|
|
169
168
|
}
|
|
@@ -119,6 +119,7 @@ export class SchmancyOverlay extends SchmancyElement {
|
|
|
119
119
|
@property({ type: String, reflect: true }) tier: OverlayTier = 'modal'
|
|
120
120
|
|
|
121
121
|
@state() private _active = false
|
|
122
|
+
@state() private _full = false
|
|
122
123
|
|
|
123
124
|
@query('.backdrop') private _backdrop?: HTMLDivElement
|
|
124
125
|
@query('.surface') private _surface!: HTMLElement
|
|
@@ -152,6 +153,7 @@ export class SchmancyOverlay extends SchmancyElement {
|
|
|
152
153
|
this._mounted = true
|
|
153
154
|
|
|
154
155
|
this.dismissable = options.dismissable !== false
|
|
156
|
+
this._full = options.full ?? false
|
|
155
157
|
this._rawAnchor = options.anchor
|
|
156
158
|
this._anchorOriginAnchor = options.anchor
|
|
157
159
|
this._resolvedAnchor = resolveAnchorRef(options.anchor)
|
|
@@ -278,13 +280,15 @@ export class SchmancyOverlay extends SchmancyElement {
|
|
|
278
280
|
protected render(): TemplateResult {
|
|
279
281
|
if (!this._active) return html``
|
|
280
282
|
const baseClasses =
|
|
281
|
-
'surface fixed pointer-events-auto
|
|
283
|
+
'surface fixed pointer-events-auto ' +
|
|
282
284
|
'bg-surface-container/85 text-surface-on backdrop-blur-md ' +
|
|
283
285
|
'border border-surface-on/8'
|
|
284
286
|
const layoutClasses =
|
|
285
287
|
this.layout === 'sheet'
|
|
286
|
-
?
|
|
287
|
-
|
|
288
|
+
? this._full
|
|
289
|
+
? 'left-0 right-0 bottom-0 w-full h-[90dvh] rounded-t-[28px] shadow-overlay flex flex-col overflow-hidden'
|
|
290
|
+
: 'left-0 right-0 bottom-0 w-full max-h-[90dvh] rounded-t-[28px] shadow-overlay overflow-auto'
|
|
291
|
+
: 'max-w-[min(480px,calc(100vw-2rem))] max-h-[90dvh] rounded-3xl shadow-overlay-anchored overflow-auto'
|
|
288
292
|
return html`
|
|
289
293
|
<div class="shell fixed inset-0 pointer-events-none" part="shell">
|
|
290
294
|
${when(
|
|
@@ -300,7 +304,7 @@ export class SchmancyOverlay extends SchmancyElement {
|
|
|
300
304
|
aria-modal=${this.modal ? 'true' : 'false'}
|
|
301
305
|
tabindex="-1"
|
|
302
306
|
>
|
|
303
|
-
<div id=${MOUNT_POINT_ID}></div>
|
|
307
|
+
<div id=${MOUNT_POINT_ID} class=${this.layout === 'sheet' && this._full ? 'flex-1 min-h-0 overflow-hidden' : ''}></div>
|
|
304
308
|
</section>
|
|
305
309
|
</div>
|
|
306
310
|
`
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { TemplateResult } from 'lit'
|
|
2
2
|
import type { Observable } from 'rxjs'
|
|
3
|
-
import type { ComponentType } from '../area/router.types'
|
|
4
|
-
import type { THistoryStrategy } from '../area/router.types'
|
|
3
|
+
import type { ComponentType, THistoryStrategy } from '../area/router.types'
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* Sync factory that returns a TemplateResult. Called at mount time so closed-over
|
|
@@ -103,6 +102,19 @@ export interface ShowOptions {
|
|
|
103
102
|
* takeover view that doesn't have an anchor. */
|
|
104
103
|
as?: OverlayLayout
|
|
105
104
|
|
|
105
|
+
/** When `true` and layout resolves to `'sheet'`, the surface takes the
|
|
106
|
+
* full available height (`h-[90dvh]`) instead of sizing to content.
|
|
107
|
+
* The mount point becomes `flex-1 min-h-0 overflow-hidden` so the
|
|
108
|
+
* mounted component can fill it via `height: 100%`. Default `false`. */
|
|
109
|
+
full?: boolean
|
|
110
|
+
|
|
111
|
+
/** When `true` and layout is `'sheet'`, the surface takes the full
|
|
112
|
+
* available height (`h-[90dvh]`) rather than sizing to content. The
|
|
113
|
+
* mount point becomes `flex-1` so the mounted component can fill it
|
|
114
|
+
* via `height: 100%`. Use for immersive full-height panels (e.g. a
|
|
115
|
+
* document review). Default `false`. */
|
|
116
|
+
fillHeight?: boolean
|
|
117
|
+
|
|
106
118
|
/** Default `'push'`. Same vocabulary as `area.push()`.
|
|
107
119
|
* - `'push'` — new history entry; back dismisses, forward re-opens.
|
|
108
120
|
* - `'replace'` — replace current entry; back skips the overlay.
|
|
@@ -9,6 +9,7 @@ import { formatTheme } from './theme.format'
|
|
|
9
9
|
import { TSchmancyTheme } from './theme.interface'
|
|
10
10
|
import { ThemeHereIAm, ThemeWhereAreYou, ThemeWhereAreYouEvent } from './theme.events'
|
|
11
11
|
import style from './theme.style.css?inline'
|
|
12
|
+
import '../surface/surface'
|
|
12
13
|
export const tailwindStyles = unsafeCSS(style)
|
|
13
14
|
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
|
|
14
15
|
const $colorScheme = new Observable<string>(subscriber => {
|
|
@@ -407,6 +407,9 @@
|
|
|
407
407
|
--tracking-wide: 0.025em;
|
|
408
408
|
--tracking-wider: 0.05em;
|
|
409
409
|
--tracking-widest: 0.1em;
|
|
410
|
+
--tracking-eyebrow: 0.18em;
|
|
411
|
+
--tracking-label: 0.14em;
|
|
412
|
+
--leading-display: 0.95;
|
|
410
413
|
--leading-tight: 1.25;
|
|
411
414
|
--leading-snug: 1.375;
|
|
412
415
|
--leading-normal: 1.5;
|
package/types/src/boat/boat.d.ts
CHANGED
|
@@ -2,34 +2,51 @@ import { SchmancyElement } from '@mixins/index';
|
|
|
2
2
|
import { type PropertyValues } from 'lit';
|
|
3
3
|
type Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* overlay service.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* Corner-anchored launcher that delegates its expanded panel to the `show()`
|
|
6
|
+
* overlay service.
|
|
7
|
+
*
|
|
8
|
+
* Three slots, three non-overlapping intents — no element-type sniffing,
|
|
9
|
+
* ever:
|
|
10
|
+
*
|
|
11
|
+
* - `trigger` — pure consumer content. A native click anywhere on it
|
|
12
|
+
* opens the panel; interactive children (buttons, FABs, inputs) work
|
|
13
|
+
* with zero special-casing because the boat never calls
|
|
14
|
+
* `preventDefault` / `stopPropagation` / `setPointerCapture` here.
|
|
15
|
+
* - `drag-handle` — opt-in. Pointer-drag is wired ONLY to this slot's
|
|
16
|
+
* boat-owned wrapper. Slot it to make the boat draggable; omit it and
|
|
17
|
+
* the boat is static at its corner. (A no-move tap on the handle also
|
|
18
|
+
* opens, so the grip doubles as a launcher.)
|
|
19
|
+
* - _(default)_ — the panel body; parked hidden while collapsed,
|
|
20
|
+
* relocated into the `show()` overlay on open.
|
|
21
|
+
*
|
|
22
|
+
* The boat owns drag, corner-snapping, position persistence and the glass
|
|
23
|
+
* surface — never the collapsed shape.
|
|
10
24
|
*/
|
|
11
25
|
export default class SchmancyBoat extends SchmancyElement {
|
|
12
26
|
#private;
|
|
13
|
-
static styles: import("lit").CSSResult[];
|
|
14
27
|
/** Identity for localStorage drag-position persistence. */
|
|
15
28
|
id: string;
|
|
16
|
-
/** Corner the
|
|
29
|
+
/** Corner the launcher is anchored to. */
|
|
17
30
|
corner: Corner;
|
|
18
31
|
/** Open state. Bind `?open=${…}` to drive the overlay; reflected to the attribute. */
|
|
19
32
|
open: boolean;
|
|
20
33
|
private isDragging;
|
|
21
34
|
private currentCorner;
|
|
35
|
+
private hasHandle;
|
|
36
|
+
/** Default-slot nodes — the overlay body. */
|
|
22
37
|
private slotted;
|
|
38
|
+
/** Slotted drag-handle nodes — presence toggles draggability. */
|
|
39
|
+
private handleNodes;
|
|
23
40
|
private position;
|
|
24
41
|
private containerRef;
|
|
25
|
-
private
|
|
42
|
+
private triggerRef;
|
|
43
|
+
private handleRef;
|
|
26
44
|
private currentAnimation?;
|
|
27
45
|
private applyContainerPosition;
|
|
28
46
|
private loadPosition;
|
|
29
47
|
private savePosition;
|
|
30
48
|
private validateBounds;
|
|
31
49
|
private reorientToNearestCorner;
|
|
32
|
-
private setupDrag;
|
|
33
50
|
private openOverlay;
|
|
34
51
|
private restoreSlotted;
|
|
35
52
|
connectedCallback(): void;
|
|
@@ -38,6 +55,7 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
38
55
|
disconnectedCallback(): void;
|
|
39
56
|
/** Flip open ↔ closed. */
|
|
40
57
|
toggle(): void;
|
|
58
|
+
private onHandleSlotChange;
|
|
41
59
|
protected render(): unknown;
|
|
42
60
|
}
|
|
43
61
|
declare global {
|
|
@@ -68,9 +68,10 @@ export declare class SchmnacyIconButton extends SchmancyElement {
|
|
|
68
68
|
*/
|
|
69
69
|
icon?: string;
|
|
70
70
|
private _capturedIcon?;
|
|
71
|
+
private _observer?;
|
|
71
72
|
connectedCallback(): void;
|
|
72
|
-
|
|
73
|
-
private
|
|
73
|
+
disconnectedCallback(): void;
|
|
74
|
+
private _captureIcon;
|
|
74
75
|
set ariaLabel(value: string);
|
|
75
76
|
get ariaLabel(): string;
|
|
76
77
|
/** Sets focus in the button. */
|
|
@@ -1,47 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Assist chip component - prompts user actions like opening calendar events or sharing content
|
|
4
|
-
* Pure Schmancy implementation with Tailwind CSS and RxJS state management
|
|
5
|
-
*/
|
|
6
|
-
export declare class SchmancyAssistChip extends SchmancyElement {
|
|
7
|
-
static styles: import("lit").CSSResult[];
|
|
8
|
-
/** Value identifier for the chip */
|
|
9
|
-
value: string;
|
|
10
|
-
/** Optional icon name (Material Symbols) */
|
|
11
|
-
icon: string;
|
|
12
|
-
/** Optional href for navigation */
|
|
13
|
-
href: string;
|
|
14
|
-
/** Target for navigation (e.g., '_blank') */
|
|
15
|
-
target: string;
|
|
16
|
-
/** Disable the chip */
|
|
17
|
-
disabled: boolean;
|
|
18
|
-
/** Elevated style variant - true by default per M3 spec for assist chips */
|
|
19
|
-
elevated: boolean;
|
|
20
|
-
private hover$;
|
|
21
|
-
private pressed$;
|
|
22
|
-
private focused$;
|
|
23
|
-
private ripples;
|
|
24
|
-
protected static shadowRootOptions: {
|
|
25
|
-
delegatesFocus: boolean;
|
|
26
|
-
clonable?: boolean;
|
|
27
|
-
customElementRegistry?: CustomElementRegistry;
|
|
28
|
-
mode: ShadowRootMode;
|
|
29
|
-
serializable?: boolean;
|
|
30
|
-
slotAssignment?: SlotAssignmentMode;
|
|
31
|
-
};
|
|
32
|
-
private nextRippleId;
|
|
33
|
-
connectedCallback(): void;
|
|
34
|
-
private handleClick;
|
|
35
|
-
private handleKeyDown;
|
|
36
|
-
private handleFocus;
|
|
37
|
-
private handleBlur;
|
|
38
|
-
render(): import("lit-html").TemplateResult<1>;
|
|
39
|
-
}
|
|
40
|
-
declare global {
|
|
41
|
-
interface HTMLElementTagNameMap {
|
|
42
|
-
'schmancy-assist-chip': SchmancyAssistChip;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export type AssistChipActionEvent = {
|
|
46
|
-
value: string;
|
|
47
|
-
};
|
|
1
|
+
export * from '../form/fields/chips/assist-chip';
|
|
@@ -1,43 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { PropertyValues } from 'lit';
|
|
3
|
-
import type { FilterChipChangeEvent as SchmancyChipChangeEvent } from './filter-chip';
|
|
4
|
-
import { SchmancyFilterChip as SchmancyChip } from './filter-chip';
|
|
5
|
-
export default class SchmancyChips extends SchmancyElement {
|
|
6
|
-
static styles: import("lit").CSSResult[];
|
|
7
|
-
private value$;
|
|
8
|
-
private values$;
|
|
9
|
-
private _value;
|
|
10
|
-
private _values;
|
|
11
|
-
private _multi;
|
|
12
|
-
private _valueSet;
|
|
13
|
-
private _valuesSet;
|
|
14
|
-
/**
|
|
15
|
-
* @deprecated Use .values for multi-selection or .value for single-selection instead.
|
|
16
|
-
* The mode is now automatically determined based on which property is used.
|
|
17
|
-
*/
|
|
18
|
-
get multi(): boolean;
|
|
19
|
-
set multi(value: boolean);
|
|
20
|
-
/**
|
|
21
|
-
* Automatically determines the selection mode based on which properties are in use
|
|
22
|
-
*/
|
|
23
|
-
private get mode();
|
|
24
|
-
get values(): string[];
|
|
25
|
-
set values(value: string[]);
|
|
26
|
-
get value(): string;
|
|
27
|
-
set value(value: string);
|
|
28
|
-
chips: (SchmancyChip | HTMLElement)[];
|
|
29
|
-
wrap: boolean;
|
|
30
|
-
required: boolean;
|
|
31
|
-
justify: 'start' | 'center' | 'end';
|
|
32
|
-
connectedCallback(): void;
|
|
33
|
-
private updateChipStates;
|
|
34
|
-
change(e: CustomEvent<SchmancyChipChangeEvent>): Promise<void>;
|
|
35
|
-
protected firstUpdated(_changedProperties: PropertyValues): void;
|
|
36
|
-
protected render(): unknown;
|
|
37
|
-
}
|
|
38
|
-
declare global {
|
|
39
|
-
interface HTMLElementTagNameMap {
|
|
40
|
-
'schmancy-chips': SchmancyChips;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
export type SchmancyChipsChangeEvent = string | Array<string>;
|
|
1
|
+
export * from '../form/fields/chips/chips';
|