@mhmo91/schmancy 0.2.194 → 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/area.md +158 -78
- package/ai/card.md +162 -131
- package/ai/circular-progress.md +91 -0
- package/ai/content-drawer.md +190 -0
- package/ai/date-range.md +142 -0
- package/ai/delay.md +158 -0
- package/ai/dialog.md +10 -0
- package/ai/divider.md +153 -0
- package/ai/index.md +43 -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/table.md +99 -1
- 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/_headers +2 -0
- package/dist/ai/animated-text.md +114 -0
- package/dist/ai/area.md +158 -78
- package/dist/ai/card.md +162 -131
- package/dist/ai/circular-progress.md +91 -0
- package/dist/ai/content-drawer.md +190 -0
- package/dist/ai/date-range.md +142 -0
- package/dist/ai/delay.md +158 -0
- package/dist/ai/dialog.md +10 -0
- package/dist/ai/divider.md +153 -0
- package/dist/ai/index.md +43 -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/table.md +99 -1
- 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-9AM64DHd.cjs → animated-text-DnX2TopW.cjs} +2 -2
- package/dist/{animated-text-9AM64DHd.cjs.map → animated-text-DnX2TopW.cjs.map} +1 -1
- package/dist/{animated-text-CVStWn5N.js → animated-text-jv1yAwLh.js} +3 -3
- package/dist/{animated-text-CVStWn5N.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-DMD20wqd.js +191 -0
- package/dist/area.component-DMD20wqd.js.map +1 -0
- package/dist/area.component-Vs2WGXgk.cjs +8 -0
- package/dist/area.component-Vs2WGXgk.cjs.map +1 -0
- package/dist/area.js +21 -6
- package/dist/area.js.map +1 -1
- package/dist/{autocomplete-DBXvIJgc.cjs → autocomplete-BrAxEJJq.cjs} +2 -2
- package/dist/{autocomplete-DBXvIJgc.cjs.map → autocomplete-BrAxEJJq.cjs.map} +1 -1
- package/dist/{autocomplete-ih92pPkb.js → autocomplete-OS61ngsy.js} +3 -3
- package/dist/{autocomplete-ih92pPkb.js.map → autocomplete-OS61ngsy.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-Bmg5TXj9.cjs → avatar-CEdv8DJY.cjs} +62 -24
- package/dist/avatar-CEdv8DJY.cjs.map +1 -0
- package/dist/{avatar-CgP1tBZq.js → avatar-CUHTDenQ.js} +183 -145
- package/dist/avatar-CUHTDenQ.js.map +1 -0
- 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-Jxxbjxp0.js → checkbox-CVXRiSWP.js} +72 -65
- package/dist/{checkbox-Jxxbjxp0.js.map → checkbox-CVXRiSWP.js.map} +1 -1
- package/dist/{checkbox-DtnX5sT6.cjs → checkbox-Chd-COYm.cjs} +10 -10
- package/dist/{checkbox-DtnX5sT6.cjs.map → checkbox-Chd-COYm.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-CVDnpVUM.cjs → chips-Bx9gSvN1.cjs} +2 -2
- package/dist/{chips-CVDnpVUM.cjs.map → chips-Bx9gSvN1.cjs.map} +1 -1
- package/dist/{chips-lP7ohQep.js → chips-Dx_erk55.js} +3 -3
- package/dist/{chips-lP7ohQep.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-BQnGvbss.js +35 -0
- package/dist/circular-progress-BQnGvbss.js.map +1 -0
- package/dist/circular-progress-CNBah5dz.cjs +9 -0
- package/dist/circular-progress-CNBah5dz.cjs.map +1 -0
- package/dist/circular-progress.cjs +2 -0
- package/dist/circular-progress.cjs.map +1 -0
- package/dist/circular-progress.js +5 -0
- package/dist/circular-progress.js.map +1 -0
- 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-DbPA5Y-t.cjs → date-range-Cq0diVSY.cjs} +4 -3
- package/dist/{date-range-DbPA5Y-t.cjs.map → date-range-Cq0diVSY.cjs.map} +1 -1
- package/dist/{date-range-Ca9WLI4Q.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-BgNgQV2G.cjs → delay-BzkhDhs0.cjs} +2 -2
- package/dist/{delay-BgNgQV2G.cjs.map → delay-BzkhDhs0.cjs.map} +1 -1
- package/dist/{delay-5cCl7ji3.js → delay-Ds5suSsc.js} +2 -2
- package/dist/{delay-5cCl7ji3.js.map → delay-Ds5suSsc.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-qj1E8aye.cjs → dialog-content-CJY69qfC.cjs} +8 -8
- package/dist/dialog-content-CJY69qfC.cjs.map +1 -0
- package/dist/{dialog-content-9pumpyLD.js → dialog-content-DFJnYzff.js} +86 -82
- package/dist/dialog-content-DFJnYzff.js.map +1 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-r8-9eNnl.js → divider-C3w1_-N1.js} +3 -3
- package/dist/{divider-r8-9eNnl.js.map → divider-C3w1_-N1.js.map} +1 -1
- package/dist/{divider-CHckHGEQ.cjs → divider-CFzbCFsr.cjs} +2 -2
- package/dist/{divider-CHckHGEQ.cjs.map → divider-CFzbCFsr.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-D-TddflQ.js → dropdown-content-BGFYBXcx.js} +3 -3
- package/dist/{dropdown-content-D-TddflQ.js.map → dropdown-content-BGFYBXcx.js.map} +1 -1
- package/dist/{dropdown-content-B41MDDRG.cjs → dropdown-content-PaMOJphI.cjs} +2 -2
- package/dist/{dropdown-content-B41MDDRG.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-Bf0zNqji.js → flex-Cy4Stl_1.js} +2 -2
- package/dist/{flex-Bf0zNqji.js.map → flex-Cy4Stl_1.js.map} +1 -1
- package/dist/{flex-CFv-Zb76.cjs → flex-DP5O5644.cjs} +2 -2
- package/dist/{flex-CFv-Zb76.cjs.map → flex-DP5O5644.cjs.map} +1 -1
- package/dist/{form-uYcr1RLJ.js → form-BQamcLFL.js} +2 -2
- package/dist/{form-uYcr1RLJ.js.map → form-BQamcLFL.js.map} +1 -1
- package/dist/{form-BN75s0PI.cjs → form-CG3kns69.cjs} +2 -2
- package/dist/{form-BN75s0PI.cjs.map → form-CG3kns69.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-BR-jE0Y2.js → icon-Cd4p9jRB.js} +3 -3
- package/dist/{icon-BR-jE0Y2.js.map → icon-Cd4p9jRB.js.map} +1 -1
- package/dist/{icon-Cu-imayV.cjs → icon-CilwMTXB.cjs} +2 -2
- package/dist/{icon-Cu-imayV.cjs.map → icon-CilwMTXB.cjs.map} +1 -1
- package/dist/{icon-button-1tZaicyb.js → icon-button-By17is4V.js} +3 -3
- package/dist/{icon-button-1tZaicyb.js.map → icon-button-By17is4V.js.map} +1 -1
- package/dist/{icon-button-D0BbHnDL.cjs → icon-button-C4Hf63hY.cjs} +2 -2
- package/dist/{icon-button-D0BbHnDL.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 +190 -173
- package/dist/index.js.map +1 -1
- package/dist/{input-B2oV6Hck.cjs → input-BIi0rS2t.cjs} +2 -2
- package/dist/{input-B2oV6Hck.cjs.map → input-BIi0rS2t.cjs.map} +1 -1
- package/dist/{input-kiz5O3dY.js → input-C8OAokVe.js} +2 -2
- package/dist/{input-kiz5O3dY.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-wT4DLXCh.js → list-BC3OE3Pu.js} +2 -2
- package/dist/{list-wT4DLXCh.js.map → list-BC3OE3Pu.js.map} +1 -1
- package/dist/{list-CMHoPfX9.cjs → list-jFsCubuy.cjs} +2 -2
- package/dist/{list-CMHoPfX9.cjs.map → list-jFsCubuy.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-B9Qdq5S_.js → litElement.mixin-C6PzcPXd.js} +2 -2
- package/dist/{litElement.mixin-B9Qdq5S_.js.map → litElement.mixin-C6PzcPXd.js.map} +1 -1
- package/dist/{litElement.mixin-CHvyxfxf.cjs → litElement.mixin-Cypiq-N-.cjs} +2 -2
- package/dist/{litElement.mixin-CHvyxfxf.cjs.map → litElement.mixin-Cypiq-N-.cjs.map} +1 -1
- package/dist/{menu-BcSplMNh.cjs → menu-CDjqdEd6.cjs} +2 -2
- package/dist/{menu-BcSplMNh.cjs.map → menu-CDjqdEd6.cjs.map} +1 -1
- package/dist/{menu-Dl1QU86K.js → menu-n_Doj-bW.js} +3 -3
- package/dist/{menu-Dl1QU86K.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-BV9ybQBu.cjs → notification-service--VLqOJJg.cjs} +2 -2
- package/dist/{notification-service-BV9ybQBu.cjs.map → notification-service--VLqOJJg.cjs.map} +1 -1
- package/dist/{notification-service-CC698xHg.js → notification-service-DHIhgWQr.js} +3 -3
- package/dist/{notification-service-CC698xHg.js.map → notification-service-DHIhgWQr.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-CkLBgH71.cjs → option-B359EBiZ.cjs} +2 -2
- package/dist/{option-CkLBgH71.cjs.map → option-B359EBiZ.cjs.map} +1 -1
- package/dist/{option-DDxxXwwc.js → option-oyyjCwnL.js} +2 -2
- package/dist/{option-DDxxXwwc.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-UWbAYNPR.cjs → payment-card-form-B-ZAsSED.cjs} +2 -2
- package/dist/{payment-card-form-UWbAYNPR.cjs.map → payment-card-form-B-ZAsSED.cjs.map} +1 -1
- package/dist/{payment-card-form-DDTO5_AA.js → payment-card-form-BSueaw97.js} +3 -3
- package/dist/{payment-card-form-DDTO5_AA.js.map → payment-card-form-BSueaw97.js.map} +1 -1
- package/dist/{radio-button-wWoxPDfq.js → radio-button-84TD7rpH.js} +2 -2
- package/dist/{radio-button-wWoxPDfq.js.map → radio-button-84TD7rpH.js.map} +1 -1
- package/dist/{radio-button-BykiVxTD.cjs → radio-button-BO6mIWCi.cjs} +2 -2
- package/dist/{radio-button-BykiVxTD.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-B1mIGa9M.cjs → schmancy-steps-container-Cfq8OsWt.cjs} +2 -2
- package/dist/{schmancy-steps-container-B1mIGa9M.cjs.map → schmancy-steps-container-Cfq8OsWt.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-ByO98z7L.js → schmancy-steps-container-Lo4d27n3.js} +2 -2
- package/dist/{schmancy-steps-container-ByO98z7L.js.map → schmancy-steps-container-Lo4d27n3.js.map} +1 -1
- package/dist/{select-BIOhocL7.js → select-B-zgP_v6.js} +3 -3
- package/dist/{select-BIOhocL7.js.map → select-B-zgP_v6.js.map} +1 -1
- package/dist/{select-DE57Nios.cjs → select-DhEVsWh6.cjs} +2 -2
- package/dist/{select-DE57Nios.cjs.map → select-DhEVsWh6.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-fZYAWGsm.cjs → sheet-BEWq40cN.cjs} +2 -2
- package/dist/{sheet-fZYAWGsm.cjs.map → sheet-BEWq40cN.cjs.map} +1 -1
- package/dist/{sheet-Dh4MLVsU.js → sheet-DDY4pbD4.js} +3 -3
- package/dist/{sheet-Dh4MLVsU.js.map → sheet-DDY4pbD4.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-DVlJoDgU.js → slider--irxEv_B.js} +3 -3
- package/dist/{slider-DVlJoDgU.js.map → slider--irxEv_B.js.map} +1 -1
- package/dist/{slider-CejrdmPF.cjs → slider-De-H5fe8.cjs} +2 -2
- package/dist/{slider-CejrdmPF.cjs.map → slider-De-H5fe8.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-DbTnai_Q.js → spinner-Bl9n09Z5.js} +3 -3
- package/dist/{spinner-DbTnai_Q.js.map → spinner-Bl9n09Z5.js.map} +1 -1
- package/dist/{spinner-DxVJ7QJZ.cjs → spinner-DNz1IjmL.cjs} +2 -2
- package/dist/{spinner-DxVJ7QJZ.cjs.map → spinner-DNz1IjmL.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/surface-BAEUiWcq.cjs +92 -0
- package/dist/surface-BAEUiWcq.cjs.map +1 -0
- package/dist/surface-h9dLHMTm.js +113 -0
- package/dist/surface-h9dLHMTm.js.map +1 -0
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-CqUv1TOC.js → table-CxazXBjI.js} +72 -68
- package/dist/{table-CqUv1TOC.js.map → table-CxazXBjI.js.map} +1 -1
- package/dist/{table-CBhyHINV.cjs → table-Dn07ykGG.cjs} +4 -4
- package/dist/{table-CBhyHINV.cjs.map → table-Dn07ykGG.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-DUo2f_sV.js → tabs-compatibility-B8I0vg7Y.js} +2 -2
- package/dist/{tabs-compatibility-DUo2f_sV.js.map → tabs-compatibility-B8I0vg7Y.js.map} +1 -1
- package/dist/{tabs-compatibility-DPD6jfGF.cjs → tabs-compatibility-BrTxeSS-.cjs} +2 -2
- package/dist/{tabs-compatibility-DPD6jfGF.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-Di7KWye7.js.map → tailwind.mixin-Du4i6vQR.js.map} +1 -1
- package/dist/tailwind.mixin-qyIcoDLk.cjs +2 -0
- package/dist/{tailwind.mixin-Dm5QDZav.cjs.map → tailwind.mixin-qyIcoDLk.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-Dbz18REy.js → textarea-DibCLxC2.js} +2 -2
- package/dist/{textarea-Dbz18REy.js.map → textarea-DibCLxC2.js.map} +1 -1
- package/dist/{textarea-CesFdBkm.cjs → textarea-pMec4Wpg.cjs} +2 -2
- package/dist/{textarea-CesFdBkm.cjs.map → textarea-pMec4Wpg.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-Bt2OV4iu.cjs → theme-button-CG1w_waw.cjs} +2 -2
- package/dist/{theme-button-Bt2OV4iu.cjs.map → theme-button-CG1w_waw.cjs.map} +1 -1
- package/dist/{theme-button-lqbT2_LL.js → theme-button-irLEczd5.js} +2 -2
- package/dist/{theme-button-lqbT2_LL.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-xarFSe8p.js → theme.component-CMM8Xws2.js} +2 -2
- package/dist/{theme.component-xarFSe8p.js.map → theme.component-CMM8Xws2.js.map} +1 -1
- package/dist/{theme.component-BlBaN7d6.cjs → theme.component-CpRuySmd.cjs} +3 -3
- package/dist/{theme.component-BlBaN7d6.cjs.map → theme.component-CpRuySmd.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-DwT_pQrj.js → timezone-DIrmlnD6.js} +3 -3
- package/dist/{timezone-DwT_pQrj.js.map → timezone-DIrmlnD6.js.map} +1 -1
- package/dist/{timezone-VUMRmZaJ.cjs → timezone-n5GflDRe.cjs} +2 -2
- package/dist/{timezone-VUMRmZaJ.cjs.map → timezone-n5GflDRe.cjs.map} +1 -1
- package/dist/{tooltip-Cvoroe7w.cjs → tooltip-0vIcVm5-.cjs} +2 -2
- package/dist/{tooltip-Cvoroe7w.cjs.map → tooltip-0vIcVm5-.cjs.map} +1 -1
- package/dist/{tooltip-BKOHVCMK.js → tooltip-N_B-vsDa.js} +2 -2
- package/dist/{tooltip-BKOHVCMK.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-_FJnHVmP.js → tree-2Hf2X0Hv.js} +2 -2
- package/dist/{tree-_FJnHVmP.js.map → tree-2Hf2X0Hv.js.map} +1 -1
- package/dist/{tree-Cyp2AZ8g.cjs → tree-Q8AMxJxP.cjs} +2 -2
- package/dist/{tree-Cyp2AZ8g.cjs.map → tree-Q8AMxJxP.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-BIm2tOe4.cjs → typewriter-CsL-NfYC.cjs} +2 -2
- package/dist/{typewriter-BIm2tOe4.cjs.map → typewriter-CsL-NfYC.cjs.map} +1 -1
- package/dist/{typewriter-DWfXPBni.js → typewriter-bqbNKczJ.js} +22 -22
- package/dist/{typewriter-DWfXPBni.js.map → typewriter-bqbNKczJ.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DaKLzjFB.js → typography-CbrvouLo.js} +2 -2
- package/dist/{typography-DaKLzjFB.js.map → typography-CbrvouLo.js.map} +1 -1
- package/dist/{typography-OpLt6LNd.cjs → typography-Hlts-hzc.cjs} +2 -2
- package/dist/{typography-OpLt6LNd.cjs.map → typography-Hlts-hzc.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils-BqFGvnN9.cjs +2 -0
- package/dist/utils-BqFGvnN9.cjs.map +1 -0
- package/dist/utils-jduntaQU.js +128 -0
- package/dist/utils-jduntaQU.js.map +1 -0
- package/package.json +13 -14
- package/types/src/area/area.component.d.ts +1 -1
- package/types/src/area/area.service.d.ts +44 -26
- package/types/src/area/index.d.ts +1 -0
- package/types/src/area/utils.d.ts +91 -1
- package/types/src/checkbox/checkbox.d.ts +9 -0
- package/types/src/circular-progress/circular-progress.d.ts +15 -0
- package/types/src/circular-progress/index.d.ts +1 -0
- package/types/src/dialog/dailog.d.ts +8 -0
- package/types/src/dialog/dialog-service.d.ts +1 -0
- package/types/src/index.d.ts +1 -0
- package/types/src/table/table.d.ts +1 -0
- package/dist/area.component-CzFJM7Y4.js +0 -143
- package/dist/area.component-CzFJM7Y4.js.map +0 -1
- package/dist/area.component-WxccFh1z.cjs +0 -8
- package/dist/area.component-WxccFh1z.cjs.map +0 -1
- package/dist/avatar-Bmg5TXj9.cjs.map +0 -1
- package/dist/avatar-CgP1tBZq.js.map +0 -1
- package/dist/date-range-Ca9WLI4Q.js.map +0 -1
- package/dist/dialog-content-9pumpyLD.js.map +0 -1
- package/dist/dialog-content-qj1E8aye.cjs.map +0 -1
- package/dist/surface-BTuzKmT2.cjs +0 -20
- package/dist/surface-BTuzKmT2.cjs.map +0 -1
- package/dist/surface-DXx1bJN4.js +0 -43
- package/dist/surface-DXx1bJN4.js.map +0 -1
- package/dist/tailwind.mixin-Di7KWye7.js +0 -43
- package/dist/tailwind.mixin-Dm5QDZav.cjs +0 -2
package/ai/table.md
CHANGED
|
@@ -50,6 +50,35 @@
|
|
|
50
50
|
</tbody>
|
|
51
51
|
</schmancy-table>
|
|
52
52
|
|
|
53
|
+
// Data Table with programmatic columns and custom sorting
|
|
54
|
+
<schmancy-table
|
|
55
|
+
.columns=${[
|
|
56
|
+
{
|
|
57
|
+
name: 'Name',
|
|
58
|
+
key: 'name',
|
|
59
|
+
sortable: true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'Date Joined',
|
|
63
|
+
key: 'dateJoined',
|
|
64
|
+
sortable: true,
|
|
65
|
+
// Custom sort by Unix timestamp
|
|
66
|
+
value: (item) => new Date(item.dateJoined).getTime()
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'Profile Completion',
|
|
70
|
+
key: 'profile',
|
|
71
|
+
sortable: true,
|
|
72
|
+
// Sort by completion percentage
|
|
73
|
+
value: (item) => item.profile.completionPercentage,
|
|
74
|
+
// Display with custom rendering
|
|
75
|
+
render: (item) => html`${item.profile.completionPercentage}%`
|
|
76
|
+
}
|
|
77
|
+
]}
|
|
78
|
+
.data=${users}
|
|
79
|
+
sortable>
|
|
80
|
+
</schmancy-table>
|
|
81
|
+
|
|
53
82
|
// Table Properties
|
|
54
83
|
striped: boolean // Apply alternating row colors
|
|
55
84
|
bordered: boolean // Add borders to cells
|
|
@@ -60,6 +89,15 @@ sortable: boolean // Enable column sorting
|
|
|
60
89
|
selectable: boolean // Enable row selection
|
|
61
90
|
loading: boolean // Show loading state
|
|
62
91
|
|
|
92
|
+
// Column Configuration Properties (when using programmatic columns)
|
|
93
|
+
name: string // Display name for the column header
|
|
94
|
+
key?: keyof T // Object property to access for this column
|
|
95
|
+
align?: string // Text alignment ('left', 'right', 'center')
|
|
96
|
+
weight?: string // Font weight ('normal', 'bold')
|
|
97
|
+
render?: function // Custom render function for complex content: (item) => TemplateResult
|
|
98
|
+
sortable?: boolean // Whether this column supports sorting
|
|
99
|
+
value?: function // Custom value function for sorting: (item) => any
|
|
100
|
+
|
|
63
101
|
// Row Properties
|
|
64
102
|
selected: boolean // Whether the row is selected
|
|
65
103
|
data: object // Data object for the row
|
|
@@ -105,7 +143,7 @@ data: object // Data object for the row
|
|
|
105
143
|
</tbody>
|
|
106
144
|
</schmancy-table>
|
|
107
145
|
|
|
108
|
-
// Sortable table
|
|
146
|
+
// Sortable table - standard HTML structure
|
|
109
147
|
<schmancy-table
|
|
110
148
|
sortable
|
|
111
149
|
@sort=${(e) => sortData(e.detail.column, e.detail.direction)}>
|
|
@@ -142,6 +180,66 @@ data: object // Data object for the row
|
|
|
142
180
|
</tbody>
|
|
143
181
|
</schmancy-table>
|
|
144
182
|
|
|
183
|
+
// Sortable table - programmatic with custom value functions
|
|
184
|
+
<schmancy-table
|
|
185
|
+
.data=${userData}
|
|
186
|
+
.columns=${[
|
|
187
|
+
{
|
|
188
|
+
name: 'ID',
|
|
189
|
+
key: 'id',
|
|
190
|
+
sortable: true
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: 'User',
|
|
194
|
+
key: 'user',
|
|
195
|
+
sortable: true,
|
|
196
|
+
// Sort by last name for "user" column
|
|
197
|
+
value: (item) => item.user.lastName,
|
|
198
|
+
// Custom render function for complex data
|
|
199
|
+
render: (item) => html`
|
|
200
|
+
<div class="flex items-center">
|
|
201
|
+
<schmancy-avatar src=${item.user.avatar} size="sm"></schmancy-avatar>
|
|
202
|
+
<div class="ml-2">
|
|
203
|
+
<div>${item.user.firstName} ${item.user.lastName}</div>
|
|
204
|
+
<div class="text-sm text-gray-500">${item.user.email}</div>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
`
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'Status',
|
|
211
|
+
key: 'status',
|
|
212
|
+
sortable: true,
|
|
213
|
+
// Sort by status priority (numeric value) but display text
|
|
214
|
+
value: (item) => statusPriorities[item.status] || 0,
|
|
215
|
+
render: (item) => html`
|
|
216
|
+
<schmancy-badge variant=${getStatusVariant(item.status)}>
|
|
217
|
+
${item.status}
|
|
218
|
+
</schmancy-badge>
|
|
219
|
+
`
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'Created',
|
|
223
|
+
key: 'createdAt',
|
|
224
|
+
sortable: true,
|
|
225
|
+
// Sort by timestamp but display formatted date
|
|
226
|
+
value: (item) => new Date(item.createdAt).getTime(),
|
|
227
|
+
render: (item) => formatDate(item.createdAt)
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'Actions',
|
|
231
|
+
render: (item) => html`
|
|
232
|
+
<div class="flex space-x-2">
|
|
233
|
+
<schmancy-icon-button icon="edit" @click=${() => editItem(item)}></schmancy-icon-button>
|
|
234
|
+
<schmancy-icon-button icon="delete" @click=${() => deleteItem(item)}></schmancy-icon-button>
|
|
235
|
+
</div>
|
|
236
|
+
`
|
|
237
|
+
}
|
|
238
|
+
]}
|
|
239
|
+
sortable
|
|
240
|
+
@sort=${(e) => console.log('Sort changed:', e.detail)}>
|
|
241
|
+
</schmancy-table>
|
|
242
|
+
|
|
145
243
|
// Selectable table
|
|
146
244
|
<schmancy-table
|
|
147
245
|
selectable
|
package/ai/teleport.md
ADDED
|
@@ -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
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Theme Button Component
|
|
2
|
+
|
|
3
|
+
A simple, animated button component for theme switching functionality with a rotating palette icon.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<!-- Basic theme button -->
|
|
9
|
+
<schmancy-theme-button></schmancy-theme-button>
|
|
10
|
+
|
|
11
|
+
<!-- In a toolbar -->
|
|
12
|
+
<schmancy-appbar>
|
|
13
|
+
<h1 slot="title">My App</h1>
|
|
14
|
+
<schmancy-theme-button slot="actions"></schmancy-theme-button>
|
|
15
|
+
</schmancy-appbar>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Properties
|
|
19
|
+
|
|
20
|
+
The component inherits all properties from the base button component through `TailwindElement`.
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
### Animated Icon
|
|
25
|
+
The palette icon rotates 360 degrees when clicked:
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
this.color.animate([
|
|
29
|
+
{ transform: 'rotate(0deg)' },
|
|
30
|
+
{ transform: 'rotate(360deg)' }
|
|
31
|
+
], {
|
|
32
|
+
duration: 300
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Native Web Animations
|
|
37
|
+
Uses the Web Animations API for smooth, performant animations without external dependencies.
|
|
38
|
+
|
|
39
|
+
## Examples
|
|
40
|
+
|
|
41
|
+
### In Navigation Bar
|
|
42
|
+
```html
|
|
43
|
+
<nav class="flex items-center justify-between p-4">
|
|
44
|
+
<h1>Brand</h1>
|
|
45
|
+
<div class="flex gap-2">
|
|
46
|
+
<schmancy-theme-button></schmancy-theme-button>
|
|
47
|
+
<schmancy-icon-button>settings</schmancy-icon-button>
|
|
48
|
+
</div>
|
|
49
|
+
</nav>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### With Custom Theme Logic
|
|
53
|
+
```html
|
|
54
|
+
<schmancy-theme-button @click="${() => {
|
|
55
|
+
// Toggle between themes
|
|
56
|
+
const currentTheme = document.querySelector('schmancy-theme');
|
|
57
|
+
currentTheme.scheme = currentTheme.scheme === 'light' ? 'dark' : 'light';
|
|
58
|
+
}}"></schmancy-theme-button>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### In a Settings Panel
|
|
62
|
+
```html
|
|
63
|
+
<schmancy-card>
|
|
64
|
+
<h3 slot="header">Appearance Settings</h3>
|
|
65
|
+
|
|
66
|
+
<div class="space-y-4">
|
|
67
|
+
<div class="flex items-center justify-between">
|
|
68
|
+
<span>Theme</span>
|
|
69
|
+
<schmancy-theme-button></schmancy-theme-button>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<schmancy-divider></schmancy-divider>
|
|
73
|
+
|
|
74
|
+
<schmancy-select label="Color Scheme">
|
|
75
|
+
<schmancy-option value="auto">Auto</schmancy-option>
|
|
76
|
+
<schmancy-option value="light">Light</schmancy-option>
|
|
77
|
+
<schmancy-option value="dark">Dark</schmancy-option>
|
|
78
|
+
</schmancy-select>
|
|
79
|
+
</div>
|
|
80
|
+
</schmancy-card>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### With Tooltip
|
|
84
|
+
```html
|
|
85
|
+
<schmancy-tooltip content="Change theme">
|
|
86
|
+
<schmancy-theme-button></schmancy-theme-button>
|
|
87
|
+
</schmancy-tooltip>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Implementation Details
|
|
91
|
+
|
|
92
|
+
The component structure:
|
|
93
|
+
- Uses `schmancy-button` with text variant
|
|
94
|
+
- Contains `schmancy-icon` with palette icon
|
|
95
|
+
- Applies rotation animation on click
|
|
96
|
+
- Maintains reference to icon element via `@query`
|
|
97
|
+
|
|
98
|
+
## Styling
|
|
99
|
+
|
|
100
|
+
Since it uses the base button component, all button styling applies:
|
|
101
|
+
|
|
102
|
+
```css
|
|
103
|
+
/* Custom positioning in toolbar */
|
|
104
|
+
schmancy-theme-button {
|
|
105
|
+
margin-left: auto;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Adjust icon size */
|
|
109
|
+
schmancy-theme-button schmancy-icon {
|
|
110
|
+
font-size: 1.25rem;
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Animation Customization
|
|
115
|
+
|
|
116
|
+
You can extend the animation behavior:
|
|
117
|
+
|
|
118
|
+
```javascript
|
|
119
|
+
// Custom animation options
|
|
120
|
+
{
|
|
121
|
+
duration: 300,
|
|
122
|
+
easing: 'ease-out',
|
|
123
|
+
fill: 'forwards' // Keep final rotation state
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Integration with Theme System
|
|
128
|
+
|
|
129
|
+
While the button provides the UI, you'll need to implement the theme switching logic:
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
// Example theme toggle implementation
|
|
133
|
+
class MyApp extends LitElement {
|
|
134
|
+
toggleTheme() {
|
|
135
|
+
const theme = this.shadowRoot.querySelector('schmancy-theme');
|
|
136
|
+
const themes = ['#6750A4', '#00695C', '#D32F2F', '#1976D2'];
|
|
137
|
+
const currentIndex = themes.indexOf(theme.color);
|
|
138
|
+
theme.color = themes[(currentIndex + 1) % themes.length];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
render() {
|
|
142
|
+
return html`
|
|
143
|
+
<schmancy-theme>
|
|
144
|
+
<schmancy-theme-button @click="${this.toggleTheme}">
|
|
145
|
+
</schmancy-theme-button>
|
|
146
|
+
</schmancy-theme>
|
|
147
|
+
`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Best Practices
|
|
153
|
+
|
|
154
|
+
1. **Placement**: Put in consistent location (usually top-right)
|
|
155
|
+
2. **Feedback**: The rotation provides immediate feedback
|
|
156
|
+
3. **Persistence**: Save theme preference to localStorage
|
|
157
|
+
4. **Accessibility**: Include proper ARIA labels
|
|
158
|
+
5. **Mobile**: Ensure adequate touch target size
|
|
159
|
+
|
|
160
|
+
## Related Components
|
|
161
|
+
|
|
162
|
+
- [Theme](./theme.md) - The theming system
|
|
163
|
+
- [Button](./button.md) - Base button component
|
|
164
|
+
- [Icon](./icons.md) - Icon system
|
|
165
|
+
- [Tooltip](./tooltip.md) - Help text
|
|
166
|
+
|
|
167
|
+
## Use Cases
|
|
168
|
+
|
|
169
|
+
1. **App Headers**: Quick theme toggle in navigation
|
|
170
|
+
2. **Settings Pages**: Part of appearance settings
|
|
171
|
+
3. **Demos**: Showcase theme capabilities
|
|
172
|
+
4. **User Preferences**: Personalization options
|
|
173
|
+
5. **Accessibility**: High contrast mode switching
|