@mhmo91/schmancy 0.10.20 → 0.10.21
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 +0 -49
- package/dist/agent/{overlay.confirm-body-mYm0zq4k.js → overlay.confirm-body-DXus8d-w.js} +1 -1
- package/dist/agent/{overlay.confirm-body-mYm0zq4k.js.map → overlay.confirm-body-DXus8d-w.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +1291 -1257
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +0 -39
- package/dist/{area-C7MNn-3e.cjs → area-Cbkt0NX4.cjs} +12 -3
- package/dist/area-Cbkt0NX4.cjs.map +1 -0
- package/dist/{area-CRe41aIG.js → area-Ddk7P5wD.js} +14 -5
- package/dist/area-Ddk7P5wD.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CqUl7o0e.cjs → autocomplete-CfBFDSc3.cjs} +1 -1
- package/dist/{autocomplete-CqUl7o0e.cjs.map → autocomplete-CfBFDSc3.cjs.map} +1 -1
- package/dist/{autocomplete-CRDFL4Ul.js → autocomplete-Ds3Q2cwR.js} +2 -2
- package/dist/{autocomplete-CRDFL4Ul.js.map → autocomplete-Ds3Q2cwR.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 +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-XajM8A3M.js → boat-BF5P6p_f.js} +1 -1
- package/dist/{boat-XajM8A3M.js.map → boat-BF5P6p_f.js.map} +1 -1
- package/dist/{boat-BHV5kOlN.cjs → boat-BPN8HLzZ.cjs} +1 -1
- package/dist/{boat-BHV5kOlN.cjs.map → boat-BPN8HLzZ.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 +1 -1
- package/dist/{busy-D8YsqVBf.js → busy-BuACDJy6.js} +1 -1
- package/dist/{busy-D8YsqVBf.js.map → busy-BuACDJy6.js.map} +1 -1
- package/dist/{busy-BlBZ5ZOs.cjs → busy-C7ejPa-Q.cjs} +1 -1
- package/dist/{busy-BlBZ5ZOs.cjs.map → busy-C7ejPa-Q.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-yT_St83D.cjs → card-BIzaLuEg.cjs} +1 -1
- package/dist/{card-yT_St83D.cjs.map → card-BIzaLuEg.cjs.map} +1 -1
- package/dist/{card-C9TljY2Z.js → card-CgQwXO8L.js} +1 -1
- package/dist/{card-C9TljY2Z.js.map → card-CgQwXO8L.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-Dz2lkJs0.cjs → checkbox-BAqE3sTx.cjs} +1 -1
- package/dist/{checkbox-Dz2lkJs0.cjs.map → checkbox-BAqE3sTx.cjs.map} +1 -1
- package/dist/{checkbox-BDgh4rge.js → checkbox-BNdg57Om.js} +1 -1
- package/dist/{checkbox-BDgh4rge.js.map → checkbox-BNdg57Om.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-M7Dr2npv.cjs → chips-DS3y4Lbn.cjs} +1 -1
- package/dist/{chips-M7Dr2npv.cjs.map → chips-DS3y4Lbn.cjs.map} +1 -1
- package/dist/{chips-N7fu0hA4.js → chips-DnqLaOb1.js} +2 -2
- package/dist/{chips-N7fu0hA4.js.map → chips-DnqLaOb1.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 +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-D2vxD814.cjs → date-range-CsJfjbmi.cjs} +1 -1
- package/dist/{date-range-D2vxD814.cjs.map → date-range-CsJfjbmi.cjs.map} +1 -1
- package/dist/{date-range-DFWOMgI3.js → date-range-aPSmSBhk.js} +2 -2
- package/dist/{date-range-DFWOMgI3.js.map → date-range-aPSmSBhk.js.map} +1 -1
- package/dist/{date-range-inline-C5JuZ_Kw.cjs → date-range-inline-CAa0_4EI.cjs} +1 -1
- package/dist/{date-range-inline-C5JuZ_Kw.cjs.map → date-range-inline-CAa0_4EI.cjs.map} +1 -1
- package/dist/{date-range-inline-D3q1OoKk.js → date-range-inline-PeRt1iIF.js} +1 -1
- package/dist/{date-range-inline-D3q1OoKk.js.map → date-range-inline-PeRt1iIF.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 +1 -1
- package/dist/{details-DmDEInaL.cjs → details-BnXbDpt7.cjs} +1 -1
- package/dist/{details-DmDEInaL.cjs.map → details-BnXbDpt7.cjs.map} +1 -1
- package/dist/{details-BrUPmd92.js → details-BpFjVclg.js} +1 -1
- package/dist/{details-BrUPmd92.js.map → details-BpFjVclg.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/directives.cjs +3 -3
- package/dist/directives.cjs.map +1 -1
- package/dist/directives.js +290 -203
- package/dist/directives.js.map +1 -1
- package/dist/{divider-B_Ts_-qz.cjs → divider-B84lt1A3.cjs} +1 -1
- package/dist/{divider-B_Ts_-qz.cjs.map → divider-B84lt1A3.cjs.map} +1 -1
- package/dist/{divider-BLijs8ba.js → divider-D8cBBkdG.js} +1 -1
- package/dist/{divider-BLijs8ba.js.map → divider-D8cBBkdG.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 +1 -1
- package/dist/{expand-C-xSpg7M.js → expand-BJiKggfg.js} +2 -2
- package/dist/{expand-C-xSpg7M.js.map → expand-BJiKggfg.js.map} +1 -1
- package/dist/{expand-DV5sWUB6.cjs → expand-DK-O37-j.cjs} +1 -1
- package/dist/{expand-DV5sWUB6.cjs.map → expand-DK-O37-j.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{float-Y22yVBE2.js → float-B4FDN40h.js} +1 -1
- package/dist/{float-Y22yVBE2.js.map → float-B4FDN40h.js.map} +1 -1
- package/dist/{float-LyKef0LY.cjs → float-RWR6Q1Hh.cjs} +1 -1
- package/dist/{float-LyKef0LY.cjs.map → float-RWR6Q1Hh.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-LFkEQkOX.js → form-Bz5WamuM.js} +8 -8
- package/dist/{form-LFkEQkOX.js.map → form-Bz5WamuM.js.map} +1 -1
- package/dist/{form-C_smXI2-.cjs → form-PioZDvzA.cjs} +1 -1
- package/dist/{form-C_smXI2-.cjs.map → form-PioZDvzA.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +6 -6
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{icons-B3pFrwKC.js → icons-BgUbHwy8.js} +1 -1
- package/dist/{icons-B3pFrwKC.js.map → icons-BgUbHwy8.js.map} +1 -1
- package/dist/{icons-CCNy4Egc.cjs → icons-morK4hHz.cjs} +1 -1
- package/dist/{icons-CCNy4Egc.cjs.map → icons-morK4hHz.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CCcmLZ_K.cjs → iframe-BXe1TPx1.cjs} +1 -1
- package/dist/{iframe-CCcmLZ_K.cjs.map → iframe-BXe1TPx1.cjs.map} +1 -1
- package/dist/{iframe-BbFlCEyP.js → iframe-CByrVlZy.js} +1 -1
- package/dist/{iframe-BbFlCEyP.js.map → iframe-CByrVlZy.js.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +55 -56
- package/dist/{input-sBZ89wz1.cjs → input-BY9OCQWr.cjs} +1 -1
- package/dist/{input-sBZ89wz1.cjs.map → input-BY9OCQWr.cjs.map} +1 -1
- package/dist/{input-Dkneo4uA.js → input-Q0fm34Co.js} +1 -1
- package/dist/{input-Dkneo4uA.js.map → input-Q0fm34Co.js.map} +1 -1
- package/dist/{input-chip-F5NEkkBU.cjs → input-chip-BwNf3GD0.cjs} +1 -1
- package/dist/{input-chip-F5NEkkBU.cjs.map → input-chip-BwNf3GD0.cjs.map} +1 -1
- package/dist/{input-chip-C1-TYu4v.js → input-chip-CytUirVS.js} +1 -1
- package/dist/{input-chip-C1-TYu4v.js.map → input-chip-CytUirVS.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 +2 -2
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +1 -1
- package/dist/layout.cjs +26 -1
- package/dist/layout.cjs.map +1 -0
- package/dist/layout.js +115 -2
- package/dist/layout.js.map +1 -0
- package/dist/{lightbox-D7hYFspE.js → lightbox-Ckvn5YNF.js} +1 -1
- package/dist/{lightbox-D7hYFspE.js.map → lightbox-Ckvn5YNF.js.map} +1 -1
- package/dist/{lightbox-B4m5lxGs.cjs → lightbox-p2E0oVR0.cjs} +1 -1
- package/dist/{lightbox-B4m5lxGs.cjs.map → lightbox-p2E0oVR0.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-Ou72tSeq.js → list-CsrPVvmm.js} +1 -1
- package/dist/{list-Ou72tSeq.js.map → list-CsrPVvmm.js.map} +1 -1
- package/dist/{list-C2ycz-yr.cjs → list-r57UFHu3.cjs} +1 -1
- package/dist/{list-C2ycz-yr.cjs.map → list-r57UFHu3.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{menu-ComSx-T0.cjs → menu-BOZ2iwed.cjs} +1 -1
- package/dist/{menu-ComSx-T0.cjs.map → menu-BOZ2iwed.cjs.map} +1 -1
- package/dist/{menu-YHbpRa7x.js → menu-CxE16xur.js} +2 -2
- package/dist/{menu-YHbpRa7x.js.map → menu-CxE16xur.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-DTCHPEd4.cjs +254 -0
- package/dist/{mixins-BwGJwK7X.cjs.map → mixins-DTCHPEd4.cjs.map} +1 -1
- package/dist/mixins-pU53qf6R.js +636 -0
- package/dist/{mixins-B9kY_60p.js.map → mixins-pU53qf6R.js.map} +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +1 -1
- 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 +1 -1
- package/dist/{notification-DZhL0ZEg.cjs → notification-58tkVys8.cjs} +1 -1
- package/dist/{notification-DZhL0ZEg.cjs.map → notification-58tkVys8.cjs.map} +1 -1
- package/dist/{notification-O4Q5pyio.js → notification-CgTBiAdf.js} +2 -2
- package/dist/{notification-O4Q5pyio.js.map → notification-CgTBiAdf.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-C2VKw8Yt.cjs → option-61YE3gub.cjs} +1 -1
- package/dist/{option-C2VKw8Yt.cjs.map → option-61YE3gub.cjs.map} +1 -1
- package/dist/{option-BCks0a4i.js → option-Bicf6xpI.js} +1 -1
- package/dist/{option-BCks0a4i.js.map → option-Bicf6xpI.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-CG1gc1Jw.cjs → overlay-B3gKPWhu.cjs} +2 -2
- package/dist/{overlay-CG1gc1Jw.cjs.map → overlay-B3gKPWhu.cjs.map} +1 -1
- package/dist/{overlay-C0YSnxoV.js → overlay-D3mdWOLS.js} +7 -4
- package/dist/{overlay-C0YSnxoV.js.map → overlay-D3mdWOLS.js.map} +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-BmOnrKbF.js → overlay.confirm-body-Czi6cMZq.js} +1 -1
- package/dist/{overlay.confirm-body-BmOnrKbF.js.map → overlay.confirm-body-Czi6cMZq.js.map} +1 -1
- package/dist/{overlay.confirm-body-B-Kmn7LF.cjs → overlay.confirm-body-yr0HzS_d.cjs} +1 -1
- package/dist/{overlay.confirm-body-B-Kmn7LF.cjs.map → overlay.confirm-body-yr0HzS_d.cjs.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-CRoq9Gu-.js → overlay.service-BfZf3xoD.js} +2 -2
- package/dist/{overlay.service-CRoq9Gu-.js.map → overlay.service-BfZf3xoD.js.map} +1 -1
- package/dist/{overlay.service-BPKV2a8w.cjs → overlay.service-DNs3AWqp.cjs} +1 -1
- package/dist/{overlay.service-BPKV2a8w.cjs.map → overlay.service-DNs3AWqp.cjs.map} +1 -1
- package/dist/{progress-B9RWAFv5.cjs → progress-D8XZJVl5.cjs} +1 -1
- package/dist/{progress-B9RWAFv5.cjs.map → progress-D8XZJVl5.cjs.map} +1 -1
- package/dist/{progress-CEEl7vdd.js → progress-Zqx-S9NZ.js} +1 -1
- package/dist/{progress-CEEl7vdd.js.map → progress-Zqx-S9NZ.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-VERF_8rC.js → radio-group-D9MU1Mxz.js} +1 -1
- package/dist/{radio-group-VERF_8rC.js.map → radio-group-D9MU1Mxz.js.map} +1 -1
- package/dist/{radio-group-C2y6H5YY.cjs → radio-group-bl8K4Gls.cjs} +1 -1
- package/dist/{radio-group-C2y6H5YY.cjs.map → radio-group-bl8K4Gls.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{rxjs-utils-Cs6XGwF6.js.map → rxjs-utils-BK8VMe3K.js.map} +1 -1
- package/dist/{rxjs-utils-Dsj75cJy.cjs.map → rxjs-utils-DhOKenkS.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{select-ClJj_2AP.js → select-CMwkl-D6.js} +1 -1
- package/dist/{select-ClJj_2AP.js.map → select-CMwkl-D6.js.map} +1 -1
- package/dist/{select-CngphfDB.cjs → select-COIfVtZl.cjs} +1 -1
- package/dist/{select-CngphfDB.cjs.map → select-COIfVtZl.cjs.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 +1 -1
- package/dist/skills/SKILL.md +6 -2
- package/dist/skills/area.md +13 -0
- package/dist/skills/overlay.md +13 -0
- package/dist/skills/page.md +71 -29
- package/dist/skills/schmancy/SKILL.md +6 -2
- package/dist/skills/schmancy/area.md +13 -0
- package/dist/skills/schmancy/overlay.md +13 -0
- package/dist/skills/schmancy/page.md +71 -29
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-CntIFk2h.cjs → splash-screen-2hxq8Sft.cjs} +1 -1
- package/dist/{splash-screen-CntIFk2h.cjs.map → splash-screen-2hxq8Sft.cjs.map} +1 -1
- package/dist/{splash-screen-BQsBy3O1.js → splash-screen-xrMNpzkm.js} +1 -1
- package/dist/{splash-screen-BQsBy3O1.js.map → splash-screen-xrMNpzkm.js.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-BAXhEv8f.js → src-CHd-U-w4.js} +34 -35
- package/dist/{src-BAXhEv8f.js.map → src-CHd-U-w4.js.map} +1 -1
- package/dist/{src-ChFa-FDD.cjs → src-ggWtvpDr.cjs} +1 -1
- package/dist/{src-ChFa-FDD.cjs.map → src-ggWtvpDr.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-CHUJSY1o.js → surface-3nnvlxeE.js} +1 -1
- package/dist/{surface-CHUJSY1o.js.map → surface-3nnvlxeE.js.map} +1 -1
- package/dist/{surface-CXmQuXun.cjs → surface-BkQ44Wuo.cjs} +1 -1
- package/dist/{surface-CXmQuXun.cjs.map → surface-BkQ44Wuo.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 +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-DPVX21WM.js → tabs-CnLIe8nE.js} +1 -1
- package/dist/{tabs-DPVX21WM.js.map → tabs-CnLIe8nE.js.map} +1 -1
- package/dist/{tabs-Bku0sC0p.cjs → tabs-Dql0rcqZ.cjs} +1 -1
- package/dist/{tabs-Bku0sC0p.cjs.map → tabs-Dql0rcqZ.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-D6z1UZzs.js → textarea-BAogS_Ff.js} +1 -1
- package/dist/{textarea-D6z1UZzs.js.map → textarea-BAogS_Ff.js.map} +1 -1
- package/dist/{textarea-CqJNviYi.cjs → textarea-CGD6lAEe.cjs} +1 -1
- package/dist/{textarea-CqJNviYi.cjs.map → textarea-CGD6lAEe.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-DbHfINBV.js → theme-CUK0HrS3.js} +1 -1
- package/dist/{theme-DbHfINBV.js.map → theme-CUK0HrS3.js.map} +1 -1
- package/dist/{theme-BpKVBJCr.cjs → theme-DKrrQ-ic.cjs} +1 -1
- package/dist/{theme-BpKVBJCr.cjs.map → theme-DKrrQ-ic.cjs.map} +1 -1
- package/dist/{theme-button-BeU8Nbs2.js → theme-button-Bb8qW2IH.js} +1 -1
- package/dist/{theme-button-BeU8Nbs2.js.map → theme-button-Bb8qW2IH.js.map} +1 -1
- package/dist/{theme-button-Cof9I85G.cjs → theme-button-CmTwFm3l.cjs} +1 -1
- package/dist/{theme-button-Cof9I85G.cjs.map → theme-button-CmTwFm3l.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{utils-DXE5fBBd.js.map → utils-Cxg0Kfy5.js.map} +1 -1
- package/dist/{utils-C-Q8ePtG.cjs.map → utils-aCJYAGUr.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-Cql1aIX2.cjs → window-BbWlaPZv.cjs} +1 -1
- package/dist/{window-Cql1aIX2.cjs.map → window-BbWlaPZv.cjs.map} +1 -1
- package/dist/{window-DmMNsos0.js → window-DuDAQa6y.js} +1 -1
- package/dist/{window-DmMNsos0.js.map → window-DuDAQa6y.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 +6 -2
- package/skills/schmancy/area.md +13 -0
- package/skills/schmancy/overlay.md +13 -0
- package/skills/schmancy/page.md +71 -29
- package/src/area/area.component.ts +13 -1
- package/src/directives/fill.ts +137 -0
- package/src/directives/index.ts +2 -0
- package/src/directives/overflow-within.ts +186 -0
- package/src/index.ts +0 -1
- package/src/overlay/index.ts +1 -0
- package/src/overlay/overlay.component.ts +9 -0
- package/src/overlay/overlay.types.ts +10 -3
- package/types/src/directives/fill.d.ts +46 -0
- package/types/src/directives/index.d.ts +2 -0
- package/types/src/directives/overflow-within.d.ts +77 -0
- package/types/src/index.d.ts +0 -1
- package/types/src/overlay/index.d.ts +1 -1
- package/types/src/overlay/overlay.types.d.ts +9 -3
- package/dist/area-C7MNn-3e.cjs.map +0 -1
- package/dist/area-CRe41aIG.js.map +0 -1
- package/dist/mixins-B9kY_60p.js +0 -636
- package/dist/mixins-BwGJwK7X.cjs +0 -254
- package/dist/page.cjs +0 -20
- package/dist/page.cjs.map +0 -1
- package/dist/page.js +0 -74
- package/dist/page.js.map +0 -1
- package/dist/scroll-Bj7FsS08.js +0 -115
- package/dist/scroll-Bj7FsS08.js.map +0 -1
- package/dist/scroll-Djz3pJfX.cjs +0 -26
- package/dist/scroll-Djz3pJfX.cjs.map +0 -1
- package/src/page/index.ts +0 -1
- package/src/page/page.ts +0 -137
- package/types/src/page/index.d.ts +0 -1
- package/types/src/page/page.d.ts +0 -37
- /package/dist/{rxjs-utils-Cs6XGwF6.js → rxjs-utils-BK8VMe3K.js} +0 -0
- /package/dist/{rxjs-utils-Dsj75cJy.cjs → rxjs-utils-DhOKenkS.cjs} +0 -0
- /package/dist/{utils-DXE5fBBd.js → utils-Cxg0Kfy5.js} +0 -0
- /package/dist/{utils-C-Q8ePtG.cjs → utils-aCJYAGUr.cjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-
|
|
1
|
+
{"version":3,"file":"surface-3nnvlxeE.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\n// Re-export types for backwards compatibility\nexport type { SchmancySurfaceFill, SchmancySurfaceRounded, SchmancySurfaceElevation } from '@mixins/surface.mixin'\n\n/**\n * `<schmancy-surface>` component\n *\n * This component renders a styled container that adapts its dimensions based on the `fill` property.\n * It supports various rounding options, elevation levels, and applies background and text color classes\n * based on the specified surface variant. Additionally, when the `scroller` property is true, the component\n * enables internal scrolling by applying overflow and scroll-behavior styles.\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 fill=\"all\" 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,UAAA,EAwBhE,IAAA,cAA8B,EAAa,EAAA,CAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,OAelB;;CAAA;EAAA,KAAA,SAdf,CAAC,CAAG;;;;;;;;CAgBpB,SAAA;EACC,OAAO,CAAI;;;AAAA,EAAA,CALX,EAAQ,EAAE,SAAS,GAAA,CAAA,EACnB,EAAS,EAAE,SAAA,CAAS,GAAA,CAAA,CAAA,EAAO,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAf5B,EAAc,mBAAA,CAAA,EAAmB,EAAA;AAAA,SAAA,KAAA,GAAA,KAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DTCHPEd4.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`@lit/context`),r=require(`lit/decorators.js`),i=require(`lit`);var a=(0,n.createContext)(`surface`),o=class extends e.t(e.c){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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-
|
|
1
|
+
{"version":3,"file":"surface-BkQ44Wuo.cjs","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\n// Re-export types for backwards compatibility\nexport type { SchmancySurfaceFill, SchmancySurfaceRounded, SchmancySurfaceElevation } from '@mixins/surface.mixin'\n\n/**\n * `<schmancy-surface>` component\n *\n * This component renders a styled container that adapts its dimensions based on the `fill` property.\n * It supports various rounding options, elevation levels, and applies background and text color classes\n * based on the specified surface variant. Additionally, when the `scroller` property is true, the component\n * enables internal scrolling by applying overflow and scroll-behavior styles.\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 fill=\"all\" 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":"+LAOA,IAAa,GAAA,EAAA,EAAA,eAA0D,UAAA,CAwBhE,EAAA,cAA8B,EAAA,EAAa,EAAA,EAAA,AAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,KAelB,SAAA,OAAA,KAAA,OAdf,CAAC,EAAA,GAAG;;;;;;IAgBpB,QAAA,CACC,MAAO,GAAA,IAAI,kBAAA,EAAA,EAAA,EAAA,EAAA,EAAA,SALH,CAAE,QAAS,EAAA,CAAA,EAA6B,EAAA,EAAA,UACvC,CAAE,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,OAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAfd,mBAAA,CAAA,CAAmB,EAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA"}
|
package/dist/surface.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./surface-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./surface-BkQ44Wuo.cjs`);Object.defineProperty(exports,`SchmancySurface`,{enumerable:!0,get:function(){return e.t}}),exports.SchmancySurfaceTypeContext=e.n;
|
package/dist/surface.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./surface-
|
|
1
|
+
import { n as e, t } from "./surface-3nnvlxeE.js";
|
|
2
2
|
export { t as SchmancySurface, e as SchmancySurfaceTypeContext };
|
package/dist/switch.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DTCHPEd4.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.o(r.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: inline-block;
|
|
4
4
|
}
|
package/dist/switch.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as e } from "./mixins-
|
|
1
|
+
import { o as e } from "./mixins-pU53qf6R.js";
|
|
2
2
|
import { a as t } from "./active-host-BP0zy_Y9.js";
|
|
3
3
|
import { customElement as n, property as r } from "lit/decorators.js";
|
|
4
4
|
import { LitElement as i, css as a, html as o, nothing as s } from "lit";
|
package/dist/table.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DTCHPEd4.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);require(`@lit-labs/virtualizer`);var i=class extends e.c{constructor(...e){super(...e),this.columns=[],this.cols=this.columns.map(()=>`1fr`).join(` `)}renderCell(e){if(e.render)return r.html`
|
|
2
2
|
<div class="overflow-hidden text-ellipsis">
|
|
3
3
|
<schmancy-typography align="${e.align||`left`}" maxLines="2" weight="${e.weight||`normal`}">
|
|
4
4
|
${e.render(this.item)}
|
package/dist/table.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as e } from "./mixins-
|
|
1
|
+
import { c as e } from "./mixins-pU53qf6R.js";
|
|
2
2
|
import { a as t } from "./active-host-BP0zy_Y9.js";
|
|
3
3
|
import { filter as n, fromEvent as r, interval as i, map as a, take as o, throttleTime as s } from "rxjs";
|
|
4
4
|
import { consume as c, createContext as l, provide as u } from "@lit/context";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-DPVX21WM.js","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabs-CnLIe8nE.js","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DTCHPEd4.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`rxjs`),r=require(`@lit/context`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/repeat.js`);var s=(0,r.createContext)(`tabs`),c=class extends e.c{updated(e){e.has(`active`)&&this.active&&requestAnimationFrame(()=>{window.dispatchEvent(new Event(`resize`))})}render(){return this.mode!==`tabs`||this.active?a.html`<slot></slot>`:a.html``}};t.a([(0,i.property)({type:String,reflect:!0})],c.prototype,`label`,void 0),t.a([(0,i.property)({type:String,reflect:!0})],c.prototype,`value`,void 0),t.a([(0,i.property)({type:Boolean,reflect:!0})],c.prototype,`active`,void 0),t.a([(0,r.consume)({context:s,subscribe:!0}),(0,i.state)()],c.prototype,`mode`,void 0),c=t.a([(0,i.customElement)(`schmancy-tab`)],c);var l=class extends e.c{constructor(...e){super(...e),this.mode=`tabs`,this.rounded=!0,this.tabs=[]}static{this.styles=[a.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
height: 100%;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-Bku0sC0p.cjs","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabs-Dql0rcqZ.cjs","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
|
package/dist/tabs.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./tabs-
|
|
1
|
+
require(`./tabs-Dql0rcqZ.cjs`);
|
package/dist/tabs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./tabs-
|
|
1
|
+
import "./tabs-CnLIe8nE.js";
|
package/dist/teleport.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-ggWtvpDr.cjs`);exports.HereMorty=e.n,Object.defineProperty(exports,`SchmancyTeleportation`,{enumerable:!0,get:function(){return e.t}}),exports.WhereAreYouRicky=e.r,exports.teleport=e.i;
|
package/dist/teleport.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as e, n as t, r as n, t as r } from "./src-
|
|
1
|
+
import { i as e, n as t, r as n, t as r } from "./src-CHd-U-w4.js";
|
|
2
2
|
export { t as HereMorty, r as SchmancyTeleportation, n as WhereAreYouRicky, e as teleport };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as e } from "./mixins-
|
|
1
|
+
import { o as e } from "./mixins-pU53qf6R.js";
|
|
2
2
|
import { a as t } from "./active-host-BP0zy_Y9.js";
|
|
3
3
|
import { distinctUntilChanged as n, filter as r, fromEvent as i, map as a, takeUntil as o, timer as s } from "rxjs";
|
|
4
4
|
import { customElement as c, property as l, query as u } from "lit/decorators.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-D6z1UZzs.js","names":[],"sources":["../src/form/fields/textarea/textarea.scss?inline","../src/form/fields/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map, takeUntil, timer } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { SchmancyFormField } from '@mixins/index'\n\n/**\n * Textarea component with auto-resize and form integration.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends SchmancyFormField(unsafeCSS(style)) {\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\t// `formAssociated`, `internals`, `name`, `label`, `required`, `disabled`,\n\t// `error`, `validationMessage`, `hint`, `id`, `validateOn`, `touched`,\n\t// `dirty`, `submitted`, `markTouched`, `markSubmitted`, `setCustomValidity`,\n\t// `formResetCallback`, `formDisabledCallback` — all from the mixin.\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control. Narrowed from the mixin's wide union to the\n\t * textarea-specific `string` type.\n\t * @attr {string} value - The value of the control.\n\t */\n\t@property({ type: String, reflect: true }) override value: string = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t// `required`, `disabled`, `readonly`, `error`, `validationMessage`, `hint`\n\t// come from the mixin. Textarea-specific extras only:\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t// Mixin's willUpdate already calls internals.setFormValue() on value-change\n\t// and runs the required-empty / customError validity machinery. Native\n\t// `valueMissing` flag is set here for richer ValidityState introspection.\n\toverride willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate(changed)\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t}\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content (cancel-on-disconnect).\n\t\t\ttimer(0)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => this.adjustHeight())\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint || (this.error && this.validationMessage) ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint || (this.error && this.validationMessage),\n\t\t\t\t() => html`\n\t\t\t\t\t<div\n\t\t\t\t\t\tid=${hintId}\n\t\t\t\t\t\tclass=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\"\n\t\t\t\t\t\trole=${ifDefined(this.error ? 'alert' : undefined)}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.error && this.validationMessage ? this.validationMessage : this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"textarea-BAogS_Ff.js","names":[],"sources":["../src/form/fields/textarea/textarea.scss?inline","../src/form/fields/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map, takeUntil, timer } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { SchmancyFormField } from '@mixins/index'\n\n/**\n * Textarea component with auto-resize and form integration.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends SchmancyFormField(unsafeCSS(style)) {\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\t// `formAssociated`, `internals`, `name`, `label`, `required`, `disabled`,\n\t// `error`, `validationMessage`, `hint`, `id`, `validateOn`, `touched`,\n\t// `dirty`, `submitted`, `markTouched`, `markSubmitted`, `setCustomValidity`,\n\t// `formResetCallback`, `formDisabledCallback` — all from the mixin.\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control. Narrowed from the mixin's wide union to the\n\t * textarea-specific `string` type.\n\t * @attr {string} value - The value of the control.\n\t */\n\t@property({ type: String, reflect: true }) override value: string = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t// `required`, `disabled`, `readonly`, `error`, `validationMessage`, `hint`\n\t// come from the mixin. Textarea-specific extras only:\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t// Mixin's willUpdate already calls internals.setFormValue() on value-change\n\t// and runs the required-empty / customError validity machinery. Native\n\t// `valueMissing` flag is set here for richer ValidityState introspection.\n\toverride willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate(changed)\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t}\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content (cancel-on-disconnect).\n\t\t\ttimer(0)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => this.adjustHeight())\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint || (this.error && this.validationMessage) ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint || (this.error && this.validationMessage),\n\t\t\t\t() => html`\n\t\t\t\t\t<div\n\t\t\t\t\t\tid=${hintId}\n\t\t\t\t\t\tclass=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\"\n\t\t\t\t\t\trole=${ifDefined(this.error ? 'alert' : undefined)}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.error && this.validationMessage ? this.validationMessage : this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DTCHPEd4.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`),o=require(`lit/directives/ref.js`),s=require(`lit/directives/when.js`);var c=class extends e.o((0,i.unsafeCSS)(`:host{width:-webkit-fill-available;display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host([fillHeight]){flex-direction:column;height:100%;display:flex}:host:focus{box-shadow:unset!important}textarea:focus-visible{outline:none!important}textarea{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;text-indent:inherit;text-shadow:inherit;text-overflow:inherit;text-rendering:inherit;text-size-adjust:inherit;text-align-last:inherit;overflow-y:auto}@keyframes onAutoFillStart{}textarea:-webkit-autofill{animation-name:onAutoFillStart}`)){constructor(...e){super(...e),this.textareaRef=(0,o.createRef)(),this._a11yId=`schmancy-textarea-${Math.random().toString(36).slice(2,10)}`,this.placeholder=``,this.value=``,this.cols=20,this.fillHeight=!1,this.autoHeight=!0,this.resize=`vertical`,this.wrap=`soft`,this.spellcheck=!1,this.align=`left`,this.tabIndex=0}static{this.shadowRootOptions={...i.LitElement.shadowRootOptions,delegatesFocus:!0}}willUpdate(e){super.willUpdate(e),(e.has(`required`)||e.has(`value`))&&this.required&&!this.value&&this.internals?.setValidity({valueMissing:!0},`Please fill out this field.`)}firstUpdated(){this.autofocus&&this.focus(),this.autoHeight&&(0,n.timer)(0).pipe((0,n.takeUntil)(this.disconnecting)).subscribe(()=>this.adjustHeight()),(0,n.fromEvent)(this.textareaElement,`input`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`change`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`keyup`).pipe((0,n.filter)(e=>e.key===`Enter`),(0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent(`enter`,{detail:{value:e},bubbles:!0,composed:!0}))})}get form(){return this.internals?.form}reportValidity(){return this.textareaRef.value?.reportValidity()}checkValidity(){return this.textareaRef.value?.checkValidity()}setCustomValidity(e){return this.textareaRef.value?.setCustomValidity(e)}select(){return this.textareaRef.value?.select()}setSelectionRange(e,t,n){this.textareaRef.value?.setSelectionRange(e,t,n)}get selectionStart(){return this.textareaRef.value?.selectionStart??null}get selectionEnd(){return this.textareaRef.value?.selectionEnd??null}get selectionDirection(){return this.textareaRef.value?.selectionDirection??null}setRangeText(e){this.textareaRef.value?.setRangeText(e)}adjustHeight(){let e=this.textareaRef.value;if(e){let t=e.offsetHeight,n=e.scrollHeight;n>t&&(e.style.height=n+`px`)}}validity(){return this.textareaRef.value?.validity}focus(e={preventScroll:!0}){this.textareaRef.value?.focus(e),this.dispatchEvent(new Event(`focus`))}click(){this.textareaRef.value?.click(),this.dispatchEvent(new Event(`click`))}blur(){this.textareaRef.value?.blur(),this.dispatchEvent(new Event(`blur`))}render(){let e={"block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on":!0,"border-outline":!this.error,"border-error-default":this.error,"outline-secondary-default focus:outline-1 focus:border-secondary-default":!0,"disabled:opacity-40 disabled:cursor-not-allowed":!0,"placeholder:text-muted":!0,"ring-0 focus:ring-1 focus:ring-inset":!0,"focus:ring-secondary-default":!this.error,"focus:ring-error-default":this.error,"caret-transparent focus:outline-hidden cursor-pointer select-none":this.readonly,"text-left":this.align===`left`,"text-center":this.align===`center`,"text-right":this.align===`right`,"h-full":this.fillHeight,"resize-none":this.resize===`none`,"resize-y":this.resize===`vertical`,"resize-x":this.resize===`horizontal`,resize:this.resize===`both`,"px-4 py-3":!0},t=this.rows==null?`field-sizing: content;`:``,n={"block mb-1 font-medium text-sm":!0,"opacity-40":this.disabled,"text-primary-default":!this.error,"text-error-default":this.error},r={"w-full min-w-0":!0,"flex flex-col h-full":this.fillHeight},c=`${this._a11yId}-hint`;return i.html`
|
|
2
2
|
<div class="${this.classMap(r)}">
|
|
3
3
|
${(0,s.when)(this.label,()=>i.html`
|
|
4
4
|
<label class="${this.classMap(n)}" for=${this.id}>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-CqJNviYi.cjs","names":[],"sources":["../src/form/fields/textarea/textarea.scss?inline","../src/form/fields/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map, takeUntil, timer } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { SchmancyFormField } from '@mixins/index'\n\n/**\n * Textarea component with auto-resize and form integration.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends SchmancyFormField(unsafeCSS(style)) {\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\t// `formAssociated`, `internals`, `name`, `label`, `required`, `disabled`,\n\t// `error`, `validationMessage`, `hint`, `id`, `validateOn`, `touched`,\n\t// `dirty`, `submitted`, `markTouched`, `markSubmitted`, `setCustomValidity`,\n\t// `formResetCallback`, `formDisabledCallback` — all from the mixin.\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control. Narrowed from the mixin's wide union to the\n\t * textarea-specific `string` type.\n\t * @attr {string} value - The value of the control.\n\t */\n\t@property({ type: String, reflect: true }) override value: string = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t// `required`, `disabled`, `readonly`, `error`, `validationMessage`, `hint`\n\t// come from the mixin. Textarea-specific extras only:\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t// Mixin's willUpdate already calls internals.setFormValue() on value-change\n\t// and runs the required-empty / customError validity machinery. Native\n\t// `valueMissing` flag is set here for richer ValidityState introspection.\n\toverride willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate(changed)\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t}\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content (cancel-on-disconnect).\n\t\t\ttimer(0)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => this.adjustHeight())\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint || (this.error && this.validationMessage) ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint || (this.error && this.validationMessage),\n\t\t\t\t() => html`\n\t\t\t\t\t<div\n\t\t\t\t\t\tid=${hintId}\n\t\t\t\t\t\tclass=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\"\n\t\t\t\t\t\trole=${ifDefined(this.error ? 'alert' : undefined)}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.error && this.validationMessage ? this.validationMessage : this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"textarea-CGD6lAEe.cjs","names":[],"sources":["../src/form/fields/textarea/textarea.scss?inline","../src/form/fields/textarea/textarea.ts"],"sourcesContent":[":host {\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n\twidth: -webkit-fill-available;\n\tdisplay: block;\n}\n\n:host([fillHeight]) {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\ntextarea:focus-visible {\n\toutline: none !important;\n}\n\ntextarea {\n\t/* Inherit typographic styles */\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tcolor: inherit;\n\tletter-spacing: inherit;\n\ttext-transform: inherit;\n\ttext-decoration: inherit;\n\ttext-indent: inherit;\n\ttext-shadow: inherit;\n\ttext-overflow: inherit;\n\ttext-rendering: inherit;\n\ttext-size-adjust: inherit;\n\ttext-align-last: inherit;\n\toverflow-y: auto; /* Ensure content is scrollable if it exceeds the visible area */\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t}\n\tto {\n\t}\n}\n\ntextarea:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n}\n","import { LitElement, html, nothing, unsafeCSS, type PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map, takeUntil, timer } from 'rxjs'\nimport style from './textarea.scss?inline'\nimport { SchmancyFormField } from '@mixins/index'\n\n/**\n * Textarea component with auto-resize and form integration.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} value - Current value of the textarea\n * @prop {string} placeholder - Placeholder text\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} disabled - Whether the field is disabled\n * @prop {boolean} readonly - Whether the field is read-only\n * @prop {number} rows - Number of visible text rows\n * @prop {number} maxlength - Maximum character length\n */\n@customElement('schmancy-textarea')\nexport default class SchmancyTextarea extends SchmancyFormField(unsafeCSS(style)) {\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\t// `formAssociated`, `internals`, `name`, `label`, `required`, `disabled`,\n\t// `error`, `validationMessage`, `hint`, `id`, `validateOn`, `touched`,\n\t// `dirty`, `submitted`, `markTouched`, `markSubmitted`, `setCustomValidity`,\n\t// `formResetCallback`, `formDisabledCallback` — all from the mixin.\n\ttextareaRef = createRef<HTMLTextAreaElement>()\n\n\tprivate readonly _a11yId = `schmancy-textarea-${Math.random().toString(36).slice(2, 10)}`\n\n\t/**\n\t * The placeholder of the control.\n\t * @attr placeholder\n\t * @type {string}\n\t * @default ''\n\t * @public\n\t */\n\t@property() placeholder = ''\n\n\t/**\n\t * The value of the control. Narrowed from the mixin's wide union to the\n\t * textarea-specific `string` type.\n\t * @attr {string} value - The value of the control.\n\t */\n\t@property({ type: String, reflect: true }) override value: string = ''\n\n\t/**\n\t * The minlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic minlength: number | undefined\n\n\t/**\n\t * The maxlength attribute of the control.\n\t * @attr\n\t */\n\t@property({ type: Number })\n\tpublic maxlength!: number\n\n\t/**\n\t * The number of columns (width) of the control.\n\t * @attr cols\n\t * @type {number}\n\t * @default 20\n\t * @public\n\t */\n\t@property({ type: Number }) cols = 20\n\n\t/**\n\t * The number of rows (height) of the control.\n\t * When not set, the textarea auto-sizes to fit its content via field-sizing: content.\n\t * @attr rows\n\t * @type {number}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number }) rows: number | undefined\n\n\t/**\n\t * Makes the textarea fill the height of its container.\n\t * @attr fillHeight\n\t * @type {boolean}\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) fillHeight = false\n\n\t/**\n\t * Automatically adjusts height based on content.\n\t * @attr autoHeight\n\t * @type {boolean}\n\t * @default true\n\t * @public\n\t */\n\t@property({ type: Boolean }) autoHeight = true\n\n\t/**\n\t * Controls whether the textarea can be resized by the user.\n\t * @attr resize\n\t * @type {'none' | 'vertical' | 'horizontal' | 'both'}\n\t * @default 'vertical'\n\t * @public\n\t */\n\t@property({ type: String, reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical'\n\n\t/**\n\t * Specifies how the text in a text area is to be wrapped when submitted in a form.\n\t * @attr wrap\n\t * @type {'hard' | 'soft'}\n\t * @default 'soft'\n\t * @public\n\t */\n\t@property({ type: String }) wrap: 'hard' | 'soft' = 'soft'\n\n\t/**\n\t * The dirname attribute of the control.\n\t * @attr dirname\n\t * @type {string}\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: String }) dirname: string | undefined\n\n\t// `required`, `disabled`, `readonly`, `error`, `validationMessage`, `hint`\n\t// come from the mixin. Textarea-specific extras only:\n\t@property({ type: Boolean, reflect: true }) spellcheck = false\n\n\t@property({ type: String, reflect: true }) align: 'left' | 'center' | 'right' = 'left'\n\n\t/**\n\t * The autofocus attribute of the control.\n\t */\n\t@property({ type: Boolean })\n\tpublic override autofocus!: boolean\n\n\t@property({ type: Number })\n\tpublic override tabIndex = 0\n\n\t@query('textarea') textareaElement!: HTMLTextAreaElement\n\n\t// Mixin's willUpdate already calls internals.setFormValue() on value-change\n\t// and runs the required-empty / customError validity machinery. Native\n\t// `valueMissing` flag is set here for richer ValidityState introspection.\n\toverride willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate(changed)\n\t\tif (changed.has('required') || changed.has('value')) {\n\t\t\tif (this.required && !this.value) {\n\t\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please fill out this field.')\n\t\t\t}\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tif (this.autofocus) {\n\t\t\tthis.focus()\n\t\t}\n\t\tif (this.autoHeight) {\n\t\t\t// Initial adjustment for pre-filled content (cancel-on-disconnect).\n\t\t\ttimer(0)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => this.adjustHeight())\n\t\t}\n\t\tfromEvent(this.textareaElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\tfromEvent(this.textareaElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tif (this.autoHeight) {\n\t\t\t\t\tthis.adjustHeight()\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t// emit on enter\n\t\tfromEvent<KeyboardEvent>(this.textareaElement, 'keyup')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => event.key === 'Enter'),\n\t\t\t\tmap(event => (event.target as HTMLTextAreaElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('change', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<EventDetails>('enter', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\t/** Checks for validity of the control and shows the browser message if it's invalid. */\n\tpublic reportValidity() {\n\t\treturn this.textareaRef.value?.reportValidity()\n\t}\n\n\t/** Checks for validity of the control and emits the invalid event if it invalid. */\n\tpublic checkValidity() {\n\t\treturn this.textareaRef.value?.checkValidity()\n\t}\n\n\t/** Sets a custom validity message. */\n\tpublic setCustomValidity(message: string) {\n\t\treturn this.textareaRef.value?.setCustomValidity(message)\n\t}\n\n\t/** Selects all text within the textarea. */\n\tpublic select() {\n\t\treturn this.textareaRef.value?.select()\n\t}\n\n\t/** Sets the selection range. */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.textareaRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/** Returns the selected text within the textarea. */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.textareaRef.value?.selectionStart ?? null\n\t}\n\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.textareaRef.value?.selectionEnd ?? null\n\t}\n\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.textareaRef.value?.selectionDirection ?? null\n\t}\n\n\t/** Sets the range of text to be selected. */\n\tpublic setRangeText(replacement: string) {\n\t\tthis.textareaRef.value?.setRangeText(replacement)\n\t}\n\n\t/** Adjusts the height of the textarea based on its content. */\n\tpublic adjustHeight() {\n\t\tconst textarea = this.textareaRef.value\n\t\tif (textarea) {\n\t\t\t// Only grow, never shrink\n\t\t\tconst currentHeight = textarea.offsetHeight\n\t\t\tconst scrollHeight = textarea.scrollHeight\n\t\t\tif (scrollHeight > currentHeight) {\n\t\t\t\ttextarea.style.height = scrollHeight + 'px'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic validity(): ValidityState | undefined {\n\t\treturn this.textareaRef.value?.validity\n\t}\n\n\tpublic override focus(\n\t\toptions: FocusOptions = {\n\t\t\tpreventScroll: true,\n\t\t},\n\t) {\n\t\tthis.textareaRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\tpublic override click() {\n\t\tthis.textareaRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\tpublic override blur() {\n\t\tthis.textareaRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst textareaClasses = {\n\t\t\t// Base styles - matching input component\n\t\t\t'block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on': true,\n\t\t\t// Border color\n\t\t\t'border-outline': !this.error,\n\t\t\t'border-error-default': this.error,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1 focus:border-secondary-default': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles (subtle focus ring)\n\t\t\t'ring-0 focus:ring-1 focus:ring-inset': true,\n\t\t\t'focus:ring-secondary-default': !this.error,\n\t\t\t'focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t// Text alignment\n\t\t\t'text-left': this.align === 'left',\n\t\t\t'text-center': this.align === 'center',\n\t\t\t'text-right': this.align === 'right',\n\t\t\t// Textarea specific\n\t\t\t'h-full': this.fillHeight,\n\t\t\t'resize-none': this.resize === 'none',\n\t\t\t'resize-y': this.resize === 'vertical',\n\t\t\t'resize-x': this.resize === 'horizontal',\n\t\t\t'resize': this.resize === 'both',\n\t\t\t// Padding matching input\n\t\t\t'px-4 py-3': true,\n\t\t}\n\t\tconst fieldSizing = this.rows == null ? 'field-sizing: content;' : ''\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium text-sm': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\t\tconst containerClasses = {\n\t\t\t'w-full min-w-0': true,\n\t\t\t'flex flex-col h-full': this.fillHeight,\n\t\t}\n\t\tconst hintId = `${this._a11yId}-hint`\n\t\treturn html`\n\t\t<div class=\"${this.classMap(containerClasses)}\">\n\t\t\t${when(\n\t\t\t\tthis.label,\n\t\t\t\t() => html`\n\t\t\t\t\t<label class=\"${this.classMap(labelClasses)}\" for=${this.id}>\n\t\t\t\t\t\t${this.label}\n\t\t\t\t\t</label>\n\t\t\t\t`,\n\t\t\t)}\n\n\t\t\t<textarea\n\t\t\t\t${ref(this.textareaRef)}\n\t\t\t\t.value=${this.value}\n\t\t\t\t.id=${this.id}\n\t\t\t\t.name=${this.name}\n\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t.required=${this.required}\n\t\t\t\tclass=${this.classMap(textareaClasses)}\n\t\t\t\tstyle=${fieldSizing}\n\t\t\t\t.disabled=${this.disabled}\n\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t.readonly=${this.readonly}\n\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\tcols=${ifDefined(this.cols)}\n\t\t\t\trows=${ifDefined(this.rows)}\n\t\t\t\twrap=${ifDefined(this.wrap)}\n\t\t\t\tdirname=${ifDefined(this.dirname)}\n\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\taria-describedby=${this.hint || (this.error && this.validationMessage) ? hintId : nothing}\n\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t></textarea>\n\n\t\t\t${when(\n\t\t\t\tthis.hint || (this.error && this.validationMessage),\n\t\t\t\t() => html`\n\t\t\t\t\t<div\n\t\t\t\t\t\tid=${hintId}\n\t\t\t\t\t\tclass=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\"\n\t\t\t\t\t\trole=${ifDefined(this.error ? 'alert' : undefined)}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.error && this.validationMessage ? this.validationMessage : this.hint}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t)}\n\t\t</div>\n\t\t`\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\nexport type SchmancyTextareaChangeEvent = CustomEvent<EventDetails>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-textarea': SchmancyTextarea\n\t}\n}\n"],"mappings":"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"}
|
package/dist/textarea.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./textarea-
|
|
1
|
+
require(`./textarea-CGD6lAEe.cjs`);
|
package/dist/textarea.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./textarea-
|
|
1
|
+
import "./textarea-BAogS_Ff.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as e, f as t } from "./mixins-
|
|
1
|
+
import { c as e, f as t } from "./mixins-pU53qf6R.js";
|
|
2
2
|
import { a as n } from "./active-host-BP0zy_Y9.js";
|
|
3
3
|
import { n as r } from "./sound.service-v_jqCkos.js";
|
|
4
4
|
import { i, r as a } from "./theme.service-CSzNkqBB.js";
|