@mhmo91/schmancy 0.2.195 → 0.2.196
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/ai/animated-text.md +114 -0
- package/ai/card.md +162 -131
- package/ai/circular-progress.md +91 -0
- package/ai/date-range.md +142 -0
- package/ai/delay.md +158 -0
- package/ai/divider.md +153 -0
- package/ai/index.md +42 -3
- package/ai/nav-drawer.md +206 -0
- package/ai/option.md +173 -0
- package/ai/slider.md +227 -0
- package/ai/steps.md +231 -0
- package/ai/surface.md +139 -200
- package/ai/teleport.md +196 -0
- package/ai/theme-button.md +173 -0
- package/ai/theme.md +241 -0
- package/ai/typewriter.md +217 -0
- package/dist/ai/animated-text.md +114 -0
- package/dist/ai/card.md +162 -131
- package/dist/ai/circular-progress.md +91 -0
- package/dist/ai/date-range.md +142 -0
- package/dist/ai/delay.md +158 -0
- package/dist/ai/divider.md +153 -0
- package/dist/ai/index.md +42 -3
- package/dist/ai/nav-drawer.md +206 -0
- package/dist/ai/option.md +173 -0
- package/dist/ai/slider.md +227 -0
- package/dist/ai/steps.md +231 -0
- package/dist/ai/surface.md +139 -200
- package/dist/ai/teleport.md +196 -0
- package/dist/ai/theme-button.md +173 -0
- package/dist/ai/theme.md +241 -0
- package/dist/ai/typewriter.md +217 -0
- package/dist/{animated-text-Bu9wh3wv.cjs → animated-text-DnX2TopW.cjs} +2 -2
- package/dist/{animated-text-Bu9wh3wv.cjs.map → animated-text-DnX2TopW.cjs.map} +1 -1
- package/dist/{animated-text-Ci7M0QTx.js → animated-text-jv1yAwLh.js} +3 -3
- package/dist/{animated-text-Ci7M0QTx.js.map → animated-text-jv1yAwLh.js.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-eJJ_wryh.js → area.component-DMD20wqd.js} +3 -3
- package/dist/{area.component-eJJ_wryh.js.map → area.component-DMD20wqd.js.map} +1 -1
- package/dist/{area.component-Cg9dqZJ5.cjs → area.component-Vs2WGXgk.cjs} +2 -2
- package/dist/{area.component-Cg9dqZJ5.cjs.map → area.component-Vs2WGXgk.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-BH7nQbid.cjs → autocomplete-BrAxEJJq.cjs} +2 -2
- package/dist/{autocomplete-BH7nQbid.cjs.map → autocomplete-BrAxEJJq.cjs.map} +1 -1
- package/dist/{autocomplete-D9n1MeKT.js → autocomplete-OS61ngsy.js} +3 -3
- package/dist/{autocomplete-D9n1MeKT.js.map → autocomplete-OS61ngsy.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-Bg-rdjAe.cjs → avatar-CEdv8DJY.cjs} +2 -2
- package/dist/{avatar-Bg-rdjAe.cjs.map → avatar-CEdv8DJY.cjs.map} +1 -1
- package/dist/{avatar-B4lSs4z5.js → avatar-CUHTDenQ.js} +41 -41
- package/dist/{avatar-B4lSs4z5.js.map → avatar-CUHTDenQ.js.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +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.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-y37-tGrk.js → checkbox-CVXRiSWP.js} +2 -2
- package/dist/{checkbox-y37-tGrk.js.map → checkbox-CVXRiSWP.js.map} +1 -1
- package/dist/{checkbox-CgL23smr.cjs → checkbox-Chd-COYm.cjs} +2 -2
- package/dist/{checkbox-CgL23smr.cjs.map → checkbox-Chd-COYm.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-CKST7ug-.cjs → chips-Bx9gSvN1.cjs} +2 -2
- package/dist/{chips-CKST7ug-.cjs.map → chips-Bx9gSvN1.cjs.map} +1 -1
- package/dist/{chips-Ndwt1V4b.js → chips-Dx_erk55.js} +3 -3
- package/dist/{chips-Ndwt1V4b.js.map → chips-Dx_erk55.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/{circular-progress-vokDGjmG.js → circular-progress-BQnGvbss.js} +3 -3
- package/dist/{circular-progress-vokDGjmG.js.map → circular-progress-BQnGvbss.js.map} +1 -1
- package/dist/{circular-progress-BDmc1zlm.cjs → circular-progress-CNBah5dz.cjs} +2 -2
- package/dist/{circular-progress-BDmc1zlm.cjs.map → circular-progress-CNBah5dz.cjs.map} +1 -1
- package/dist/circular-progress.cjs +1 -1
- package/dist/circular-progress.js +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-DfZz3ifP.cjs → date-range-Cq0diVSY.cjs} +4 -3
- package/dist/{date-range-DfZz3ifP.cjs.map → date-range-Cq0diVSY.cjs.map} +1 -1
- package/dist/{date-range-CpDVPn_v.js → date-range-wxdt6Ha0.js} +5 -4
- package/dist/date-range-wxdt6Ha0.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-ASLyLkQL.cjs → delay-BzkhDhs0.cjs} +2 -2
- package/dist/{delay-ASLyLkQL.cjs.map → delay-BzkhDhs0.cjs.map} +1 -1
- package/dist/{delay-CG5SRrzF.js → delay-Ds5suSsc.js} +2 -2
- package/dist/{delay-CG5SRrzF.js.map → delay-Ds5suSsc.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-D88EcY6L.cjs → dialog-content-CJY69qfC.cjs} +2 -2
- package/dist/{dialog-content-D88EcY6L.cjs.map → dialog-content-CJY69qfC.cjs.map} +1 -1
- package/dist/{dialog-content-BoPviBAt.js → dialog-content-DFJnYzff.js} +3 -3
- package/dist/{dialog-content-BoPviBAt.js.map → dialog-content-DFJnYzff.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-N7GWgK6o.js → divider-C3w1_-N1.js} +3 -3
- package/dist/{divider-N7GWgK6o.js.map → divider-C3w1_-N1.js.map} +1 -1
- package/dist/{divider-C38JDYss.cjs → divider-CFzbCFsr.cjs} +2 -2
- package/dist/{divider-C38JDYss.cjs.map → divider-CFzbCFsr.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-DmO_yIVb.js → dropdown-content-BGFYBXcx.js} +3 -3
- package/dist/{dropdown-content-DmO_yIVb.js.map → dropdown-content-BGFYBXcx.js.map} +1 -1
- package/dist/{dropdown-content-rH8awIRA.cjs → dropdown-content-PaMOJphI.cjs} +2 -2
- package/dist/{dropdown-content-rH8awIRA.cjs.map → dropdown-content-PaMOJphI.cjs.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-CXYfL6bE.js → flex-Cy4Stl_1.js} +2 -2
- package/dist/{flex-CXYfL6bE.js.map → flex-Cy4Stl_1.js.map} +1 -1
- package/dist/{flex-wYuewqrr.cjs → flex-DP5O5644.cjs} +2 -2
- package/dist/{flex-wYuewqrr.cjs.map → flex-DP5O5644.cjs.map} +1 -1
- package/dist/{form-q3JZjWez.js → form-BQamcLFL.js} +2 -2
- package/dist/{form-q3JZjWez.js.map → form-BQamcLFL.js.map} +1 -1
- package/dist/{form-CNWWdhT_.cjs → form-CG3kns69.cjs} +2 -2
- package/dist/{form-CNWWdhT_.cjs.map → form-CG3kns69.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-pLQWXzo8.js → icon-Cd4p9jRB.js} +3 -3
- package/dist/{icon-pLQWXzo8.js.map → icon-Cd4p9jRB.js.map} +1 -1
- package/dist/{icon-QnmfHtfT.cjs → icon-CilwMTXB.cjs} +2 -2
- package/dist/{icon-QnmfHtfT.cjs.map → icon-CilwMTXB.cjs.map} +1 -1
- package/dist/{icon-button-DOTB_28y.js → icon-button-By17is4V.js} +3 -3
- package/dist/{icon-button-DOTB_28y.js.map → icon-button-By17is4V.js.map} +1 -1
- package/dist/{icon-button-oAOX71_s.cjs → icon-button-C4Hf63hY.cjs} +2 -2
- package/dist/{icon-button-oAOX71_s.cjs.map → icon-button-C4Hf63hY.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +39 -39
- package/dist/{input-CCniOtAr.cjs → input-BIi0rS2t.cjs} +2 -2
- package/dist/{input-CCniOtAr.cjs.map → input-BIi0rS2t.cjs.map} +1 -1
- package/dist/{input-DeJitVSV.js → input-C8OAokVe.js} +2 -2
- package/dist/{input-DeJitVSV.js.map → input-C8OAokVe.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-Ca79GGNH.js → list-BC3OE3Pu.js} +2 -2
- package/dist/{list-Ca79GGNH.js.map → list-BC3OE3Pu.js.map} +1 -1
- package/dist/{list-Ad-24MHW.cjs → list-jFsCubuy.cjs} +2 -2
- package/dist/{list-Ad-24MHW.cjs.map → list-jFsCubuy.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BoUiP2tU.js → litElement.mixin-C6PzcPXd.js} +2 -2
- package/dist/{litElement.mixin-BoUiP2tU.js.map → litElement.mixin-C6PzcPXd.js.map} +1 -1
- package/dist/{litElement.mixin-qOTYSaNG.cjs → litElement.mixin-Cypiq-N-.cjs} +2 -2
- package/dist/{litElement.mixin-qOTYSaNG.cjs.map → litElement.mixin-Cypiq-N-.cjs.map} +1 -1
- package/dist/{menu-6Wum4ysc.cjs → menu-CDjqdEd6.cjs} +2 -2
- package/dist/{menu-6Wum4ysc.cjs.map → menu-CDjqdEd6.cjs.map} +1 -1
- package/dist/{menu-Dd_X9oET.js → menu-n_Doj-bW.js} +3 -3
- package/dist/{menu-Dd_X9oET.js.map → menu-n_Doj-bW.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/{notification-service-CrNyAbmv.cjs → notification-service--VLqOJJg.cjs} +2 -2
- package/dist/{notification-service-CrNyAbmv.cjs.map → notification-service--VLqOJJg.cjs.map} +1 -1
- package/dist/{notification-service-C-9IqObm.js → notification-service-DHIhgWQr.js} +3 -3
- package/dist/{notification-service-C-9IqObm.js.map → notification-service-DHIhgWQr.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BbBbwrJq.cjs → option-B359EBiZ.cjs} +2 -2
- package/dist/{option-BbBbwrJq.cjs.map → option-B359EBiZ.cjs.map} +1 -1
- package/dist/{option-DVSXUJ96.js → option-oyyjCwnL.js} +2 -2
- package/dist/{option-DVSXUJ96.js.map → option-oyyjCwnL.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-R5wNWHAv.cjs → payment-card-form-B-ZAsSED.cjs} +2 -2
- package/dist/{payment-card-form-R5wNWHAv.cjs.map → payment-card-form-B-ZAsSED.cjs.map} +1 -1
- package/dist/{payment-card-form-CTjgVoJK.js → payment-card-form-BSueaw97.js} +3 -3
- package/dist/{payment-card-form-CTjgVoJK.js.map → payment-card-form-BSueaw97.js.map} +1 -1
- package/dist/{radio-button-BDAW1Euc.js → radio-button-84TD7rpH.js} +2 -2
- package/dist/{radio-button-BDAW1Euc.js.map → radio-button-84TD7rpH.js.map} +1 -1
- package/dist/{radio-button-Cg1JobXT.cjs → radio-button-BO6mIWCi.cjs} +2 -2
- package/dist/{radio-button-Cg1JobXT.cjs.map → radio-button-BO6mIWCi.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-BAPIxl4s.cjs → schmancy-steps-container-Cfq8OsWt.cjs} +2 -2
- package/dist/{schmancy-steps-container-BAPIxl4s.cjs.map → schmancy-steps-container-Cfq8OsWt.cjs.map} +1 -1
- package/dist/{schmancy-steps-container--d7VK-QR.js → schmancy-steps-container-Lo4d27n3.js} +2 -2
- package/dist/{schmancy-steps-container--d7VK-QR.js.map → schmancy-steps-container-Lo4d27n3.js.map} +1 -1
- package/dist/{select-DfbOOZtm.js → select-B-zgP_v6.js} +3 -3
- package/dist/{select-DfbOOZtm.js.map → select-B-zgP_v6.js.map} +1 -1
- package/dist/{select-CnjO7DLl.cjs → select-DhEVsWh6.cjs} +2 -2
- package/dist/{select-CnjO7DLl.cjs.map → select-DhEVsWh6.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-Ds0Fp0lM.cjs → sheet-BEWq40cN.cjs} +2 -2
- package/dist/{sheet-Ds0Fp0lM.cjs.map → sheet-BEWq40cN.cjs.map} +1 -1
- package/dist/{sheet-DhbKM9gJ.js → sheet-DDY4pbD4.js} +3 -3
- package/dist/{sheet-DhbKM9gJ.js.map → sheet-DDY4pbD4.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-Ba3AEh2W.js → slider--irxEv_B.js} +3 -3
- package/dist/{slider-Ba3AEh2W.js.map → slider--irxEv_B.js.map} +1 -1
- package/dist/{slider-CSOzhUhA.cjs → slider-De-H5fe8.cjs} +2 -2
- package/dist/{slider-CSOzhUhA.cjs.map → slider-De-H5fe8.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-BgeQqlFU.js → spinner-Bl9n09Z5.js} +3 -3
- package/dist/{spinner-BgeQqlFU.js.map → spinner-Bl9n09Z5.js.map} +1 -1
- package/dist/{spinner-llMfjiIc.cjs → spinner-DNz1IjmL.cjs} +2 -2
- package/dist/{spinner-llMfjiIc.cjs.map → spinner-DNz1IjmL.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-CT2g8fDM.cjs → surface-BAEUiWcq.cjs} +2 -2
- package/dist/{surface-CT2g8fDM.cjs.map → surface-BAEUiWcq.cjs.map} +1 -1
- package/dist/{surface-UcsAmLj5.js → surface-h9dLHMTm.js} +2 -2
- package/dist/{surface-UcsAmLj5.js.map → surface-h9dLHMTm.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-DuUlrDCu.js → table-CxazXBjI.js} +2 -2
- package/dist/{table-DuUlrDCu.js.map → table-CxazXBjI.js.map} +1 -1
- package/dist/{table-CSBhQ-pa.cjs → table-Dn07ykGG.cjs} +2 -2
- package/dist/{table-CSBhQ-pa.cjs.map → table-Dn07ykGG.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-BVFHArgV.js → tabs-compatibility-B8I0vg7Y.js} +2 -2
- package/dist/{tabs-compatibility-BVFHArgV.js.map → tabs-compatibility-B8I0vg7Y.js.map} +1 -1
- package/dist/{tabs-compatibility-Bt3coGzN.cjs → tabs-compatibility-BrTxeSS-.cjs} +2 -2
- package/dist/{tabs-compatibility-Bt3coGzN.cjs.map → tabs-compatibility-BrTxeSS-.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-Du4i6vQR.js +43 -0
- package/dist/{tailwind.mixin-C71e_LC1.js.map → tailwind.mixin-Du4i6vQR.js.map} +1 -1
- package/dist/tailwind.mixin-qyIcoDLk.cjs +2 -0
- package/dist/{tailwind.mixin-CFCJhe5p.cjs.map → tailwind.mixin-qyIcoDLk.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-B8eIpYa-.js → textarea-DibCLxC2.js} +2 -2
- package/dist/{textarea-B8eIpYa-.js.map → textarea-DibCLxC2.js.map} +1 -1
- package/dist/{textarea-CtCk_1Fq.cjs → textarea-pMec4Wpg.cjs} +2 -2
- package/dist/{textarea-CtCk_1Fq.cjs.map → textarea-pMec4Wpg.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-DQe5uOxU.cjs → theme-button-CG1w_waw.cjs} +2 -2
- package/dist/{theme-button-DQe5uOxU.cjs.map → theme-button-CG1w_waw.cjs.map} +1 -1
- package/dist/{theme-button-TEzhKUy6.js → theme-button-irLEczd5.js} +2 -2
- package/dist/{theme-button-TEzhKUy6.js.map → theme-button-irLEczd5.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-DiTpToTC.js → theme.component-CMM8Xws2.js} +2 -2
- package/dist/{theme.component-DiTpToTC.js.map → theme.component-CMM8Xws2.js.map} +1 -1
- package/dist/{theme.component-Be6M74nN.cjs → theme.component-CpRuySmd.cjs} +2 -2
- package/dist/{theme.component-Be6M74nN.cjs.map → theme.component-CpRuySmd.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-CBSuTrU2.js → timezone-DIrmlnD6.js} +3 -3
- package/dist/{timezone-CBSuTrU2.js.map → timezone-DIrmlnD6.js.map} +1 -1
- package/dist/{timezone-C1aR24i0.cjs → timezone-n5GflDRe.cjs} +2 -2
- package/dist/{timezone-C1aR24i0.cjs.map → timezone-n5GflDRe.cjs.map} +1 -1
- package/dist/{tooltip-DYcXTtFy.cjs → tooltip-0vIcVm5-.cjs} +2 -2
- package/dist/{tooltip-DYcXTtFy.cjs.map → tooltip-0vIcVm5-.cjs.map} +1 -1
- package/dist/{tooltip-DYQW9R3I.js → tooltip-N_B-vsDa.js} +2 -2
- package/dist/{tooltip-DYQW9R3I.js.map → tooltip-N_B-vsDa.js.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-nsSIkdNT.js → tree-2Hf2X0Hv.js} +2 -2
- package/dist/{tree-nsSIkdNT.js.map → tree-2Hf2X0Hv.js.map} +1 -1
- package/dist/{tree-D-rTjnPs.cjs → tree-Q8AMxJxP.cjs} +2 -2
- package/dist/{tree-D-rTjnPs.cjs.map → tree-Q8AMxJxP.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Cj0R-RDa.cjs → typewriter-CsL-NfYC.cjs} +2 -2
- package/dist/{typewriter-Cj0R-RDa.cjs.map → typewriter-CsL-NfYC.cjs.map} +1 -1
- package/dist/{typewriter-DrYb6_FB.js → typewriter-bqbNKczJ.js} +4 -4
- package/dist/{typewriter-DrYb6_FB.js.map → typewriter-bqbNKczJ.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DMj2H_lZ.js → typography-CbrvouLo.js} +2 -2
- package/dist/{typography-DMj2H_lZ.js.map → typography-CbrvouLo.js.map} +1 -1
- package/dist/{typography-B0Kj2XoC.cjs → typography-Hlts-hzc.cjs} +2 -2
- package/dist/{typography-B0Kj2XoC.cjs.map → typography-Hlts-hzc.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/dist/date-range-CpDVPn_v.js.map +0 -1
- package/dist/tailwind.mixin-C71e_LC1.js +0 -43
- package/dist/tailwind.mixin-CFCJhe5p.cjs +0 -2
package/dist/ai/surface.md
CHANGED
|
@@ -1,221 +1,160 @@
|
|
|
1
1
|
# Schmancy Surface - AI Reference
|
|
2
2
|
|
|
3
3
|
```js
|
|
4
|
-
//
|
|
4
|
+
// Surface Component
|
|
5
5
|
<schmancy-surface
|
|
6
|
-
|
|
7
|
-
rounded="none|
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
fill="all|width|height|auto"
|
|
7
|
+
rounded="none|top|left|right|bottom|all"
|
|
8
|
+
type="surface|surfaceDim|surfaceBright|containerLowest|containerLow|container|containerHigh|containerHighest"
|
|
9
|
+
elevation="0|1|2|3|4|5">
|
|
10
|
+
Content goes here
|
|
10
11
|
</schmancy-surface>
|
|
11
12
|
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
</schmancy-surface>
|
|
18
|
-
|
|
19
|
-
// Interactive surface
|
|
20
|
-
<schmancy-surface
|
|
21
|
-
interactive
|
|
22
|
-
@click=${handleClick}>
|
|
23
|
-
Click me!
|
|
24
|
-
</schmancy-surface>
|
|
13
|
+
// Properties
|
|
14
|
+
fill: string // "all", "width", "height", "auto" (default: "auto")
|
|
15
|
+
rounded: string // Corner rounding: "none", "top", "left", "right", "bottom", "all" (default: "none")
|
|
16
|
+
type: string // Surface color variant (default: "surface")
|
|
17
|
+
elevation: number // Shadow depth 0-5 (default: 0)
|
|
25
18
|
|
|
26
|
-
// Surface
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
// Surface Types (background colors)
|
|
20
|
+
"surface" // Default surface color
|
|
21
|
+
"surfaceDim" // Dimmed surface
|
|
22
|
+
"surfaceBright" // Bright surface
|
|
23
|
+
"containerLowest" // Lowest container elevation
|
|
24
|
+
"containerLow" // Low container elevation
|
|
25
|
+
"container" // Standard container
|
|
26
|
+
"containerHigh" // High container elevation
|
|
27
|
+
"containerHighest" // Highest container elevation
|
|
34
28
|
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
min-width="200px"
|
|
40
|
-
max-width="500px"
|
|
41
|
-
min-height="100px"
|
|
42
|
-
max-height="300px">
|
|
43
|
-
Fixed size surface
|
|
29
|
+
// Examples
|
|
30
|
+
// 1. Basic surface
|
|
31
|
+
<schmancy-surface>
|
|
32
|
+
Basic content
|
|
44
33
|
</schmancy-surface>
|
|
45
34
|
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
color: string // Background color (theme color or CSS value)
|
|
52
|
-
theme: string // Theme: "light", "dark"
|
|
53
|
-
interactive: boolean // Enable hover and active states
|
|
54
|
-
bordered: boolean // Show border
|
|
55
|
-
borderColor: string // Border color
|
|
56
|
-
borderWidth: string // Border width: "thin", "medium", "thick"
|
|
57
|
-
borderStyle: string // Border style: "solid", "dashed", "dotted"
|
|
58
|
-
width: string // Width
|
|
59
|
-
height: string // Height
|
|
60
|
-
minWidth: string // Minimum width
|
|
61
|
-
maxWidth: string // Maximum width
|
|
62
|
-
minHeight: string // Minimum height
|
|
63
|
-
maxHeight: string // Maximum height
|
|
64
|
-
fullWidth: boolean // Take full width of parent
|
|
65
|
-
fullHeight: boolean // Take full height of parent
|
|
66
|
-
|
|
67
|
-
// Surface Context
|
|
68
|
-
// For theme-aware surfaces and consistent styling
|
|
69
|
-
import { SurfaceContext } from 'schmancy/surface';
|
|
70
|
-
|
|
71
|
-
const surfaceContext = new SurfaceContext({
|
|
72
|
-
elevation: 1,
|
|
73
|
-
rounded: 'md',
|
|
74
|
-
padding: 'md',
|
|
75
|
-
theme: 'light'
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// Examples
|
|
79
|
-
// Basic card-like surface
|
|
80
|
-
<schmancy-surface
|
|
81
|
-
elevation="2"
|
|
82
|
-
rounded="lg"
|
|
83
|
-
padding="lg">
|
|
35
|
+
// 2. Elevated card
|
|
36
|
+
<schmancy-surface
|
|
37
|
+
elevation="2"
|
|
38
|
+
rounded="all"
|
|
39
|
+
type="containerLow">
|
|
84
40
|
<h3>Card Title</h3>
|
|
85
|
-
<p>
|
|
41
|
+
<p>Card content</p>
|
|
86
42
|
</schmancy-surface>
|
|
87
43
|
|
|
88
|
-
//
|
|
89
|
-
<schmancy-surface
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
@click=${navigateToDetails}>
|
|
95
|
-
<div style="display: flex; align-items: center; gap: 16px;">
|
|
96
|
-
<schmancy-avatar
|
|
97
|
-
src="path/to/avatar.jpg"
|
|
98
|
-
size="large">
|
|
99
|
-
</schmancy-avatar>
|
|
100
|
-
|
|
101
|
-
<div>
|
|
102
|
-
<h3>John Doe</h3>
|
|
103
|
-
<p>Software Engineer</p>
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
<schmancy-icon
|
|
107
|
-
icon="chevron-right"
|
|
108
|
-
style="margin-left: auto;">
|
|
109
|
-
</schmancy-icon>
|
|
110
|
-
</div>
|
|
44
|
+
// 3. Full-width surface
|
|
45
|
+
<schmancy-surface
|
|
46
|
+
fill="width"
|
|
47
|
+
type="surfaceDim"
|
|
48
|
+
elevation="1">
|
|
49
|
+
Full width content
|
|
111
50
|
</schmancy-surface>
|
|
112
51
|
|
|
113
|
-
//
|
|
52
|
+
// 4. Dashboard panel
|
|
114
53
|
<schmancy-surface
|
|
115
|
-
|
|
116
|
-
rounded="
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
<div style="display: flex; align-items: center; gap: 16px;">
|
|
122
|
-
<schmancy-icon icon="info" color="primary"></schmancy-icon>
|
|
123
|
-
<div>
|
|
124
|
-
<h4>Information</h4>
|
|
125
|
-
<p>This is an informational message.</p>
|
|
126
|
-
</div>
|
|
54
|
+
elevation="3"
|
|
55
|
+
rounded="all"
|
|
56
|
+
type="containerHighest"
|
|
57
|
+
fill="all">
|
|
58
|
+
<div class="dashboard-content">
|
|
59
|
+
<!-- Content -->
|
|
127
60
|
</div>
|
|
128
61
|
</schmancy-surface>
|
|
62
|
+
```
|
|
129
63
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
border-color="error"
|
|
136
|
-
style="--surface-color-opacity: 0.1;">
|
|
137
|
-
<div style="display: flex; align-items: center; gap: 16px;">
|
|
138
|
-
<schmancy-icon icon="alert-triangle" color="error"></schmancy-icon>
|
|
139
|
-
<div>
|
|
140
|
-
<h4>Error</h4>
|
|
141
|
-
<p>Something went wrong. Please try again.</p>
|
|
142
|
-
</div>
|
|
143
|
-
</div>
|
|
144
|
-
</schmancy-surface>
|
|
64
|
+
## Related Components
|
|
65
|
+
- **[Card](./card.md)**: Pre-styled surface for card layouts
|
|
66
|
+
- **[Sheet](./sheet.md)**: Modal surface overlay
|
|
67
|
+
- **[Dialog](./dialog.md)**: Elevated modal surface
|
|
68
|
+
- **[Layout](./layout.md)**: Layout components that often contain surfaces
|
|
145
69
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
70
|
+
## Technical Details
|
|
71
|
+
|
|
72
|
+
### CSS Host Styling
|
|
73
|
+
The component uses `:host` selectors for all styling:
|
|
74
|
+
- No wrapper elements - styles apply directly to the component
|
|
75
|
+
- Properties reflect to HTML attributes for CSS targeting
|
|
76
|
+
- Uses CSS custom properties from the theme system
|
|
77
|
+
|
|
78
|
+
### Theme Integration
|
|
79
|
+
```css
|
|
80
|
+
/* Background colors use theme variables */
|
|
81
|
+
--schmancy-sys-color-surface-default
|
|
82
|
+
--schmancy-sys-color-surface-dim
|
|
83
|
+
--schmancy-sys-color-surface-bright
|
|
84
|
+
--schmancy-sys-color-surface-lowest
|
|
85
|
+
--schmancy-sys-color-surface-low
|
|
86
|
+
--schmancy-sys-color-surface-container
|
|
87
|
+
--schmancy-sys-color-surface-high
|
|
88
|
+
--schmancy-sys-color-surface-highest
|
|
89
|
+
|
|
90
|
+
/* Text color */
|
|
91
|
+
--schmancy-sys-color-surface-on
|
|
92
|
+
|
|
93
|
+
/* Elevation shadows */
|
|
94
|
+
--schmancy-sys-elevation-1 through --schmancy-sys-elevation-5
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Context Provider
|
|
98
|
+
Surface provides its type to descendant components via Lit Context:
|
|
99
|
+
```js
|
|
100
|
+
import { SchmancySurfaceTypeContext } from '@schmancy/surface'
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Common Use Cases
|
|
104
|
+
|
|
105
|
+
1. **Content Cards**: Elevated surfaces for grouped content
|
|
106
|
+
```html
|
|
107
|
+
<schmancy-surface elevation="2" rounded="all" type="containerLow">
|
|
108
|
+
<h3>Feature Card</h3>
|
|
109
|
+
<p>Description of the feature</p>
|
|
110
|
+
<schmancy-button>Learn More</schmancy-button>
|
|
111
|
+
</schmancy-surface>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
2. **Page Sections**: Full-width background surfaces
|
|
115
|
+
```html
|
|
116
|
+
<schmancy-surface fill="width" type="surfaceDim">
|
|
117
|
+
<section class="hero-section">
|
|
118
|
+
<h1>Welcome</h1>
|
|
119
|
+
<p>Hero content here</p>
|
|
120
|
+
</section>
|
|
121
|
+
</schmancy-surface>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
3. **Modal Backgrounds**: High elevation surfaces
|
|
125
|
+
```html
|
|
126
|
+
<schmancy-surface
|
|
127
|
+
elevation="5"
|
|
128
|
+
rounded="all"
|
|
129
|
+
type="containerHighest">
|
|
130
|
+
<div class="modal-content">
|
|
131
|
+
<h2>Modal Title</h2>
|
|
132
|
+
<p>Modal body content</p>
|
|
133
|
+
</div>
|
|
134
|
+
</schmancy-surface>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
4. **Nested Surfaces**: Different elevation levels
|
|
138
|
+
```html
|
|
139
|
+
<schmancy-surface type="surface" fill="all">
|
|
140
|
+
<schmancy-surface
|
|
141
|
+
elevation="1"
|
|
142
|
+
rounded="all"
|
|
143
|
+
type="containerLow">
|
|
144
|
+
<p>Nested content with different elevation</p>
|
|
145
|
+
</schmancy-surface>
|
|
146
|
+
</schmancy-surface>
|
|
147
|
+
```
|
|
203
148
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
<schmancy-surface elevation="3" rounded="xl">
|
|
217
|
-
<h3>Custom Panel</h3>
|
|
218
|
-
<p>This surface overrides some context settings.</p>
|
|
219
|
-
</schmancy-surface>
|
|
220
|
-
</div>
|
|
221
|
-
```
|
|
149
|
+
5. **Sidebar Panels**: Directional rounding
|
|
150
|
+
```html
|
|
151
|
+
<schmancy-surface
|
|
152
|
+
fill="height"
|
|
153
|
+
rounded="right"
|
|
154
|
+
elevation="2"
|
|
155
|
+
type="containerHigh">
|
|
156
|
+
<nav class="sidebar">
|
|
157
|
+
<!-- Navigation items -->
|
|
158
|
+
</nav>
|
|
159
|
+
</schmancy-surface>
|
|
160
|
+
```
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Teleport Component
|
|
2
|
+
|
|
3
|
+
An advanced component that enables smooth FLIP (First, Last, Invert, Play) animations for elements transitioning between different DOM positions.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<!-- Source element -->
|
|
9
|
+
<schmancy-teleport id="user-avatar">
|
|
10
|
+
<schmancy-avatar src="/user.jpg" name="John Doe"></schmancy-avatar>
|
|
11
|
+
</schmancy-teleport>
|
|
12
|
+
|
|
13
|
+
<!-- Target location (different part of DOM) -->
|
|
14
|
+
<schmancy-teleport id="user-avatar">
|
|
15
|
+
<schmancy-avatar src="/user.jpg" name="John Doe"></schmancy-avatar>
|
|
16
|
+
</schmancy-teleport>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Properties
|
|
20
|
+
|
|
21
|
+
| Property | Type | Default | Description |
|
|
22
|
+
|----------|------|---------|-------------|
|
|
23
|
+
| `id` | `string` | - | **Required** - Unique identifier for teleportation pair |
|
|
24
|
+
| `uuid` | `number` | `random` | Auto-generated unique instance ID |
|
|
25
|
+
| `delay` | `number` | `0` | Animation delay in milliseconds |
|
|
26
|
+
|
|
27
|
+
## How It Works
|
|
28
|
+
|
|
29
|
+
The teleport component uses a sophisticated event system to coordinate animations:
|
|
30
|
+
|
|
31
|
+
1. **Discovery Phase**: Components with same `id` find each other
|
|
32
|
+
2. **Position Tracking**: Monitors element positions using ResizeObserver
|
|
33
|
+
3. **FLIP Animation**: Smoothly animates between positions
|
|
34
|
+
4. **State Management**: Maintains teleportation state across the app
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
### Page Transition Animation
|
|
39
|
+
```html
|
|
40
|
+
<!-- List view -->
|
|
41
|
+
<schmancy-list>
|
|
42
|
+
${items.map(item => html`
|
|
43
|
+
<schmancy-list-item @click="${() => selectItem(item)}">
|
|
44
|
+
<schmancy-teleport id="item-${item.id}">
|
|
45
|
+
<schmancy-card>
|
|
46
|
+
<img src="${item.thumbnail}" />
|
|
47
|
+
<h3>${item.title}</h3>
|
|
48
|
+
</schmancy-card>
|
|
49
|
+
</schmancy-teleport>
|
|
50
|
+
</schmancy-list-item>
|
|
51
|
+
`)}
|
|
52
|
+
</schmancy-list>
|
|
53
|
+
|
|
54
|
+
<!-- Detail view -->
|
|
55
|
+
${selectedItem ? html`
|
|
56
|
+
<div class="detail-view">
|
|
57
|
+
<schmancy-teleport id="item-${selectedItem.id}">
|
|
58
|
+
<schmancy-card>
|
|
59
|
+
<img src="${selectedItem.thumbnail}" />
|
|
60
|
+
<h3>${selectedItem.title}</h3>
|
|
61
|
+
<p>${selectedItem.description}</p>
|
|
62
|
+
</schmancy-card>
|
|
63
|
+
</schmancy-teleport>
|
|
64
|
+
</div>
|
|
65
|
+
` : ''}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Navigation Avatar Animation
|
|
69
|
+
```html
|
|
70
|
+
<!-- Collapsed navbar -->
|
|
71
|
+
<nav class="navbar-collapsed">
|
|
72
|
+
<schmancy-teleport id="nav-user">
|
|
73
|
+
<schmancy-avatar size="sm" src="/user.jpg"></schmancy-avatar>
|
|
74
|
+
</schmancy-teleport>
|
|
75
|
+
</nav>
|
|
76
|
+
|
|
77
|
+
<!-- Expanded sidebar -->
|
|
78
|
+
<aside class="sidebar-expanded">
|
|
79
|
+
<schmancy-teleport id="nav-user">
|
|
80
|
+
<div class="user-profile">
|
|
81
|
+
<schmancy-avatar size="lg" src="/user.jpg"></schmancy-avatar>
|
|
82
|
+
<h3>John Doe</h3>
|
|
83
|
+
<p>john@example.com</p>
|
|
84
|
+
</div>
|
|
85
|
+
</schmancy-teleport>
|
|
86
|
+
</aside>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Tab Content Transitions
|
|
90
|
+
```html
|
|
91
|
+
<!-- Tab headers -->
|
|
92
|
+
<schmancy-tabs>
|
|
93
|
+
${tabs.map(tab => html`
|
|
94
|
+
<schmancy-tab>
|
|
95
|
+
<schmancy-teleport id="tab-icon-${tab.id}">
|
|
96
|
+
<schmancy-icon>${tab.icon}</schmancy-icon>
|
|
97
|
+
</schmancy-teleport>
|
|
98
|
+
${tab.label}
|
|
99
|
+
</schmancy-tab>
|
|
100
|
+
`)}
|
|
101
|
+
</schmancy-tabs>
|
|
102
|
+
|
|
103
|
+
<!-- Tab content -->
|
|
104
|
+
<div class="tab-content">
|
|
105
|
+
<schmancy-teleport id="tab-icon-${activeTab.id}">
|
|
106
|
+
<schmancy-icon size="xl">${activeTab.icon}</schmancy-icon>
|
|
107
|
+
</schmancy-teleport>
|
|
108
|
+
<h2>${activeTab.title}</h2>
|
|
109
|
+
<div>${activeTab.content}</div>
|
|
110
|
+
</div>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Event System
|
|
114
|
+
|
|
115
|
+
The component uses custom events for coordination:
|
|
116
|
+
|
|
117
|
+
### Internal Events
|
|
118
|
+
- `WhereAreYouRicky`: Discovery broadcast
|
|
119
|
+
- `HereMorty`: Response to discovery
|
|
120
|
+
- `FINDING_MORTIES`: Global search event
|
|
121
|
+
- `HERE_RICKY`: Component announcement
|
|
122
|
+
|
|
123
|
+
## Service Integration
|
|
124
|
+
|
|
125
|
+
The teleport system uses a central service for state management:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// Access active teleportations
|
|
129
|
+
import { teleportationService } from '@schmancy/teleport';
|
|
130
|
+
|
|
131
|
+
// Get current positions
|
|
132
|
+
const positions = teleportationService.activeTeleportations;
|
|
133
|
+
|
|
134
|
+
// Subscribe to animations
|
|
135
|
+
teleportationService.flipRequests.subscribe(({ from, to }) => {
|
|
136
|
+
console.log('Animating from', from.rect, 'to', to.rect);
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Advanced Features
|
|
141
|
+
|
|
142
|
+
### Position Watching
|
|
143
|
+
Uses `watchElementRect` to monitor element position changes:
|
|
144
|
+
- Handles resize events
|
|
145
|
+
- Tracks DOM mutations
|
|
146
|
+
- Updates on scroll
|
|
147
|
+
|
|
148
|
+
### FLIP Animation
|
|
149
|
+
Implements the FLIP technique for performant animations:
|
|
150
|
+
- **F**irst: Record initial position
|
|
151
|
+
- **L**ast: Record final position
|
|
152
|
+
- **I**nvert: Calculate the difference
|
|
153
|
+
- **P**lay: Animate to final position
|
|
154
|
+
|
|
155
|
+
### Visibility Management
|
|
156
|
+
- Initially hidden until position calculated
|
|
157
|
+
- Prevents layout jumps
|
|
158
|
+
- Smooth appearance after teleportation
|
|
159
|
+
|
|
160
|
+
## Performance Considerations
|
|
161
|
+
|
|
162
|
+
1. **Unique IDs**: Ensure IDs are unique per teleportation pair
|
|
163
|
+
2. **Cleanup**: Components automatically cleanup on disconnect
|
|
164
|
+
3. **Debouncing**: Position updates are optimized
|
|
165
|
+
4. **Observer Management**: Efficient use of ResizeObserver
|
|
166
|
+
|
|
167
|
+
## Debugging
|
|
168
|
+
|
|
169
|
+
Enable debug mode in development:
|
|
170
|
+
```javascript
|
|
171
|
+
// The component has built-in debugging
|
|
172
|
+
debugging = import.meta.env.DEV ? true : false
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Best Practices
|
|
176
|
+
|
|
177
|
+
1. **Unique IDs**: Always use unique, stable IDs
|
|
178
|
+
2. **Matching Content**: Ensure teleported content is identical
|
|
179
|
+
3. **Performance**: Limit active teleportations
|
|
180
|
+
4. **Transitions**: Combine with route transitions
|
|
181
|
+
5. **Fallbacks**: Handle cases where pairs don't exist
|
|
182
|
+
|
|
183
|
+
## Related Components
|
|
184
|
+
|
|
185
|
+
- [Avatar](./avatar.md) - Common teleportation target
|
|
186
|
+
- [Card](./card.md) - Container animations
|
|
187
|
+
- [Icon](./icons.md) - Icon transitions
|
|
188
|
+
- [Area](./area.md) - Route-based animations
|
|
189
|
+
|
|
190
|
+
## Use Cases
|
|
191
|
+
|
|
192
|
+
1. **Shared Element Transitions**: Seamless page transitions
|
|
193
|
+
2. **Master-Detail Views**: List to detail animations
|
|
194
|
+
3. **Navigation Morphing**: Navbar state changes
|
|
195
|
+
4. **Tab Transitions**: Content switching animations
|
|
196
|
+
5. **Gallery Effects**: Image zoom transitions
|