@mhmo91/schmancy 0.10.36 → 0.10.37
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 +15 -31
- package/dist/SchmancyElement-BHfQg3Tj.cjs +2 -0
- package/dist/{SchmancyElement-BBzRWB1w.cjs.map → SchmancyElement-BHfQg3Tj.cjs.map} +1 -1
- package/dist/SchmancyElement-CDT2q1lA.js +284 -0
- package/dist/{SchmancyElement-C3CpdNsi.js.map → SchmancyElement-CDT2q1lA.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +111 -72
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +4 -22
- package/dist/{area-BA96mwFY.js → area-KtULlxuA.js} +2 -2
- package/dist/{area-BA96mwFY.js.map → area-KtULlxuA.js.map} +1 -1
- package/dist/{area-DtyQDdOF.cjs → area-fdKhYB6T.cjs} +1 -1
- package/dist/{area-DtyQDdOF.cjs.map → area-fdKhYB6T.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-B_jT9Xr7.cjs → audio-CUMAv9D_.cjs} +1 -1
- package/dist/{audio-B_jT9Xr7.cjs.map → audio-CUMAv9D_.cjs.map} +1 -1
- package/dist/{audio-D52h1jAT.js → audio-zIJVTo_V.js} +1 -1
- package/dist/{audio-D52h1jAT.js.map → audio-zIJVTo_V.js.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/{autocomplete-Bts5Jwwr.cjs → autocomplete-DEZk6wBD.cjs} +1 -1
- package/dist/{autocomplete-Bts5Jwwr.cjs.map → autocomplete-DEZk6wBD.cjs.map} +1 -1
- package/dist/{autocomplete-CI4QJXAN.js → autocomplete-DIScyo8Q.js} +3 -3
- package/dist/{autocomplete-CI4QJXAN.js.map → autocomplete-DIScyo8Q.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-_N1x5U_3.js → boat-BHPqSqJd.js} +4 -4
- package/dist/{boat-_N1x5U_3.js.map → boat-BHPqSqJd.js.map} +1 -1
- package/dist/{boat-I4B1UNMc.cjs → boat-OBZ77exO.cjs} +1 -1
- package/dist/{boat-I4B1UNMc.cjs.map → boat-OBZ77exO.cjs.map} +1 -1
- 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-BIUonyPk.cjs → busy-BJNsKSCM.cjs} +1 -1
- package/dist/{busy-BIUonyPk.cjs.map → busy-BJNsKSCM.cjs.map} +1 -1
- package/dist/{busy-CCB3qKnh.js → busy-Dut78y4L.js} +2 -2
- package/dist/{busy-CCB3qKnh.js.map → busy-Dut78y4L.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-CkwQH-g3.cjs → button-DzlHLjWO.cjs} +1 -1
- package/dist/{button-CkwQH-g3.cjs.map → button-DzlHLjWO.cjs.map} +1 -1
- package/dist/{button-C89bPnHt.js → button-kcpPQavY.js} +2 -2
- package/dist/{button-C89bPnHt.js.map → button-kcpPQavY.js.map} +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +3 -3
- package/dist/{card-BO93_oxQ.cjs → card-BLxPLqdQ.cjs} +1 -1
- package/dist/{card-BO93_oxQ.cjs.map → card-BLxPLqdQ.cjs.map} +1 -1
- package/dist/{card-CFsCgJKZ.js → card-DxSKxCid.js} +2 -2
- package/dist/{card-CFsCgJKZ.js.map → card-DxSKxCid.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-Bh7q0djq.js → checkbox-B1wiM3Dv.js} +2 -2
- package/dist/{checkbox-Bh7q0djq.js.map → checkbox-B1wiM3Dv.js.map} +1 -1
- package/dist/{checkbox-CFUBUFtW.cjs → checkbox-BCLkhp5G.cjs} +1 -1
- package/dist/{checkbox-CFUBUFtW.cjs.map → checkbox-BCLkhp5G.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BfzpsyV1.cjs → chips-C9dS1WKn.cjs} +1 -1
- package/dist/{chips-BfzpsyV1.cjs.map → chips-C9dS1WKn.cjs.map} +1 -1
- package/dist/{chips-6YaoRmeG.js → chips-vWmwqQed.js} +4 -4
- package/dist/{chips-6YaoRmeG.js.map → chips-vWmwqQed.js.map} +1 -1
- 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-N-A249O9.cjs → date-range-BV6HuvLw.cjs} +1 -1
- package/dist/{date-range-N-A249O9.cjs.map → date-range-BV6HuvLw.cjs.map} +1 -1
- package/dist/{date-range-CEo_Kjqw.js → date-range-D3ge1b4c.js} +3 -3
- package/dist/{date-range-CEo_Kjqw.js.map → date-range-D3ge1b4c.js.map} +1 -1
- package/dist/{date-range-inline-DFopysWF.cjs → date-range-inline-DpYgdLRv.cjs} +1 -1
- package/dist/{date-range-inline-DFopysWF.cjs.map → date-range-inline-DpYgdLRv.cjs.map} +1 -1
- package/dist/{date-range-inline-BwialV9j.js → date-range-inline-DuWQaWps.js} +2 -2
- package/dist/{date-range-inline-BwialV9j.js.map → date-range-inline-DuWQaWps.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +2 -2
- package/dist/{details-GtpfI2hA.js → details-C-GZaq3j.js} +2 -2
- package/dist/{details-GtpfI2hA.js.map → details-C-GZaq3j.js.map} +1 -1
- package/dist/{details-BLRPV8sY.cjs → details-Dp5rLIWk.cjs} +1 -1
- package/dist/{details-BLRPV8sY.cjs.map → details-Dp5rLIWk.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-CvYGSW_a.cjs → directives-D_l1E5H6.cjs} +2 -2
- package/dist/{directives-CvYGSW_a.cjs.map → directives-D_l1E5H6.cjs.map} +1 -1
- package/dist/{directives-C2dXgpCY.js → directives-DyS51FUh.js} +27 -18
- package/dist/{directives-C2dXgpCY.js.map → directives-DyS51FUh.js.map} +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/{divider-rNsWCvMi.cjs → divider-CBnAmHMZ.cjs} +1 -1
- package/dist/{divider-rNsWCvMi.cjs.map → divider-CBnAmHMZ.cjs.map} +1 -1
- package/dist/{divider-D0pGX2VB.js → divider-nQffE0AD.js} +2 -2
- package/dist/{divider-D0pGX2VB.js.map → divider-nQffE0AD.js.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-FcKAzJta.js → expand-DvTb-UPR.js} +3 -3
- package/dist/{expand-FcKAzJta.js.map → expand-DvTb-UPR.js.map} +1 -1
- package/dist/{expand-tffQHGbZ.cjs → expand-mlP_3XWz.cjs} +1 -1
- package/dist/{expand-tffQHGbZ.cjs.map → expand-mlP_3XWz.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/fab.cjs +1 -1
- package/dist/fab.js +2 -2
- package/dist/{float-CQ1WEp3M.js → float-C-Ko0Le3.js} +2 -2
- package/dist/{float-CQ1WEp3M.js.map → float-C-Ko0Le3.js.map} +1 -1
- package/dist/{float-CDjgxWyy.cjs → float-C17xgMT1.cjs} +1 -1
- package/dist/{float-CDjgxWyy.cjs.map → float-C17xgMT1.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-VYhbbir3.cjs → form-CwPHcQYB.cjs} +1 -1
- package/dist/{form-VYhbbir3.cjs.map → form-CwPHcQYB.cjs.map} +1 -1
- package/dist/{form-H24puioV.js → form-DA0hUu2h.js} +3 -3
- package/dist/{form-H24puioV.js.map → form-DA0hUu2h.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +12 -12
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{icons-DBxfN91B.js → icons-C6UfxmHZ.js} +2 -2
- package/dist/{icons-DBxfN91B.js.map → icons-C6UfxmHZ.js.map} +1 -1
- package/dist/{icons-B_a1HStW.cjs → icons-CW3-oMSb.cjs} +1 -1
- package/dist/{icons-B_a1HStW.cjs.map → icons-CW3-oMSb.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BDVElN8z.js → iframe-BTjZfYyh.js} +2 -2
- package/dist/{iframe-BDVElN8z.js.map → iframe-BTjZfYyh.js.map} +1 -1
- package/dist/{iframe-CG-z9qev.cjs → iframe-wuYT2xFz.cjs} +1 -1
- package/dist/{iframe-CG-z9qev.cjs.map → iframe-wuYT2xFz.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 +36 -36
- package/dist/{input-Bt_o4sYo.js → input-B_4g2ulO.js} +2 -2
- package/dist/{input-Bt_o4sYo.js.map → input-B_4g2ulO.js.map} +1 -1
- package/dist/{input-B14Nn6xD.cjs → input-BrDiIT60.cjs} +1 -1
- package/dist/{input-B14Nn6xD.cjs.map → input-BrDiIT60.cjs.map} +1 -1
- package/dist/{input-chip-ugYu9Fn9.cjs → input-chip-B-XWh4aE.cjs} +1 -1
- package/dist/{input-chip-ugYu9Fn9.cjs.map → input-chip-B-XWh4aE.cjs.map} +1 -1
- package/dist/{input-chip-DEqO0DXc.js → input-chip-BlWhOruv.js} +2 -2
- package/dist/{input-chip-DEqO0DXc.js.map → input-chip-BlWhOruv.js.map} +1 -1
- 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-DF9ZaQ-b.cjs → layout-BhyIcEVu.cjs} +1 -1
- package/dist/{layout-DF9ZaQ-b.cjs.map → layout-BhyIcEVu.cjs.map} +1 -1
- package/dist/{layout-BJ_43VrH.js → layout-Dxit9enO.js} +1 -1
- package/dist/{layout-BJ_43VrH.js.map → layout-Dxit9enO.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-B47Zoqv-.cjs → lightbox-CVBogswK.cjs} +1 -1
- package/dist/{lightbox-B47Zoqv-.cjs.map → lightbox-CVBogswK.cjs.map} +1 -1
- package/dist/{lightbox-ZmuoBBFT.js → lightbox-D85XAAuC.js} +2 -2
- package/dist/{lightbox-ZmuoBBFT.js.map → lightbox-D85XAAuC.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-C47xzld_.js → list-DOF_yVn5.js} +2 -2
- package/dist/{list-C47xzld_.js.map → list-DOF_yVn5.js.map} +1 -1
- package/dist/{list-CaSWrlG2.cjs → list-nVjLskgx.cjs} +1 -1
- package/dist/{list-CaSWrlG2.cjs.map → list-nVjLskgx.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{menu-Jpsy85SX.cjs → menu-DqmNjLgY.cjs} +1 -1
- package/dist/{menu-Jpsy85SX.cjs.map → menu-DqmNjLgY.cjs.map} +1 -1
- package/dist/{menu-8RObM6Ie.js → menu-QrAK5Uu9.js} +3 -3
- package/dist/{menu-8RObM6Ie.js.map → menu-QrAK5Uu9.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/{mixins-DTzfFVyv.js → mixins-De1zjyhy.js} +1 -1
- package/dist/{mixins-DTzfFVyv.js.map → mixins-De1zjyhy.js.map} +1 -1
- package/dist/{mixins-DPdzC9ZH.cjs → mixins-DxHpyMHA.cjs} +1 -1
- package/dist/{mixins-DPdzC9ZH.cjs.map → mixins-DxHpyMHA.cjs.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-Ccktcj9H.js → notification-BtAK7NK8.js} +4 -4
- package/dist/{notification-Ccktcj9H.js.map → notification-BtAK7NK8.js.map} +1 -1
- package/dist/{notification-DSkB-sn0.cjs → notification-DYzbUb5C.cjs} +1 -1
- package/dist/{notification-DSkB-sn0.cjs.map → notification-DYzbUb5C.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-CkMxwBqU.js → option-DHwA0miA.js} +2 -2
- package/dist/{option-CkMxwBqU.js.map → option-DHwA0miA.js.map} +1 -1
- package/dist/{option-0aNiVB3Q.cjs → option-DnSPa8ro.cjs} +1 -1
- package/dist/{option-0aNiVB3Q.cjs.map → option-DnSPa8ro.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-BS-ta-zq.cjs → overlay-BVkqZmoS.cjs} +1 -1
- package/dist/{overlay-BS-ta-zq.cjs.map → overlay-BVkqZmoS.cjs.map} +1 -1
- package/dist/{overlay-H3Wt_dgQ.js → overlay-Del1sBEB.js} +5 -5
- package/dist/{overlay-H3Wt_dgQ.js.map → overlay-Del1sBEB.js.map} +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-CR9xaqOE.cjs → overlay.confirm-body-BV9umTAl.cjs} +1 -1
- package/dist/{overlay.confirm-body-CR9xaqOE.cjs.map → overlay.confirm-body-BV9umTAl.cjs.map} +1 -1
- package/dist/{overlay.confirm-body-Dxn_wNm3.js → overlay.confirm-body-DSONXUzl.js} +6 -6
- package/dist/{overlay.confirm-body-Dxn_wNm3.js.map → overlay.confirm-body-DSONXUzl.js.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-C46kOtUi.js → overlay.service-BTp5Oq7f.js} +2 -2
- package/dist/{overlay.service-C46kOtUi.js.map → overlay.service-BTp5Oq7f.js.map} +1 -1
- package/dist/{overlay.service-DEj3rfRr.cjs → overlay.service-XLlrsSdA.cjs} +1 -1
- package/dist/{overlay.service-DEj3rfRr.cjs.map → overlay.service-XLlrsSdA.cjs.map} +1 -1
- package/dist/{progress-zs18GR6C.cjs → progress-DUbTL9g9.cjs} +1 -1
- package/dist/{progress-zs18GR6C.cjs.map → progress-DUbTL9g9.cjs.map} +1 -1
- package/dist/{progress-BK7gSq8j.js → progress-DYA83CFU.js} +2 -2
- package/dist/{progress-BK7gSq8j.js.map → progress-DYA83CFU.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-DbYlyPc-.cjs → radio-group-B-ORNtvR.cjs} +1 -1
- package/dist/{radio-group-DbYlyPc-.cjs.map → radio-group-B-ORNtvR.cjs.map} +1 -1
- package/dist/{radio-group-1HCpzRUB.js → radio-group-DxX0iJBo.js} +2 -2
- package/dist/{radio-group-1HCpzRUB.js.map → radio-group-DxX0iJBo.js.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-B-SSmUDe.cjs → select-B9uj_u-s.cjs} +1 -1
- package/dist/{select-B-SSmUDe.cjs.map → select-B9uj_u-s.cjs.map} +1 -1
- package/dist/{select-CEyhNtZ2.js → select-C7gkA-ab.js} +3 -3
- package/dist/{select-CEyhNtZ2.js.map → select-C7gkA-ab.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/SKILL.md +14 -11
- package/dist/skills/schmancy/SKILL.md +14 -11
- package/dist/skills/schmancy/steps.md +68 -34
- package/dist/skills/steps.md +68 -34
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-G_8GV_6L.cjs → sound.service-C7FDY_yD.cjs} +1 -1
- package/dist/{sound.service-G_8GV_6L.cjs.map → sound.service-C7FDY_yD.cjs.map} +1 -1
- package/dist/{sound.service-DO4SmUUT.js → sound.service-O0232os6.js} +1 -1
- package/dist/{sound.service-DO4SmUUT.js.map → sound.service-O0232os6.js.map} +1 -1
- package/dist/{splash-screen-cbz4bxjB.cjs → splash-screen-DIS4odDr.cjs} +1 -1
- package/dist/{splash-screen-cbz4bxjB.cjs.map → splash-screen-DIS4odDr.cjs.map} +1 -1
- package/dist/{splash-screen-B1mM4_xz.js → splash-screen-jfE47xl0.js} +2 -2
- package/dist/{splash-screen-B1mM4_xz.js.map → splash-screen-jfE47xl0.js.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-tncsWsTY.js → src-BP3h-9d9.js} +35 -35
- package/dist/{src-tncsWsTY.js.map → src-BP3h-9d9.js.map} +1 -1
- package/dist/{src-czeiuT1m.cjs → src-Um_pzb-U.cjs} +1 -1
- package/dist/{src-czeiuT1m.cjs.map → src-Um_pzb-U.cjs.map} +1 -1
- package/dist/{state-Cx0aoL5e.cjs → state-Bj0M9a6T.cjs} +1 -1
- package/dist/{state-Cx0aoL5e.cjs.map → state-Bj0M9a6T.cjs.map} +1 -1
- package/dist/{state-DJDp3N7J.js → state-DscWQpoM.js} +1 -1
- package/dist/{state-DJDp3N7J.js.map → state-DscWQpoM.js.map} +1 -1
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +35 -19
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +96 -73
- package/dist/steps.js.map +1 -1
- package/dist/{surface-CYBl8_a3.js → surface-B4Wn4SOO.js} +2 -2
- package/dist/{surface-CYBl8_a3.js.map → surface-B4Wn4SOO.js.map} +1 -1
- package/dist/{surface-C3cxTcJD.cjs → surface-DRq6cVW6.cjs} +1 -1
- package/dist/{surface-C3cxTcJD.cjs.map → surface-DRq6cVW6.cjs.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-ORQ_Zd43.cjs → tabs-Ca_fbHPW.cjs} +1 -1
- package/dist/{tabs-ORQ_Zd43.cjs.map → tabs-Ca_fbHPW.cjs.map} +1 -1
- package/dist/{tabs-DHy93Q3N.js → tabs-CnQPo-XS.js} +2 -2
- package/dist/{tabs-DHy93Q3N.js.map → tabs-CnQPo-XS.js.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-DHIMt-ly.js → textarea-BvqENhTW.js} +2 -2
- package/dist/{textarea-DHIMt-ly.js.map → textarea-BvqENhTW.js.map} +1 -1
- package/dist/{textarea-CEUaDURR.cjs → textarea-qr7oL8oU.cjs} +1 -1
- package/dist/{textarea-CEUaDURR.cjs.map → textarea-qr7oL8oU.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-CJpjkqHr.cjs → theme-BSwJ2YZo.cjs} +1 -1
- package/dist/{theme-CJpjkqHr.cjs.map → theme-BSwJ2YZo.cjs.map} +1 -1
- package/dist/{theme-CgI9PRco.js → theme-BV0EzHQ1.js} +5 -5
- package/dist/{theme-CgI9PRco.js.map → theme-BV0EzHQ1.js.map} +1 -1
- package/dist/{theme-button--FuBkuVr.cjs → theme-button-C6fpUzPM.cjs} +1 -1
- package/dist/{theme-button--FuBkuVr.cjs.map → theme-button-C6fpUzPM.cjs.map} +1 -1
- package/dist/{theme-button-D-FXb3oO.js → theme-button-O_xNCgI7.js} +2 -2
- package/dist/{theme-button-D-FXb3oO.js.map → theme-button-O_xNCgI7.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-BfTK1Wtl.js → theme.service-DwLhhOmP.js} +1 -1
- package/dist/{theme.service-BfTK1Wtl.js.map → theme.service-DwLhhOmP.js.map} +1 -1
- package/dist/{theme.service-Dg7LO0Qz.cjs → theme.service-kn9MC025.cjs} +1 -1
- package/dist/{theme.service-Dg7LO0Qz.cjs.map → theme.service-kn9MC025.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +2 -2
- package/dist/{typography-BEGLfHwz.js → typography-Dtdooaic.js} +2 -2
- package/dist/{typography-BEGLfHwz.js.map → typography-Dtdooaic.js.map} +1 -1
- package/dist/{typography-CxA3sx9B.cjs → typography-opFYuUYS.cjs} +1 -1
- package/dist/{typography-CxA3sx9B.cjs.map → typography-opFYuUYS.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-Vl1u1-EG.cjs → window-BSAemI9J.cjs} +1 -1
- package/dist/{window-Vl1u1-EG.cjs.map → window-BSAemI9J.cjs.map} +1 -1
- package/dist/{window-B_n4P9az.js → window-ConcHirJ.js} +3 -3
- package/dist/{window-B_n4P9az.js.map → window-ConcHirJ.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/SKILL.md +14 -11
- package/skills/schmancy/steps.md +68 -34
- package/src/directives/reveal.ts +192 -118
- package/src/steps/index.ts +1 -1
- package/src/steps/schmancy-step.ts +91 -65
- package/src/steps/{schmancy-steps-container.ts → schmancy-steps.ts} +18 -38
- package/src/steps/steps.context.ts +5 -4
- package/src/steps/steps.test.ts +120 -0
- package/types/src/directives/reveal.d.ts +15 -5
- package/types/src/steps/index.d.ts +1 -1
- package/types/src/steps/schmancy-step.d.ts +8 -23
- package/types/src/steps/{schmancy-steps-container.d.ts → schmancy-steps.d.ts} +8 -9
- package/types/src/steps/steps.context.d.ts +2 -1
- package/types/src/steps/steps.test.d.ts +2 -0
- package/dist/SchmancyElement-BBzRWB1w.cjs +0 -2
- package/dist/SchmancyElement-C3CpdNsi.js +0 -284
package/dist/state.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BHfQg3Tj.cjs`),t=require(`./state-Bj0M9a6T.cjs`);let n=require(`@lit-labs/signals`);exports.SchmancyContext=t.s,Object.defineProperty(exports,`Signal`,{enumerable:!0,get:function(){return n.Signal}}),exports._activeHost=e.r,exports.bindState=t.t,Object.defineProperty(exports,`computed`,{enumerable:!0,get:function(){return n.computed}}),exports.effect=t.n,exports.observe=t.r,exports.schmancyContext=t.i,exports.state=t.a,exports.stateFromObservable=t.o;
|
package/dist/state.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { r as e } from "./SchmancyElement-
|
|
2
|
-
import { a as t, c as n, i as r, l as i, n as a, o, r as s, s as c, t as l } from "./state-
|
|
1
|
+
import { r as e } from "./SchmancyElement-CDT2q1lA.js";
|
|
2
|
+
import { a as t, c as n, i as r, l as i, n as a, o, r as s, s as c, t as l } from "./state-DscWQpoM.js";
|
|
3
3
|
export { i as SchmancyContext, l as Signal, e as _activeHost, a as bindState, s as computed, r as effect, t as observe, o as schmancyContext, c as state, n as stateFromObservable };
|
package/dist/steps.cjs
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BHfQg3Tj.cjs`);require(`./mixins-DxHpyMHA.cjs`);let t=require(`rxjs`),n=require(`rxjs/operators`),r=require(`@lit/context`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/when.js`);var s=class{constructor(){this.stepSubject=new t.BehaviorSubject(1),this.lockBack=!1}get currentStep$(){return this.stepSubject.asObservable()}get currentStep(){return this.stepSubject.value}setStep(e){this.stepSubject.next(e)}},c=(0,r.createContext)(Symbol(`SchmancyStepsContext`)),l=class extends e.t{constructor(...e){super(...e),this.position=1,this.label=``,this.description=``,this.completed=!1,this.currentStep=1,this.hasContent=!1}static{this.styles=[a.css`
|
|
2
2
|
:host {
|
|
3
|
-
display:
|
|
4
|
-
/* Base display is just grid, flex properties will be applied dynamically */
|
|
3
|
+
display: block;
|
|
5
4
|
transition: all 0.2s ease-in-out;
|
|
6
5
|
}
|
|
7
|
-
`]}connectedCallback(){super.connectedCallback()
|
|
6
|
+
`]}connectedCallback(){super.connectedCallback(),this.steps.currentStep$.pipe((0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.currentStep=e,this.updateFlexProperties()})}firstUpdated(){this.updateFlexProperties()}onSlotChange(){this.hasContent=this.assignedNodes.some(e=>e.nodeType===Node.ELEMENT_NODE||e.nodeType===Node.TEXT_NODE&&e.textContent?.trim()!==``),this.updateFlexProperties()}updateFlexProperties(){let e=this.position===this.currentStep;this.style.flex=e&&this.hasContent?`1 1 auto`:`0 0 auto`}get status(){return this.completed||this.position<this.currentStep?`complete`:this.position===this.currentStep?`current`:`upcoming`}onStepClick(){this.steps.lockBack&&this.position<this.currentStep||this.status!==`upcoming`&&this.steps.setStep(this.position)}onStepKeydown(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),this.onStepClick())}render(){let e=this.position===this.currentStep,t=this.status===`complete`,n=this.status===`upcoming`,r=!(n||this.steps.lockBack&&this.position<this.currentStep);return this.hasContent?this.renderContentRow(e,t,n,r):this.renderRailRow(e,t,n,r)}renderContentRow(e,t,n,r){let i={"bg-tertiary-default":t,"bg-outlineVariant":!t},s={"relative border-solid z-10 flex size-8 items-center justify-center rounded-full transition-all duration-200":!0,"bg-tertiary-default text-tertiary-on shadow-md group-hover:shadow-lg":t,"border-2 border-primary-default bg-primary-container text-primary-onContainer shadow-sm":!t&&e,"border-2 border-outline bg-surface-default text-surface-onVariant group-hover:border-primary-default group-hover:bg-primary-container":n},c={"text-primary-default font-medium":e,"text-tertiary-default":t,"text-surface-onVariant":n},l=r?`cursor-pointer`:``;return a.html`
|
|
8
7
|
<li class="relative">
|
|
9
|
-
<!-- Connector line - responsive positioning -->
|
|
10
8
|
<div
|
|
11
|
-
class="absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(
|
|
9
|
+
class="absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(i)}"
|
|
12
10
|
style="height: calc(100% + var(--steps-gap, 0px))"
|
|
13
11
|
aria-hidden="true"
|
|
14
12
|
></div>
|
|
15
13
|
|
|
16
|
-
<!-- Step Button/Label - adjusted padding for mobile -->
|
|
17
14
|
<button
|
|
18
15
|
type="button"
|
|
19
|
-
@click=${this.
|
|
20
|
-
class="relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${
|
|
16
|
+
@click=${this.onStepClick}
|
|
17
|
+
class="relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${l} ${e?`bg-primary-container/20 -mx-1 sm:-mx-2 px-1 sm:px-2 py-2 sm:py-3 rounded-lg`:`py-1 sm:py-2`}"
|
|
21
18
|
>
|
|
22
19
|
<span class="flex items-center h-10 sm:h-12">
|
|
23
|
-
<span class=${this.classMap(
|
|
20
|
+
<span class=${this.classMap(s)}>
|
|
24
21
|
${t?a.html`
|
|
25
22
|
<svg class="size-5 transition-transform duration-200 group-hover:scale-110" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
26
23
|
<path
|
|
@@ -39,7 +36,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
39
36
|
|
|
40
37
|
<span class="flex flex-col items-start justify-center min-w-0 ml-3 sm:ml-6">
|
|
41
38
|
<schmancy-typography type="title" token="md">
|
|
42
|
-
<span class="transition-colors duration-200 ${this.classMap(
|
|
39
|
+
<span class="transition-colors duration-200 ${this.classMap(c)}">${this.label}</span>
|
|
43
40
|
</schmancy-typography>
|
|
44
41
|
${(0,o.when)(this.description,()=>a.html`
|
|
45
42
|
<schmancy-typography type="body" token="sm" class="mt-0.5 sm:mt-1">
|
|
@@ -49,22 +46,41 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
49
46
|
</span>
|
|
50
47
|
</button>
|
|
51
48
|
|
|
52
|
-
<!-- Render step content if the step is active - responsive spacing -->
|
|
53
49
|
${(0,o.when)(e,()=>a.html`
|
|
54
50
|
<div class="ml-6 sm:ml-10 mt-3 sm:mt-4 pb-6 sm:pb-8 transition-all duration-300 ease-out">
|
|
55
|
-
|
|
51
|
+
<slot @slotchange=${this.onSlotChange}></slot>
|
|
56
52
|
</div>
|
|
57
53
|
`)}
|
|
54
|
+
${(0,o.when)(!e,()=>a.html`<slot @slotchange=${this.onSlotChange} style="display:none"></slot>`)}
|
|
58
55
|
</li>
|
|
59
|
-
`}
|
|
56
|
+
`}renderRailRow(e,t,n,r){let i=!this.nextElementSibling?.matches(`schmancy-step`),s=e?`text-primary-default`:t?`text-surface-on`:`text-surface-on-variant`,c=[`relative z-10 w-3 h-3 rounded-full shrink-0 transition-colors duration-300`,t||e?`bg-primary-default`:`bg-outline`,e?`ring-2 ring-offset-2 ring-offset-surface-containerLow ring-primary-default`:``].join(` `);return a.html`
|
|
57
|
+
<div
|
|
58
|
+
class="relative flex items-center gap-4 rounded-lg -mx-2 px-2 py-3 transition-colors duration-200 ${r?`cursor-pointer hover:bg-primary-default/8 focus-visible:ring-2 focus-visible:ring-primary-default`:``}"
|
|
59
|
+
role=${r?`button`:`presentation`}
|
|
60
|
+
tabindex=${r?`0`:`-1`}
|
|
61
|
+
aria-current=${e?`step`:`false`}
|
|
62
|
+
aria-label=${r?`Go back to ${this.label}`:this.label}
|
|
63
|
+
@click=${this.onStepClick}
|
|
64
|
+
@keydown=${this.onStepKeydown}
|
|
65
|
+
>
|
|
66
|
+
${(0,o.when)(!i,()=>a.html`
|
|
67
|
+
<div
|
|
68
|
+
class="absolute left-3.5 top-1/2 w-px h-full transition-colors duration-300 ${t?`bg-primary-default`:`bg-outline`}"
|
|
69
|
+
aria-hidden="true"
|
|
70
|
+
></div>
|
|
71
|
+
`)}
|
|
72
|
+
<div class=${c} aria-hidden="true"></div>
|
|
73
|
+
<schmancy-typography type="label" token="lg" class=${s}>${this.label}</schmancy-typography>
|
|
74
|
+
</div>
|
|
75
|
+
<slot @slotchange=${this.onSlotChange} style="display:none"></slot>
|
|
76
|
+
`}};e.u([(0,i.property)({type:Number})],l.prototype,`position`,void 0),e.u([(0,i.property)({type:String})],l.prototype,`label`,void 0),e.u([(0,i.property)({type:String})],l.prototype,`description`,void 0),e.u([(0,i.property)({type:Boolean,reflect:!0})],l.prototype,`completed`,void 0),e.u([(0,r.consume)({context:c})],l.prototype,`steps`,void 0),e.u([(0,i.state)()],l.prototype,`currentStep`,void 0),e.u([(0,i.state)()],l.prototype,`hasContent`,void 0),e.u([(0,i.queryAssignedNodes)({flatten:!0})],l.prototype,`assignedNodes`,void 0),l=e.u([(0,i.customElement)(`schmancy-step`)],l);var u=class extends e.t{constructor(...e){super(...e),this.controller=new s,this.stepsController=this.controller,this.handleChange=e=>{e.target!==this&&e.stopPropagation()}}static{this.styles=[a.css`
|
|
60
77
|
:host {
|
|
61
78
|
display: block;
|
|
62
|
-
overflow: auto;
|
|
63
79
|
}
|
|
64
|
-
`]}set
|
|
65
|
-
<nav
|
|
66
|
-
<ol
|
|
80
|
+
`]}set value(e){this.controller.currentStep!==e&&this.controller.setStep(e)}get value(){return this.controller.currentStep}set lockBack(e){this.controller.lockBack=e}get lockBack(){return this.controller.lockBack}connectedCallback(){super.connectedCallback(),this.controller.currentStep$.pipe((0,n.distinctUntilChanged)(),(0,n.tap)(e=>{this.requestUpdate(),this.dispatchScopedEvent(`change`,{value:e},{bubbles:!1})}),(0,n.takeUntil)(this.disconnecting)).subscribe()}render(){return a.html`
|
|
81
|
+
<nav aria-label="Progress" @change=${this.handleChange}>
|
|
82
|
+
<ol role="list" style="display:contents">
|
|
67
83
|
<slot></slot>
|
|
68
84
|
</ol>
|
|
69
85
|
</nav>
|
|
70
|
-
`}};e.u([(0,r.provide)({context:c})],u.prototype,`stepsController`,void 0),e.u([(0,i.property)({type:Number,reflect:!0})],u.prototype,`
|
|
86
|
+
`}};e.u([(0,r.provide)({context:c})],u.prototype,`stepsController`,void 0),e.u([(0,i.property)({type:Number,reflect:!0})],u.prototype,`value`,null),e.u([(0,i.property)({type:Boolean,reflect:!0})],u.prototype,`lockBack`,null),u=e.u([(0,i.customElement)(`schmancy-steps`)],u),Object.defineProperty(exports,`SchmancyStep`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`SchmancySteps`,{enumerable:!0,get:function(){return u}}),exports.StepsController=s,exports.stepsContext=c;
|
package/dist/steps.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.cjs","names":[],"sources":["../src/steps/steps.context.ts","../src/steps/schmancy-step.ts","../src/steps/schmancy-steps-container.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { BehaviorSubject } from 'rxjs'\n\nexport class StepsController {\n\tprivate _currentStep = new BehaviorSubject(1)\n\n\tget currentStep$() {\n\t\treturn this._currentStep.asObservable()\n\t}\n\n\tget currentStep() {\n\t\treturn this._currentStep.value\n\t}\n\n\tsetStep(step: number) {\n\t\tthis._currentStep.next(step)\n\t}\n}\n\n/**\n * The actual context object. We provide/consume this in the container and steps.\n */\nexport const stepsContext = createContext<StepsController>(Symbol('SchmancyStepsContext'))\n","import { consume } from '@lit/context'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { Subscription } from 'rxjs'\nimport { stepsContext, StepsController } from './steps.context'\nimport { SchmancyElement } from '@mixins/index'\n\n@customElement('schmancy-step')\nexport class SchmancyStep extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: grid;\n\t\t/* Base display is just grid, flex properties will be applied dynamically */\n\t\ttransition: all 0.2s ease-in-out;\n\t}\n`]\n\n\t/**\n\t * The step's position (1-based). This is used to compare against\n\t * the container's current step to decide if it's \"complete\",\n\t * \"current\", or \"upcoming\".\n\t */\n\t@property({ type: Number }) position = 1\n\n\t@property({ type: String }) title = ''\n\t@property({ type: String }) description = ''\n\n\t// NEW: Allow a step to be explicitly marked as complete.\n\t@property({ type: Boolean, reflect: true }) completed = false\n\n\t/**\n\t * NEW: Lock API to disable users from going back.\n\t * When set to true, clicking on a previous (completed) step is ignored.\n\t */\n\t@property({ type: Boolean }) lockBack = false\n\n\t/**\n\t * Consume the shared StepsController from context.\n\t */\n\t@consume({ context: stepsContext })\n\tprivate steps!: StepsController\n\n\t/**\n\t * Local reactive copy of the container's current step number.\n\t */\n\t@state()\n\tprivate currentStep = 1\n\n\t/**\n\t * Keep a reference to our subscription so we can unsubscribe cleanly.\n\t */\n\tprivate subscription?: Subscription\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t}\n\n\tfirstUpdated() {\n\t\t// Subscribe to updates from the container's StepsController.\n\t\t// Context is guaranteed to be available after first render\n\t\tthis.subscription = this.steps.currentStep$.subscribe(step => {\n\t\t\tthis.currentStep = step\n\t\t\t// When the current step changes, update the flex properties\n\t\t\tthis.updateFlexProperties()\n\t\t})\n\t\t// Initial update of flex properties\n\t\tthis.updateFlexProperties()\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tthis.subscription?.unsubscribe()\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Update the host element's flex properties based on active state\n\t */\n\tprivate updateFlexProperties() {\n\t\tconst isActive = this.position === this.currentStep\n\n\t\tif (isActive) {\n\t\t\t// Apply flex-grow when active\n\t\t\tthis.style.flex = '1 1 auto'\n\t\t} else {\n\t\t\t// Make it shrink when not active\n\t\t\tthis.style.flex = '0 0 auto'\n\t\t}\n\t}\n\n\t/**\n\t * Compute visual status for styling purposes. Note that if a step is explicitly\n\t * marked as completed, it always appears as complete even if it's active.\n\t */\n\tget status(): 'complete' | 'current' | 'upcoming' {\n\t\tif (this.completed || this.position < this.currentStep) return 'complete'\n\t\tif (this.position === this.currentStep) return 'current'\n\t\treturn 'upcoming'\n\t}\n\n\t/**\n\t * Click handler to allow navigation between completed (or active) steps.\n\t * With lockBack enabled, clicking on a previous step is ignored.\n\t */\n\tprivate _onStepClick(_e: Event) {\n\t\t// If lockBack is enabled and the user attempts to go back, do nothing.\n\t\tif (this.lockBack && this.position < this.currentStep) {\n\t\t\treturn\n\t\t}\n\t\tif (this.status !== 'upcoming') {\n\t\t\tthis.steps.setStep(this.position)\n\t\t}\n\t}\n\n\trender() {\n\t\t// Determine if the step is currently active.\n\t\tconst isActive = this.position === this.currentStep\n\n\t\t// Use computed status for visual styling.\n\t\tconst isComplete = this.status === 'complete'\n\t\tconst isUpcoming = this.status === 'upcoming'\n\n\t\t// Enhanced styling classes with better visual hierarchy\n\t\tconst connectorClasses = {\n\t\t\t'bg-tertiary-default': isComplete,\n\t\t\t'bg-outlineVariant': !isComplete,\n\t\t}\n\n\t\tconst iconContainerClasses = {\n\t\t\t'relative border-solid z-10 flex size-8 items-center justify-center rounded-full transition-all duration-200': true,\n\t\t\t'bg-tertiary-default text-tertiary-on shadow-md group-hover:shadow-lg': isComplete,\n\t\t\t'border-2 border-primary-default bg-primary-container text-primary-onContainer shadow-sm': !isComplete && isActive,\n\t\t\t'border-2 border-outline bg-surface-default text-surface-onVariant group-hover:border-primary-default group-hover:bg-primary-container': isUpcoming,\n\t\t}\n\n\t\tconst textClasses = {\n\t\t\t'text-primary-default font-medium': isActive,\n\t\t\t'text-tertiary-default': isComplete,\n\t\t\t'text-surface-onVariant': isUpcoming,\n\t\t}\n\n\t\t// If the step is clickable (active or complete), add a pointer cursor.\n\t\tconst clickableClass = isActive || isComplete ? 'cursor-pointer' : ''\n\n\t\treturn html`\n\t\t\t<li class=\"relative\">\n\t\t\t\t<!-- Connector line - responsive positioning -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(connectorClasses)}\"\n\t\t\t\t\tstyle=\"height: calc(100% + var(--steps-gap, 0px))\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Step Button/Label - adjusted padding for mobile -->\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t@click=${this._onStepClick}\n\t\t\t\t\tclass=\"relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${clickableClass} ${isActive ? 'bg-primary-container/20 -mx-1 sm:-mx-2 px-1 sm:px-2 py-2 sm:py-3 rounded-lg' : 'py-1 sm:py-2'}\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"flex items-center h-10 sm:h-12\">\n\t\t\t\t\t\t<span class=${this.classMap(iconContainerClasses)}>\n\t\t\t\t\t\t\t${isComplete\n\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t<svg class=\"size-5 transition-transform duration-200 group-hover:scale-110\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"size-3 rounded-full transition-all duration-200 ${isActive\n\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-primary-onContainer'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'bg-transparent group-hover:bg-primary-default group-hover:scale-125'}\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span class=\"flex flex-col items-start justify-center min-w-0 ml-3 sm:ml-6\">\n\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\">\n\t\t\t\t\t\t\t<span class=\"transition-colors duration-200 ${this.classMap(textClasses)}\">${this.title}</span>\n\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\tthis.description,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"mt-0.5 sm:mt-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"text-surface-onVariant transition-colors duration-200 ${isActive ? 'text-primary-onContainer' : ''}\">${this.description}</span>\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- Render step content if the step is active - responsive spacing -->\n\t\t\t\t${when(\n\t\t\t\t\tisActive,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div class=\"ml-6 sm:ml-10 mt-3 sm:mt-4 pb-6 sm:pb-8 transition-all duration-300 ease-out\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</li>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-step': SchmancyStep\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { distinctUntilChanged, takeUntil, tap } from 'rxjs/operators'\nimport { StepsController, stepsContext } from './steps.context'\n\n/**\n * Custom event emitted when the current step changes.\n * The component stops propagation of bubbled 'change' events from child inputs\n * to prevent collision with the step change event.\n */\nexport type SchmancyStepsChangeEvent = CustomEvent<{ value: number }>\n\n@customElement('schmancy-steps-container')\nexport class SchmancyStepsContainer extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\toverflow: auto;\n\t}\n`]\n\n\tprivate controller = new StepsController()\n\n\t@provide({ context: stepsContext })\n\tstepsController = this.controller\n\n\t@property({ type: Number, reflect: true })\n\tset currentStep(value: number) {\n\t\tconst oldValue = this.controller.currentStep\n\t\tif (oldValue !== value) {\n\t\t\tthis.controller.setStep(value)\n\t\t}\n\t}\n\n\tget currentStep(): number {\n\t\treturn this.controller.currentStep\n\t}\n\n\t/**\n\t * Gap between steps. Maps to Tailwind gap classes.\n\t * @default 4\n\t */\n\t@property({ type: Number, reflect: true })\n\tgap: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24 = 4\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// React to controller changes (from property OR step clicks)\n\t\tthis.controller.currentStep$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(step => {\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t\t// Use dispatchScopedEvent with bubbles: false to prevent collision\n\t\t\t\t\t// with 'change' events bubbling up from inputs inside steps\n\t\t\t\t\tthis.dispatchScopedEvent('change', { value: step }, { bubbles: false })\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Handle change events - stop propagation of bubbled events from children.\n\t * This prevents form inputs inside steps from triggering the parent's @change handler.\n\t */\n\tprivate handleChange = (e: Event) => {\n\t\t// Only stop propagation if the event is NOT from this component\n\t\t// (i.e., it's bubbling up from a child element like an input)\n\t\tif (e.target !== this) {\n\t\t\te.stopPropagation()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst gapClass = `gap-${this.gap}`\n\t\tconst gapRem =\n\t\t\t{\n\t\t\t\t0: '0',\n\t\t\t\t1: '0.25rem',\n\t\t\t\t2: '0.5rem',\n\t\t\t\t3: '0.75rem',\n\t\t\t\t4: '1rem',\n\t\t\t\t5: '1.25rem',\n\t\t\t\t6: '1.5rem',\n\t\t\t\t8: '2rem',\n\t\t\t\t10: '2.5rem',\n\t\t\t\t12: '3rem',\n\t\t\t\t16: '4rem',\n\t\t\t\t20: '5rem',\n\t\t\t\t24: '6rem',\n\t\t\t}[this.gap] || '1rem'\n\n\t\treturn html`\n\t\t\t<nav class=\"flex h-full w-full\" aria-label=\"Progress\" @change=${this.handleChange}>\n\t\t\t\t<ol class=\"flex flex-col flex-1 ${gapClass}\" role=\"list\" style=\"--steps-gap: ${gapRem}\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ol>\n\t\t\t</nav>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-steps-container': SchmancyStepsContainer\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"steps.cjs","names":[],"sources":["../src/steps/steps.context.ts","../src/steps/schmancy-step.ts","../src/steps/schmancy-steps.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { BehaviorSubject } from 'rxjs'\n\nexport class StepsController {\n\tprivate stepSubject = new BehaviorSubject(1)\n\tlockBack = false\n\n\tget currentStep$() {\n\t\treturn this.stepSubject.asObservable()\n\t}\n\n\tget currentStep() {\n\t\treturn this.stepSubject.value\n\t}\n\n\tsetStep(step: number) {\n\t\tthis.stepSubject.next(step)\n\t}\n}\n\n/**\n * The actual context object. We provide/consume this in the container and steps.\n */\nexport const stepsContext = createContext<StepsController>(Symbol('SchmancyStepsContext'))\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAssignedNodes, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { takeUntil } from 'rxjs/operators'\nimport { StepsController, stepsContext } from './steps.context'\n\n@customElement('schmancy-step')\nexport class SchmancyStep extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\ttransition: all 0.2s ease-in-out;\n\t}\n`]\n\n\t/**\n\t * The step's position (1-based). This is used to compare against\n\t * the container's current step to decide if it's \"complete\",\n\t * \"current\", or \"upcoming\".\n\t */\n\t@property({ type: Number }) position = 1\n\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) description = ''\n\n\t@property({ type: Boolean, reflect: true }) completed = false\n\n\t/**\n\t * Consume the shared StepsController from context.\n\t */\n\t@consume({ context: stepsContext })\n\tprivate steps!: StepsController\n\n\t/**\n\t * Local reactive copy of the container's current step number.\n\t */\n\t@state()\n\tprivate currentStep = 1\n\n\t@state()\n\tprivate hasContent = false\n\n\t@queryAssignedNodes({ flatten: true })\n\tprivate assignedNodes!: Node[]\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.steps.currentStep$\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(step => {\n\t\t\t\tthis.currentStep = step\n\t\t\t\tthis.updateFlexProperties()\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tthis.updateFlexProperties()\n\t}\n\n\tprivate onSlotChange() {\n\t\tthis.hasContent = this.assignedNodes.some(\n\t\t\tn => n.nodeType === Node.ELEMENT_NODE || (n.nodeType === Node.TEXT_NODE && n.textContent?.trim() !== ''),\n\t\t)\n\t\tthis.updateFlexProperties()\n\t}\n\n\tprivate updateFlexProperties() {\n\t\tconst isActive = this.position === this.currentStep\n\t\tthis.style.flex = isActive && this.hasContent ? '1 1 auto' : '0 0 auto'\n\t}\n\n\tget status(): 'complete' | 'current' | 'upcoming' {\n\t\tif (this.completed || this.position < this.currentStep) return 'complete'\n\t\tif (this.position === this.currentStep) return 'current'\n\t\treturn 'upcoming'\n\t}\n\n\tprivate onStepClick() {\n\t\tif (this.steps.lockBack && this.position < this.currentStep) return\n\t\tif (this.status !== 'upcoming') {\n\t\t\tthis.steps.setStep(this.position)\n\t\t}\n\t}\n\n\tprivate onStepKeydown(e: KeyboardEvent) {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.onStepClick()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst isActive = this.position === this.currentStep\n\t\tconst isComplete = this.status === 'complete'\n\t\tconst isUpcoming = this.status === 'upcoming'\n\t\tconst navigable = !isUpcoming && !(this.steps.lockBack && this.position < this.currentStep)\n\n\t\tif (this.hasContent) {\n\t\t\treturn this.renderContentRow(isActive, isComplete, isUpcoming, navigable)\n\t\t}\n\t\treturn this.renderRailRow(isActive, isComplete, isUpcoming, navigable)\n\t}\n\n\tprivate renderContentRow(isActive: boolean, isComplete: boolean, isUpcoming: boolean, navigable: boolean) {\n\t\tconst connectorClasses = {\n\t\t\t'bg-tertiary-default': isComplete,\n\t\t\t'bg-outlineVariant': !isComplete,\n\t\t}\n\n\t\tconst iconContainerClasses = {\n\t\t\t'relative border-solid z-10 flex size-8 items-center justify-center rounded-full transition-all duration-200': true,\n\t\t\t'bg-tertiary-default text-tertiary-on shadow-md group-hover:shadow-lg': isComplete,\n\t\t\t'border-2 border-primary-default bg-primary-container text-primary-onContainer shadow-sm': !isComplete && isActive,\n\t\t\t'border-2 border-outline bg-surface-default text-surface-onVariant group-hover:border-primary-default group-hover:bg-primary-container': isUpcoming,\n\t\t}\n\n\t\tconst textClasses = {\n\t\t\t'text-primary-default font-medium': isActive,\n\t\t\t'text-tertiary-default': isComplete,\n\t\t\t'text-surface-onVariant': isUpcoming,\n\t\t}\n\n\t\tconst clickableClass = navigable ? 'cursor-pointer' : ''\n\n\t\treturn html`\n\t\t\t<li class=\"relative\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(connectorClasses)}\"\n\t\t\t\t\tstyle=\"height: calc(100% + var(--steps-gap, 0px))\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t@click=${this.onStepClick}\n\t\t\t\t\tclass=\"relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${clickableClass} ${isActive ? 'bg-primary-container/20 -mx-1 sm:-mx-2 px-1 sm:px-2 py-2 sm:py-3 rounded-lg' : 'py-1 sm:py-2'}\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"flex items-center h-10 sm:h-12\">\n\t\t\t\t\t\t<span class=${this.classMap(iconContainerClasses)}>\n\t\t\t\t\t\t\t${isComplete\n\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t<svg class=\"size-5 transition-transform duration-200 group-hover:scale-110\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"size-3 rounded-full transition-all duration-200 ${isActive\n\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-primary-onContainer'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'bg-transparent group-hover:bg-primary-default group-hover:scale-125'}\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span class=\"flex flex-col items-start justify-center min-w-0 ml-3 sm:ml-6\">\n\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\">\n\t\t\t\t\t\t\t<span class=\"transition-colors duration-200 ${this.classMap(textClasses)}\">${this.label}</span>\n\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\tthis.description,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"mt-0.5 sm:mt-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"text-surface-onVariant transition-colors duration-200 ${isActive ? 'text-primary-onContainer' : ''}\">${this.description}</span>\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t\t${when(\n\t\t\t\t\tisActive,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div class=\"ml-6 sm:ml-10 mt-3 sm:mt-4 pb-6 sm:pb-8 transition-all duration-300 ease-out\">\n\t\t\t\t\t\t\t<slot @slotchange=${this.onSlotChange}></slot>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t\t${when(!isActive, () => html`<slot @slotchange=${this.onSlotChange} style=\"display:none\"></slot>`)}\n\t\t\t</li>\n\t\t`\n\t}\n\n\tprivate renderRailRow(isActive: boolean, isComplete: boolean, _isUpcoming: boolean, navigable: boolean) {\n\t\tconst isLast = !this.nextElementSibling?.matches('schmancy-step')\n\t\tconst labelClass = isActive\n\t\t\t? 'text-primary-default'\n\t\t\t: isComplete\n\t\t\t\t? 'text-surface-on'\n\t\t\t\t: 'text-surface-on-variant'\n\n\t\tconst dotClass = [\n\t\t\t'relative z-10 w-3 h-3 rounded-full shrink-0 transition-colors duration-300',\n\t\t\tisComplete || isActive ? 'bg-primary-default' : 'bg-outline',\n\t\t\tisActive ? 'ring-2 ring-offset-2 ring-offset-surface-containerLow ring-primary-default' : '',\n\t\t].join(' ')\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"relative flex items-center gap-4 rounded-lg -mx-2 px-2 py-3 transition-colors duration-200 ${\n\t\t\t\t\tnavigable\n\t\t\t\t\t\t? 'cursor-pointer hover:bg-primary-default/8 focus-visible:ring-2 focus-visible:ring-primary-default'\n\t\t\t\t\t\t: ''\n\t\t\t\t}\"\n\t\t\t\trole=${navigable ? 'button' : 'presentation'}\n\t\t\t\ttabindex=${navigable ? '0' : '-1'}\n\t\t\t\taria-current=${isActive ? 'step' : 'false'}\n\t\t\t\taria-label=${navigable ? `Go back to ${this.label}` : this.label}\n\t\t\t\t@click=${this.onStepClick}\n\t\t\t\t@keydown=${this.onStepKeydown}\n\t\t\t>\n\t\t\t\t${when(\n\t\t\t\t\t!isLast,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute left-3.5 top-1/2 w-px h-full transition-colors duration-300 ${\n\t\t\t\t\t\t\t\tisComplete ? 'bg-primary-default' : 'bg-outline'\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t\t<div class=${dotClass} aria-hidden=\"true\"></div>\n\t\t\t\t<schmancy-typography type=\"label\" token=\"lg\" class=${labelClass}>${this.label}</schmancy-typography>\n\t\t\t</div>\n\t\t\t<slot @slotchange=${this.onSlotChange} style=\"display:none\"></slot>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-step': SchmancyStep\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { distinctUntilChanged, takeUntil, tap } from 'rxjs/operators'\nimport { StepsController, stepsContext } from './steps.context'\n\n/**\n * Custom event emitted when the current step changes.\n * The component stops propagation of bubbled 'change' events from child inputs\n * to prevent collision with the step change event.\n */\nexport type SchmancyStepsChangeEvent = CustomEvent<{ value: number }>\n\n@customElement('schmancy-steps')\nexport class SchmancySteps extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`]\n\n\tprivate controller = new StepsController()\n\n\t@provide({ context: stepsContext })\n\tstepsController = this.controller\n\n\t@property({ type: Number, reflect: true })\n\tset value(v: number) {\n\t\tconst oldValue = this.controller.currentStep\n\t\tif (oldValue !== v) {\n\t\t\tthis.controller.setStep(v)\n\t\t}\n\t}\n\n\tget value(): number {\n\t\treturn this.controller.currentStep\n\t}\n\n\t/**\n\t * Block back-navigation for the whole stepper.\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tset lockBack(v: boolean) {\n\t\tthis.controller.lockBack = v\n\t}\n\tget lockBack(): boolean {\n\t\treturn this.controller.lockBack\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// React to controller changes (from property OR step clicks)\n\t\tthis.controller.currentStep$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(step => {\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t\tthis.dispatchScopedEvent('change', { value: step }, { bubbles: false })\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Handle change events — stop propagation of bubbled events from children.\n\t */\n\tprivate handleChange = (e: Event) => {\n\t\tif (e.target !== this) {\n\t\t\te.stopPropagation()\n\t\t}\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<nav aria-label=\"Progress\" @change=${this.handleChange}>\n\t\t\t\t<ol role=\"list\" style=\"display:contents\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ol>\n\t\t\t</nav>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-steps': SchmancySteps\n\t}\n}\n"],"mappings":"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"}
|
package/dist/steps.js
CHANGED
|
@@ -1,89 +1,94 @@
|
|
|
1
|
-
import { t as e, u as t } from "./SchmancyElement-
|
|
2
|
-
import "./mixins-
|
|
1
|
+
import { t as e, u as t } from "./SchmancyElement-CDT2q1lA.js";
|
|
2
|
+
import "./mixins-De1zjyhy.js";
|
|
3
3
|
import { BehaviorSubject as n } from "rxjs";
|
|
4
4
|
import { distinctUntilChanged as r, takeUntil as i, tap as a } from "rxjs/operators";
|
|
5
5
|
import { consume as o, createContext as s, provide as c } from "@lit/context";
|
|
6
|
-
import { customElement as l, property as u,
|
|
7
|
-
import { css as
|
|
8
|
-
import { when as
|
|
9
|
-
var
|
|
6
|
+
import { customElement as l, property as u, queryAssignedNodes as d, state as f } from "lit/decorators.js";
|
|
7
|
+
import { css as p, html as m } from "lit";
|
|
8
|
+
import { when as h } from "lit/directives/when.js";
|
|
9
|
+
var g = class {
|
|
10
10
|
constructor() {
|
|
11
|
-
this.
|
|
11
|
+
this.stepSubject = new n(1), this.lockBack = !1;
|
|
12
12
|
}
|
|
13
13
|
get currentStep$() {
|
|
14
|
-
return this.
|
|
14
|
+
return this.stepSubject.asObservable();
|
|
15
15
|
}
|
|
16
16
|
get currentStep() {
|
|
17
|
-
return this.
|
|
17
|
+
return this.stepSubject.value;
|
|
18
18
|
}
|
|
19
19
|
setStep(e) {
|
|
20
|
-
this.
|
|
20
|
+
this.stepSubject.next(e);
|
|
21
21
|
}
|
|
22
|
-
},
|
|
22
|
+
}, _ = s(Symbol("SchmancyStepsContext")), v = class extends e {
|
|
23
23
|
constructor(...e) {
|
|
24
|
-
super(...e), this.position = 1, this.
|
|
24
|
+
super(...e), this.position = 1, this.label = "", this.description = "", this.completed = !1, this.currentStep = 1, this.hasContent = !1;
|
|
25
25
|
}
|
|
26
26
|
static {
|
|
27
|
-
this.styles = [
|
|
27
|
+
this.styles = [p`
|
|
28
28
|
:host {
|
|
29
|
-
display:
|
|
30
|
-
/* Base display is just grid, flex properties will be applied dynamically */
|
|
29
|
+
display: block;
|
|
31
30
|
transition: all 0.2s ease-in-out;
|
|
32
31
|
}
|
|
33
32
|
`];
|
|
34
33
|
}
|
|
35
34
|
connectedCallback() {
|
|
36
|
-
super.connectedCallback()
|
|
35
|
+
super.connectedCallback(), this.steps.currentStep$.pipe(i(this.disconnecting)).subscribe((e) => {
|
|
36
|
+
this.currentStep = e, this.updateFlexProperties();
|
|
37
|
+
});
|
|
37
38
|
}
|
|
38
39
|
firstUpdated() {
|
|
39
|
-
this.
|
|
40
|
-
this.currentStep = e, this.updateFlexProperties();
|
|
41
|
-
}), this.updateFlexProperties();
|
|
40
|
+
this.updateFlexProperties();
|
|
42
41
|
}
|
|
43
|
-
|
|
44
|
-
this.
|
|
42
|
+
onSlotChange() {
|
|
43
|
+
this.hasContent = this.assignedNodes.some((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim() !== ""), this.updateFlexProperties();
|
|
45
44
|
}
|
|
46
45
|
updateFlexProperties() {
|
|
47
|
-
this.position === this.currentStep
|
|
46
|
+
let e = this.position === this.currentStep;
|
|
47
|
+
this.style.flex = e && this.hasContent ? "1 1 auto" : "0 0 auto";
|
|
48
48
|
}
|
|
49
49
|
get status() {
|
|
50
50
|
return this.completed || this.position < this.currentStep ? "complete" : this.position === this.currentStep ? "current" : "upcoming";
|
|
51
51
|
}
|
|
52
|
-
|
|
53
|
-
this.lockBack && this.position < this.currentStep || this.status !== "upcoming" && this.steps.setStep(this.position);
|
|
52
|
+
onStepClick() {
|
|
53
|
+
this.steps.lockBack && this.position < this.currentStep || this.status !== "upcoming" && this.steps.setStep(this.position);
|
|
54
|
+
}
|
|
55
|
+
onStepKeydown(e) {
|
|
56
|
+
e.key !== "Enter" && e.key !== " " || (e.preventDefault(), this.onStepClick());
|
|
54
57
|
}
|
|
55
58
|
render() {
|
|
56
|
-
let e = this.position === this.currentStep, t = this.status === "complete", n = this.status === "upcoming", r =
|
|
59
|
+
let e = this.position === this.currentStep, t = this.status === "complete", n = this.status === "upcoming", r = !(n || this.steps.lockBack && this.position < this.currentStep);
|
|
60
|
+
return this.hasContent ? this.renderContentRow(e, t, n, r) : this.renderRailRow(e, t, n, r);
|
|
61
|
+
}
|
|
62
|
+
renderContentRow(e, t, n, r) {
|
|
63
|
+
let i = {
|
|
57
64
|
"bg-tertiary-default": t,
|
|
58
65
|
"bg-outlineVariant": !t
|
|
59
|
-
},
|
|
66
|
+
}, a = {
|
|
60
67
|
"relative border-solid z-10 flex size-8 items-center justify-center rounded-full transition-all duration-200": !0,
|
|
61
68
|
"bg-tertiary-default text-tertiary-on shadow-md group-hover:shadow-lg": t,
|
|
62
69
|
"border-2 border-primary-default bg-primary-container text-primary-onContainer shadow-sm": !t && e,
|
|
63
70
|
"border-2 border-outline bg-surface-default text-surface-onVariant group-hover:border-primary-default group-hover:bg-primary-container": n
|
|
64
|
-
},
|
|
71
|
+
}, o = {
|
|
65
72
|
"text-primary-default font-medium": e,
|
|
66
73
|
"text-tertiary-default": t,
|
|
67
74
|
"text-surface-onVariant": n
|
|
68
|
-
},
|
|
69
|
-
return
|
|
75
|
+
}, s = r ? "cursor-pointer" : "";
|
|
76
|
+
return m`
|
|
70
77
|
<li class="relative">
|
|
71
|
-
<!-- Connector line - responsive positioning -->
|
|
72
78
|
<div
|
|
73
|
-
class="absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(
|
|
79
|
+
class="absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(i)}"
|
|
74
80
|
style="height: calc(100% + var(--steps-gap, 0px))"
|
|
75
81
|
aria-hidden="true"
|
|
76
82
|
></div>
|
|
77
83
|
|
|
78
|
-
<!-- Step Button/Label - adjusted padding for mobile -->
|
|
79
84
|
<button
|
|
80
85
|
type="button"
|
|
81
|
-
@click=${this.
|
|
82
|
-
class="relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${
|
|
86
|
+
@click=${this.onStepClick}
|
|
87
|
+
class="relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${s} ${e ? "bg-primary-container/20 -mx-1 sm:-mx-2 px-1 sm:px-2 py-2 sm:py-3 rounded-lg" : "py-1 sm:py-2"}"
|
|
83
88
|
>
|
|
84
89
|
<span class="flex items-center h-10 sm:h-12">
|
|
85
|
-
<span class=${this.classMap(
|
|
86
|
-
${t ?
|
|
90
|
+
<span class=${this.classMap(a)}>
|
|
91
|
+
${t ? m`
|
|
87
92
|
<svg class="size-5 transition-transform duration-200 group-hover:scale-110" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
88
93
|
<path
|
|
89
94
|
fill-rule="evenodd"
|
|
@@ -91,7 +96,7 @@ var h = class {
|
|
|
91
96
|
clip-rule="evenodd"
|
|
92
97
|
/>
|
|
93
98
|
</svg>
|
|
94
|
-
` :
|
|
99
|
+
` : m`
|
|
95
100
|
<span
|
|
96
101
|
class="size-3 rounded-full transition-all duration-200 ${e ? "bg-primary-onContainer" : "bg-transparent group-hover:bg-primary-default group-hover:scale-125"}"
|
|
97
102
|
></span>
|
|
@@ -101,9 +106,9 @@ var h = class {
|
|
|
101
106
|
|
|
102
107
|
<span class="flex flex-col items-start justify-center min-w-0 ml-3 sm:ml-6">
|
|
103
108
|
<schmancy-typography type="title" token="md">
|
|
104
|
-
<span class="transition-colors duration-200 ${this.classMap(
|
|
109
|
+
<span class="transition-colors duration-200 ${this.classMap(o)}">${this.label}</span>
|
|
105
110
|
</schmancy-typography>
|
|
106
|
-
${
|
|
111
|
+
${h(this.description, () => m`
|
|
107
112
|
<schmancy-typography type="body" token="sm" class="mt-0.5 sm:mt-1">
|
|
108
113
|
<span class="text-surface-onVariant transition-colors duration-200 ${e ? "text-primary-onContainer" : ""}">${this.description}</span>
|
|
109
114
|
</schmancy-typography>
|
|
@@ -111,75 +116,93 @@ var h = class {
|
|
|
111
116
|
</span>
|
|
112
117
|
</button>
|
|
113
118
|
|
|
114
|
-
|
|
115
|
-
${m(e, () => p`
|
|
119
|
+
${h(e, () => m`
|
|
116
120
|
<div class="ml-6 sm:ml-10 mt-3 sm:mt-4 pb-6 sm:pb-8 transition-all duration-300 ease-out">
|
|
117
|
-
|
|
121
|
+
<slot @slotchange=${this.onSlotChange}></slot>
|
|
118
122
|
</div>
|
|
119
123
|
`)}
|
|
124
|
+
${h(!e, () => m`<slot @slotchange=${this.onSlotChange} style="display:none"></slot>`)}
|
|
120
125
|
</li>
|
|
121
126
|
`;
|
|
122
127
|
}
|
|
128
|
+
renderRailRow(e, t, n, r) {
|
|
129
|
+
let i = !this.nextElementSibling?.matches("schmancy-step"), a = e ? "text-primary-default" : t ? "text-surface-on" : "text-surface-on-variant", o = [
|
|
130
|
+
"relative z-10 w-3 h-3 rounded-full shrink-0 transition-colors duration-300",
|
|
131
|
+
t || e ? "bg-primary-default" : "bg-outline",
|
|
132
|
+
e ? "ring-2 ring-offset-2 ring-offset-surface-containerLow ring-primary-default" : ""
|
|
133
|
+
].join(" ");
|
|
134
|
+
return m`
|
|
135
|
+
<div
|
|
136
|
+
class="relative flex items-center gap-4 rounded-lg -mx-2 px-2 py-3 transition-colors duration-200 ${r ? "cursor-pointer hover:bg-primary-default/8 focus-visible:ring-2 focus-visible:ring-primary-default" : ""}"
|
|
137
|
+
role=${r ? "button" : "presentation"}
|
|
138
|
+
tabindex=${r ? "0" : "-1"}
|
|
139
|
+
aria-current=${e ? "step" : "false"}
|
|
140
|
+
aria-label=${r ? `Go back to ${this.label}` : this.label}
|
|
141
|
+
@click=${this.onStepClick}
|
|
142
|
+
@keydown=${this.onStepKeydown}
|
|
143
|
+
>
|
|
144
|
+
${h(!i, () => m`
|
|
145
|
+
<div
|
|
146
|
+
class="absolute left-3.5 top-1/2 w-px h-full transition-colors duration-300 ${t ? "bg-primary-default" : "bg-outline"}"
|
|
147
|
+
aria-hidden="true"
|
|
148
|
+
></div>
|
|
149
|
+
`)}
|
|
150
|
+
<div class=${o} aria-hidden="true"></div>
|
|
151
|
+
<schmancy-typography type="label" token="lg" class=${a}>${this.label}</schmancy-typography>
|
|
152
|
+
</div>
|
|
153
|
+
<slot @slotchange=${this.onSlotChange} style="display:none"></slot>
|
|
154
|
+
`;
|
|
155
|
+
}
|
|
123
156
|
};
|
|
124
|
-
t([u({ type: Number })],
|
|
157
|
+
t([u({ type: Number })], v.prototype, "position", void 0), t([u({ type: String })], v.prototype, "label", void 0), t([u({ type: String })], v.prototype, "description", void 0), t([u({
|
|
125
158
|
type: Boolean,
|
|
126
159
|
reflect: !0
|
|
127
|
-
})],
|
|
128
|
-
var
|
|
160
|
+
})], v.prototype, "completed", void 0), t([o({ context: _ })], v.prototype, "steps", void 0), t([f()], v.prototype, "currentStep", void 0), t([f()], v.prototype, "hasContent", void 0), t([d({ flatten: !0 })], v.prototype, "assignedNodes", void 0), v = t([l("schmancy-step")], v);
|
|
161
|
+
var y = class extends e {
|
|
129
162
|
constructor(...e) {
|
|
130
|
-
super(...e), this.controller = new
|
|
163
|
+
super(...e), this.controller = new g(), this.stepsController = this.controller, this.handleChange = (e) => {
|
|
131
164
|
e.target !== this && e.stopPropagation();
|
|
132
165
|
};
|
|
133
166
|
}
|
|
134
167
|
static {
|
|
135
|
-
this.styles = [
|
|
168
|
+
this.styles = [p`
|
|
136
169
|
:host {
|
|
137
170
|
display: block;
|
|
138
|
-
overflow: auto;
|
|
139
171
|
}
|
|
140
172
|
`];
|
|
141
173
|
}
|
|
142
|
-
set
|
|
174
|
+
set value(e) {
|
|
143
175
|
this.controller.currentStep !== e && this.controller.setStep(e);
|
|
144
176
|
}
|
|
145
|
-
get
|
|
177
|
+
get value() {
|
|
146
178
|
return this.controller.currentStep;
|
|
147
179
|
}
|
|
180
|
+
set lockBack(e) {
|
|
181
|
+
this.controller.lockBack = e;
|
|
182
|
+
}
|
|
183
|
+
get lockBack() {
|
|
184
|
+
return this.controller.lockBack;
|
|
185
|
+
}
|
|
148
186
|
connectedCallback() {
|
|
149
187
|
super.connectedCallback(), this.controller.currentStep$.pipe(r(), a((e) => {
|
|
150
188
|
this.requestUpdate(), this.dispatchScopedEvent("change", { value: e }, { bubbles: !1 });
|
|
151
189
|
}), i(this.disconnecting)).subscribe();
|
|
152
190
|
}
|
|
153
191
|
render() {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
2: "0.5rem",
|
|
158
|
-
3: "0.75rem",
|
|
159
|
-
4: "1rem",
|
|
160
|
-
5: "1.25rem",
|
|
161
|
-
6: "1.5rem",
|
|
162
|
-
8: "2rem",
|
|
163
|
-
10: "2.5rem",
|
|
164
|
-
12: "3rem",
|
|
165
|
-
16: "4rem",
|
|
166
|
-
20: "5rem",
|
|
167
|
-
24: "6rem"
|
|
168
|
-
}[this.gap] || "1rem";
|
|
169
|
-
return p`
|
|
170
|
-
<nav class="flex h-full w-full" aria-label="Progress" @change=${this.handleChange}>
|
|
171
|
-
<ol class="flex flex-col flex-1 ${e}" role="list" style="--steps-gap: ${t}">
|
|
192
|
+
return m`
|
|
193
|
+
<nav aria-label="Progress" @change=${this.handleChange}>
|
|
194
|
+
<ol role="list" style="display:contents">
|
|
172
195
|
<slot></slot>
|
|
173
196
|
</ol>
|
|
174
197
|
</nav>
|
|
175
198
|
`;
|
|
176
199
|
}
|
|
177
200
|
};
|
|
178
|
-
t([c({ context:
|
|
201
|
+
t([c({ context: _ })], y.prototype, "stepsController", void 0), t([u({
|
|
179
202
|
type: Number,
|
|
180
203
|
reflect: !0
|
|
181
|
-
})],
|
|
182
|
-
type:
|
|
204
|
+
})], y.prototype, "value", null), t([u({
|
|
205
|
+
type: Boolean,
|
|
183
206
|
reflect: !0
|
|
184
|
-
})],
|
|
185
|
-
export {
|
|
207
|
+
})], y.prototype, "lockBack", null), y = t([l("schmancy-steps")], y);
|
|
208
|
+
export { v as SchmancyStep, y as SchmancySteps, g as StepsController, _ as stepsContext };
|
package/dist/steps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","names":[],"sources":["../src/steps/steps.context.ts","../src/steps/schmancy-step.ts","../src/steps/schmancy-steps-container.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { BehaviorSubject } from 'rxjs'\n\nexport class StepsController {\n\tprivate _currentStep = new BehaviorSubject(1)\n\n\tget currentStep$() {\n\t\treturn this._currentStep.asObservable()\n\t}\n\n\tget currentStep() {\n\t\treturn this._currentStep.value\n\t}\n\n\tsetStep(step: number) {\n\t\tthis._currentStep.next(step)\n\t}\n}\n\n/**\n * The actual context object. We provide/consume this in the container and steps.\n */\nexport const stepsContext = createContext<StepsController>(Symbol('SchmancyStepsContext'))\n","import { consume } from '@lit/context'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { Subscription } from 'rxjs'\nimport { stepsContext, StepsController } from './steps.context'\nimport { SchmancyElement } from '@mixins/index'\n\n@customElement('schmancy-step')\nexport class SchmancyStep extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: grid;\n\t\t/* Base display is just grid, flex properties will be applied dynamically */\n\t\ttransition: all 0.2s ease-in-out;\n\t}\n`]\n\n\t/**\n\t * The step's position (1-based). This is used to compare against\n\t * the container's current step to decide if it's \"complete\",\n\t * \"current\", or \"upcoming\".\n\t */\n\t@property({ type: Number }) position = 1\n\n\t@property({ type: String }) title = ''\n\t@property({ type: String }) description = ''\n\n\t// NEW: Allow a step to be explicitly marked as complete.\n\t@property({ type: Boolean, reflect: true }) completed = false\n\n\t/**\n\t * NEW: Lock API to disable users from going back.\n\t * When set to true, clicking on a previous (completed) step is ignored.\n\t */\n\t@property({ type: Boolean }) lockBack = false\n\n\t/**\n\t * Consume the shared StepsController from context.\n\t */\n\t@consume({ context: stepsContext })\n\tprivate steps!: StepsController\n\n\t/**\n\t * Local reactive copy of the container's current step number.\n\t */\n\t@state()\n\tprivate currentStep = 1\n\n\t/**\n\t * Keep a reference to our subscription so we can unsubscribe cleanly.\n\t */\n\tprivate subscription?: Subscription\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t}\n\n\tfirstUpdated() {\n\t\t// Subscribe to updates from the container's StepsController.\n\t\t// Context is guaranteed to be available after first render\n\t\tthis.subscription = this.steps.currentStep$.subscribe(step => {\n\t\t\tthis.currentStep = step\n\t\t\t// When the current step changes, update the flex properties\n\t\t\tthis.updateFlexProperties()\n\t\t})\n\t\t// Initial update of flex properties\n\t\tthis.updateFlexProperties()\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tthis.subscription?.unsubscribe()\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Update the host element's flex properties based on active state\n\t */\n\tprivate updateFlexProperties() {\n\t\tconst isActive = this.position === this.currentStep\n\n\t\tif (isActive) {\n\t\t\t// Apply flex-grow when active\n\t\t\tthis.style.flex = '1 1 auto'\n\t\t} else {\n\t\t\t// Make it shrink when not active\n\t\t\tthis.style.flex = '0 0 auto'\n\t\t}\n\t}\n\n\t/**\n\t * Compute visual status for styling purposes. Note that if a step is explicitly\n\t * marked as completed, it always appears as complete even if it's active.\n\t */\n\tget status(): 'complete' | 'current' | 'upcoming' {\n\t\tif (this.completed || this.position < this.currentStep) return 'complete'\n\t\tif (this.position === this.currentStep) return 'current'\n\t\treturn 'upcoming'\n\t}\n\n\t/**\n\t * Click handler to allow navigation between completed (or active) steps.\n\t * With lockBack enabled, clicking on a previous step is ignored.\n\t */\n\tprivate _onStepClick(_e: Event) {\n\t\t// If lockBack is enabled and the user attempts to go back, do nothing.\n\t\tif (this.lockBack && this.position < this.currentStep) {\n\t\t\treturn\n\t\t}\n\t\tif (this.status !== 'upcoming') {\n\t\t\tthis.steps.setStep(this.position)\n\t\t}\n\t}\n\n\trender() {\n\t\t// Determine if the step is currently active.\n\t\tconst isActive = this.position === this.currentStep\n\n\t\t// Use computed status for visual styling.\n\t\tconst isComplete = this.status === 'complete'\n\t\tconst isUpcoming = this.status === 'upcoming'\n\n\t\t// Enhanced styling classes with better visual hierarchy\n\t\tconst connectorClasses = {\n\t\t\t'bg-tertiary-default': isComplete,\n\t\t\t'bg-outlineVariant': !isComplete,\n\t\t}\n\n\t\tconst iconContainerClasses = {\n\t\t\t'relative border-solid z-10 flex size-8 items-center justify-center rounded-full transition-all duration-200': true,\n\t\t\t'bg-tertiary-default text-tertiary-on shadow-md group-hover:shadow-lg': isComplete,\n\t\t\t'border-2 border-primary-default bg-primary-container text-primary-onContainer shadow-sm': !isComplete && isActive,\n\t\t\t'border-2 border-outline bg-surface-default text-surface-onVariant group-hover:border-primary-default group-hover:bg-primary-container': isUpcoming,\n\t\t}\n\n\t\tconst textClasses = {\n\t\t\t'text-primary-default font-medium': isActive,\n\t\t\t'text-tertiary-default': isComplete,\n\t\t\t'text-surface-onVariant': isUpcoming,\n\t\t}\n\n\t\t// If the step is clickable (active or complete), add a pointer cursor.\n\t\tconst clickableClass = isActive || isComplete ? 'cursor-pointer' : ''\n\n\t\treturn html`\n\t\t\t<li class=\"relative\">\n\t\t\t\t<!-- Connector line - responsive positioning -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(connectorClasses)}\"\n\t\t\t\t\tstyle=\"height: calc(100% + var(--steps-gap, 0px))\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Step Button/Label - adjusted padding for mobile -->\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t@click=${this._onStepClick}\n\t\t\t\t\tclass=\"relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${clickableClass} ${isActive ? 'bg-primary-container/20 -mx-1 sm:-mx-2 px-1 sm:px-2 py-2 sm:py-3 rounded-lg' : 'py-1 sm:py-2'}\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"flex items-center h-10 sm:h-12\">\n\t\t\t\t\t\t<span class=${this.classMap(iconContainerClasses)}>\n\t\t\t\t\t\t\t${isComplete\n\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t<svg class=\"size-5 transition-transform duration-200 group-hover:scale-110\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"size-3 rounded-full transition-all duration-200 ${isActive\n\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-primary-onContainer'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'bg-transparent group-hover:bg-primary-default group-hover:scale-125'}\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span class=\"flex flex-col items-start justify-center min-w-0 ml-3 sm:ml-6\">\n\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\">\n\t\t\t\t\t\t\t<span class=\"transition-colors duration-200 ${this.classMap(textClasses)}\">${this.title}</span>\n\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\tthis.description,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"mt-0.5 sm:mt-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"text-surface-onVariant transition-colors duration-200 ${isActive ? 'text-primary-onContainer' : ''}\">${this.description}</span>\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- Render step content if the step is active - responsive spacing -->\n\t\t\t\t${when(\n\t\t\t\t\tisActive,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div class=\"ml-6 sm:ml-10 mt-3 sm:mt-4 pb-6 sm:pb-8 transition-all duration-300 ease-out\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</li>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-step': SchmancyStep\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { distinctUntilChanged, takeUntil, tap } from 'rxjs/operators'\nimport { StepsController, stepsContext } from './steps.context'\n\n/**\n * Custom event emitted when the current step changes.\n * The component stops propagation of bubbled 'change' events from child inputs\n * to prevent collision with the step change event.\n */\nexport type SchmancyStepsChangeEvent = CustomEvent<{ value: number }>\n\n@customElement('schmancy-steps-container')\nexport class SchmancyStepsContainer extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\toverflow: auto;\n\t}\n`]\n\n\tprivate controller = new StepsController()\n\n\t@provide({ context: stepsContext })\n\tstepsController = this.controller\n\n\t@property({ type: Number, reflect: true })\n\tset currentStep(value: number) {\n\t\tconst oldValue = this.controller.currentStep\n\t\tif (oldValue !== value) {\n\t\t\tthis.controller.setStep(value)\n\t\t}\n\t}\n\n\tget currentStep(): number {\n\t\treturn this.controller.currentStep\n\t}\n\n\t/**\n\t * Gap between steps. Maps to Tailwind gap classes.\n\t * @default 4\n\t */\n\t@property({ type: Number, reflect: true })\n\tgap: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24 = 4\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// React to controller changes (from property OR step clicks)\n\t\tthis.controller.currentStep$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(step => {\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t\t// Use dispatchScopedEvent with bubbles: false to prevent collision\n\t\t\t\t\t// with 'change' events bubbling up from inputs inside steps\n\t\t\t\t\tthis.dispatchScopedEvent('change', { value: step }, { bubbles: false })\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Handle change events - stop propagation of bubbled events from children.\n\t * This prevents form inputs inside steps from triggering the parent's @change handler.\n\t */\n\tprivate handleChange = (e: Event) => {\n\t\t// Only stop propagation if the event is NOT from this component\n\t\t// (i.e., it's bubbling up from a child element like an input)\n\t\tif (e.target !== this) {\n\t\t\te.stopPropagation()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst gapClass = `gap-${this.gap}`\n\t\tconst gapRem =\n\t\t\t{\n\t\t\t\t0: '0',\n\t\t\t\t1: '0.25rem',\n\t\t\t\t2: '0.5rem',\n\t\t\t\t3: '0.75rem',\n\t\t\t\t4: '1rem',\n\t\t\t\t5: '1.25rem',\n\t\t\t\t6: '1.5rem',\n\t\t\t\t8: '2rem',\n\t\t\t\t10: '2.5rem',\n\t\t\t\t12: '3rem',\n\t\t\t\t16: '4rem',\n\t\t\t\t20: '5rem',\n\t\t\t\t24: '6rem',\n\t\t\t}[this.gap] || '1rem'\n\n\t\treturn html`\n\t\t\t<nav class=\"flex h-full w-full\" aria-label=\"Progress\" @change=${this.handleChange}>\n\t\t\t\t<ol class=\"flex flex-col flex-1 ${gapClass}\" role=\"list\" style=\"--steps-gap: ${gapRem}\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ol>\n\t\t\t</nav>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-steps-container': SchmancyStepsContainer\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"steps.js","names":[],"sources":["../src/steps/steps.context.ts","../src/steps/schmancy-step.ts","../src/steps/schmancy-steps.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { BehaviorSubject } from 'rxjs'\n\nexport class StepsController {\n\tprivate stepSubject = new BehaviorSubject(1)\n\tlockBack = false\n\n\tget currentStep$() {\n\t\treturn this.stepSubject.asObservable()\n\t}\n\n\tget currentStep() {\n\t\treturn this.stepSubject.value\n\t}\n\n\tsetStep(step: number) {\n\t\tthis.stepSubject.next(step)\n\t}\n}\n\n/**\n * The actual context object. We provide/consume this in the container and steps.\n */\nexport const stepsContext = createContext<StepsController>(Symbol('SchmancyStepsContext'))\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAssignedNodes, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { takeUntil } from 'rxjs/operators'\nimport { StepsController, stepsContext } from './steps.context'\n\n@customElement('schmancy-step')\nexport class SchmancyStep extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\ttransition: all 0.2s ease-in-out;\n\t}\n`]\n\n\t/**\n\t * The step's position (1-based). This is used to compare against\n\t * the container's current step to decide if it's \"complete\",\n\t * \"current\", or \"upcoming\".\n\t */\n\t@property({ type: Number }) position = 1\n\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) description = ''\n\n\t@property({ type: Boolean, reflect: true }) completed = false\n\n\t/**\n\t * Consume the shared StepsController from context.\n\t */\n\t@consume({ context: stepsContext })\n\tprivate steps!: StepsController\n\n\t/**\n\t * Local reactive copy of the container's current step number.\n\t */\n\t@state()\n\tprivate currentStep = 1\n\n\t@state()\n\tprivate hasContent = false\n\n\t@queryAssignedNodes({ flatten: true })\n\tprivate assignedNodes!: Node[]\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.steps.currentStep$\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(step => {\n\t\t\t\tthis.currentStep = step\n\t\t\t\tthis.updateFlexProperties()\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tthis.updateFlexProperties()\n\t}\n\n\tprivate onSlotChange() {\n\t\tthis.hasContent = this.assignedNodes.some(\n\t\t\tn => n.nodeType === Node.ELEMENT_NODE || (n.nodeType === Node.TEXT_NODE && n.textContent?.trim() !== ''),\n\t\t)\n\t\tthis.updateFlexProperties()\n\t}\n\n\tprivate updateFlexProperties() {\n\t\tconst isActive = this.position === this.currentStep\n\t\tthis.style.flex = isActive && this.hasContent ? '1 1 auto' : '0 0 auto'\n\t}\n\n\tget status(): 'complete' | 'current' | 'upcoming' {\n\t\tif (this.completed || this.position < this.currentStep) return 'complete'\n\t\tif (this.position === this.currentStep) return 'current'\n\t\treturn 'upcoming'\n\t}\n\n\tprivate onStepClick() {\n\t\tif (this.steps.lockBack && this.position < this.currentStep) return\n\t\tif (this.status !== 'upcoming') {\n\t\t\tthis.steps.setStep(this.position)\n\t\t}\n\t}\n\n\tprivate onStepKeydown(e: KeyboardEvent) {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.onStepClick()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst isActive = this.position === this.currentStep\n\t\tconst isComplete = this.status === 'complete'\n\t\tconst isUpcoming = this.status === 'upcoming'\n\t\tconst navigable = !isUpcoming && !(this.steps.lockBack && this.position < this.currentStep)\n\n\t\tif (this.hasContent) {\n\t\t\treturn this.renderContentRow(isActive, isComplete, isUpcoming, navigable)\n\t\t}\n\t\treturn this.renderRailRow(isActive, isComplete, isUpcoming, navigable)\n\t}\n\n\tprivate renderContentRow(isActive: boolean, isComplete: boolean, isUpcoming: boolean, navigable: boolean) {\n\t\tconst connectorClasses = {\n\t\t\t'bg-tertiary-default': isComplete,\n\t\t\t'bg-outlineVariant': !isComplete,\n\t\t}\n\n\t\tconst iconContainerClasses = {\n\t\t\t'relative border-solid z-10 flex size-8 items-center justify-center rounded-full transition-all duration-200': true,\n\t\t\t'bg-tertiary-default text-tertiary-on shadow-md group-hover:shadow-lg': isComplete,\n\t\t\t'border-2 border-primary-default bg-primary-container text-primary-onContainer shadow-sm': !isComplete && isActive,\n\t\t\t'border-2 border-outline bg-surface-default text-surface-onVariant group-hover:border-primary-default group-hover:bg-primary-container': isUpcoming,\n\t\t}\n\n\t\tconst textClasses = {\n\t\t\t'text-primary-default font-medium': isActive,\n\t\t\t'text-tertiary-default': isComplete,\n\t\t\t'text-surface-onVariant': isUpcoming,\n\t\t}\n\n\t\tconst clickableClass = navigable ? 'cursor-pointer' : ''\n\n\t\treturn html`\n\t\t\t<li class=\"relative\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute top-8 left-3 sm:left-4 -ml-px w-0.5 transition-colors duration-200 ${this.classMap(connectorClasses)}\"\n\t\t\t\t\tstyle=\"height: calc(100% + var(--steps-gap, 0px))\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t@click=${this.onStepClick}\n\t\t\t\t\tclass=\"relative flex items-center group transition-all duration-200 hover:scale-[1.02] ${clickableClass} ${isActive ? 'bg-primary-container/20 -mx-1 sm:-mx-2 px-1 sm:px-2 py-2 sm:py-3 rounded-lg' : 'py-1 sm:py-2'}\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"flex items-center h-10 sm:h-12\">\n\t\t\t\t\t\t<span class=${this.classMap(iconContainerClasses)}>\n\t\t\t\t\t\t\t${isComplete\n\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t<svg class=\"size-5 transition-transform duration-200 group-hover:scale-110\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"size-3 rounded-full transition-all duration-200 ${isActive\n\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-primary-onContainer'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'bg-transparent group-hover:bg-primary-default group-hover:scale-125'}\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span class=\"flex flex-col items-start justify-center min-w-0 ml-3 sm:ml-6\">\n\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\">\n\t\t\t\t\t\t\t<span class=\"transition-colors duration-200 ${this.classMap(textClasses)}\">${this.label}</span>\n\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\tthis.description,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"mt-0.5 sm:mt-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"text-surface-onVariant transition-colors duration-200 ${isActive ? 'text-primary-onContainer' : ''}\">${this.description}</span>\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t\t${when(\n\t\t\t\t\tisActive,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div class=\"ml-6 sm:ml-10 mt-3 sm:mt-4 pb-6 sm:pb-8 transition-all duration-300 ease-out\">\n\t\t\t\t\t\t\t<slot @slotchange=${this.onSlotChange}></slot>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t\t${when(!isActive, () => html`<slot @slotchange=${this.onSlotChange} style=\"display:none\"></slot>`)}\n\t\t\t</li>\n\t\t`\n\t}\n\n\tprivate renderRailRow(isActive: boolean, isComplete: boolean, _isUpcoming: boolean, navigable: boolean) {\n\t\tconst isLast = !this.nextElementSibling?.matches('schmancy-step')\n\t\tconst labelClass = isActive\n\t\t\t? 'text-primary-default'\n\t\t\t: isComplete\n\t\t\t\t? 'text-surface-on'\n\t\t\t\t: 'text-surface-on-variant'\n\n\t\tconst dotClass = [\n\t\t\t'relative z-10 w-3 h-3 rounded-full shrink-0 transition-colors duration-300',\n\t\t\tisComplete || isActive ? 'bg-primary-default' : 'bg-outline',\n\t\t\tisActive ? 'ring-2 ring-offset-2 ring-offset-surface-containerLow ring-primary-default' : '',\n\t\t].join(' ')\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"relative flex items-center gap-4 rounded-lg -mx-2 px-2 py-3 transition-colors duration-200 ${\n\t\t\t\t\tnavigable\n\t\t\t\t\t\t? 'cursor-pointer hover:bg-primary-default/8 focus-visible:ring-2 focus-visible:ring-primary-default'\n\t\t\t\t\t\t: ''\n\t\t\t\t}\"\n\t\t\t\trole=${navigable ? 'button' : 'presentation'}\n\t\t\t\ttabindex=${navigable ? '0' : '-1'}\n\t\t\t\taria-current=${isActive ? 'step' : 'false'}\n\t\t\t\taria-label=${navigable ? `Go back to ${this.label}` : this.label}\n\t\t\t\t@click=${this.onStepClick}\n\t\t\t\t@keydown=${this.onStepKeydown}\n\t\t\t>\n\t\t\t\t${when(\n\t\t\t\t\t!isLast,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute left-3.5 top-1/2 w-px h-full transition-colors duration-300 ${\n\t\t\t\t\t\t\t\tisComplete ? 'bg-primary-default' : 'bg-outline'\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t\t<div class=${dotClass} aria-hidden=\"true\"></div>\n\t\t\t\t<schmancy-typography type=\"label\" token=\"lg\" class=${labelClass}>${this.label}</schmancy-typography>\n\t\t\t</div>\n\t\t\t<slot @slotchange=${this.onSlotChange} style=\"display:none\"></slot>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-step': SchmancyStep\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { distinctUntilChanged, takeUntil, tap } from 'rxjs/operators'\nimport { StepsController, stepsContext } from './steps.context'\n\n/**\n * Custom event emitted when the current step changes.\n * The component stops propagation of bubbled 'change' events from child inputs\n * to prevent collision with the step change event.\n */\nexport type SchmancyStepsChangeEvent = CustomEvent<{ value: number }>\n\n@customElement('schmancy-steps')\nexport class SchmancySteps extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`]\n\n\tprivate controller = new StepsController()\n\n\t@provide({ context: stepsContext })\n\tstepsController = this.controller\n\n\t@property({ type: Number, reflect: true })\n\tset value(v: number) {\n\t\tconst oldValue = this.controller.currentStep\n\t\tif (oldValue !== v) {\n\t\t\tthis.controller.setStep(v)\n\t\t}\n\t}\n\n\tget value(): number {\n\t\treturn this.controller.currentStep\n\t}\n\n\t/**\n\t * Block back-navigation for the whole stepper.\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tset lockBack(v: boolean) {\n\t\tthis.controller.lockBack = v\n\t}\n\tget lockBack(): boolean {\n\t\treturn this.controller.lockBack\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// React to controller changes (from property OR step clicks)\n\t\tthis.controller.currentStep$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(step => {\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t\tthis.dispatchScopedEvent('change', { value: step }, { bubbles: false })\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Handle change events — stop propagation of bubbled events from children.\n\t */\n\tprivate handleChange = (e: Event) => {\n\t\tif (e.target !== this) {\n\t\t\te.stopPropagation()\n\t\t}\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<nav aria-label=\"Progress\" @change=${this.handleChange}>\n\t\t\t\t<ol role=\"list\" style=\"display:contents\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ol>\n\t\t\t</nav>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-steps': SchmancySteps\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as e, u as t } from "./SchmancyElement-
|
|
2
|
-
import { t as n } from "./mixins-
|
|
1
|
+
import { t as e, u as t } from "./SchmancyElement-CDT2q1lA.js";
|
|
2
|
+
import { t as n } from "./mixins-De1zjyhy.js";
|
|
3
3
|
import { createContext as r, provide as i } from "@lit/context";
|
|
4
4
|
import { customElement as a, property as o } from "lit/decorators.js";
|
|
5
5
|
import { css as s, html as c } from "lit";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-
|
|
1
|
+
{"version":3,"file":"surface-B4Wn4SOO.js","names":[],"sources":["../src/surface/surface.ts"],"sourcesContent":["import { createContext, provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SurfaceMixin } from '@mixins/surface.mixin'\nimport { TSurfaceColor } from '@schmancy/types'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n\nexport type { SchmancySurfaceRounded, SchmancySurfaceElevation } from '@mixins/surface.mixin'\n\n/**\n * `<schmancy-surface>` component\n *\n * Styled container that supports rounding, elevation, and background/text color variants.\n * Sizing is the consumer's responsibility — use Tailwind utilities (`class=\"w-full h-full\"`)\n * on the element directly.\n *\n * SurfaceMixin automatically provides surfaceStyles CSS.\n *\n * @element schmancy-surface\n * @slot - Default slot for projecting child content.\n *\n * @example\n * <schmancy-surface class=\"w-full h-full\" rounded=\"all\" elevation=\"3\" type=\"surfaceBright\" scroller>\n * <p>Your scrollable content here</p>\n * </schmancy-surface>\n */\n@customElement('schmancy-surface')\nexport class SchmancySurface extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\tbox-sizing: border-box;\n\t\t\toverflow: visible;\n\t\t}\n\t`];\n\t/**\n\t * Specifies the surface type for styling.\n\t * Provided to descendant components via context.\n\t * @default 'container'\n\t */\n\t@provide({ context: SchmancySurfaceTypeContext })\n\t@property({ reflect: true })\n\toverride type: TSurfaceColor = 'subtle'\n\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-surface': SchmancySurface\n\t}\n}\n"],"mappings":";;;;;AAOA,IAAa,IAA6B,EAA6B,SAAA,GAsBhE,IAAA,cAA8B,EAAa,CAAA,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAelB;CAAA;CAAA;EAAA,KAAA,SAdf,CAAC,CAAG;;;;;;;;CAgBpB,SAAA;EACC,OAAO,CAAI;CACZ;AAAA;AAAA,EAAA,CANC,EAAQ,EAAE,SAAS,EAAA,CAAA,GACnB,EAAS,EAAE,SAAA,CAAS,EAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CAf3B,EAAc,kBAAA,CAAA,GAAkB,CAAA;AAAA,SAAA,KAAA,GAAA,KAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BHfQg3Tj.cjs`),t=require(`./mixins-DxHpyMHA.cjs`);let n=require(`@lit/context`),r=require(`lit/decorators.js`),i=require(`lit`);var a=(0,n.createContext)(`surface`),o=class extends t.t(e.t){constructor(...e){super(...e),this.type=`subtle`}static{this.styles=[i.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
box-sizing: border-box;
|