@mhmo91/schmancy 0.4.8 → 0.4.10
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/button.md +6 -3
- package/ai/code-highlight.md +239 -0
- package/ai/countries.md +270 -0
- package/ai/dialog.md +22 -3
- package/ai/directives.md +237 -0
- package/ai/input.md +99 -55
- package/ai/payment-card-form.md +241 -0
- package/ai/surface.md +1 -1
- package/ai/timezone.md +275 -0
- package/ai/typography.md +78 -43
- package/dist/ai/button.md +6 -3
- package/dist/ai/code-highlight.md +239 -0
- package/dist/ai/countries.md +270 -0
- package/dist/ai/dialog.md +22 -3
- package/dist/ai/directives.md +237 -0
- package/dist/ai/input.md +99 -55
- package/dist/ai/payment-card-form.md +241 -0
- package/dist/ai/surface.md +1 -1
- package/dist/ai/timezone.md +275 -0
- package/dist/ai/typography.md +78 -43
- package/dist/{animated-text-BqZjMyzb.js → animated-text-Be02uXuq.js} +3 -3
- package/dist/{animated-text-BqZjMyzb.js.map → animated-text-Be02uXuq.js.map} +1 -1
- package/dist/{animated-text-CgY-L1nI.cjs → animated-text-Dh_Ony1b.cjs} +2 -2
- package/dist/{animated-text-CgY-L1nI.cjs.map → animated-text-Dh_Ony1b.cjs.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-B7U96CpD.js → area.component-CVYJtXrI.js} +3 -3
- package/dist/{area.component-B7U96CpD.js.map → area.component-CVYJtXrI.js.map} +1 -1
- package/dist/{area.component-Zbs-bAJV.cjs → area.component-DTc1TOLd.cjs} +2 -2
- package/dist/{area.component-Zbs-bAJV.cjs.map → area.component-DTc1TOLd.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-qK00SJRP.cjs → autocomplete-CzTNaIqf.cjs} +2 -2
- package/dist/{autocomplete-qK00SJRP.cjs.map → autocomplete-CzTNaIqf.cjs.map} +1 -1
- package/dist/{autocomplete-DIUsdT73.js → autocomplete-D1bwPNoy.js} +3 -3
- package/dist/{autocomplete-DIUsdT73.js.map → autocomplete-D1bwPNoy.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-BMzBsIWs.cjs → avatar-CFu-31B1.cjs} +2 -2
- package/dist/{avatar-BMzBsIWs.cjs.map → avatar-CFu-31B1.cjs.map} +1 -1
- package/dist/{avatar-DUPqOrZp.js → avatar-D35JpOv5.js} +45 -45
- package/dist/{avatar-DUPqOrZp.js.map → avatar-D35JpOv5.js.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-By-PBLw8.js → boat-6nw0fphH.js} +2 -2
- package/dist/{boat-By-PBLw8.js.map → boat-6nw0fphH.js.map} +1 -1
- package/dist/{boat-DUU675NX.cjs → boat-De0k6DJ6.cjs} +2 -2
- package/dist/{boat-DUU675NX.cjs.map → boat-De0k6DJ6.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.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-f7BewP4u.cjs → checkbox-Xr-OTKiq.cjs} +2 -2
- package/dist/{checkbox-f7BewP4u.cjs.map → checkbox-Xr-OTKiq.cjs.map} +1 -1
- package/dist/{checkbox-_WevqQDR.js → checkbox-ZW_jmRBP.js} +2 -2
- package/dist/{checkbox-_WevqQDR.js.map → checkbox-ZW_jmRBP.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DiDm29N_.js → chips-DFam160B.js} +3 -3
- package/dist/{chips-DiDm29N_.js.map → chips-DFam160B.js.map} +1 -1
- package/dist/{chips-D1QElds4.cjs → chips-DwvB_B3m.cjs} +2 -2
- package/dist/{chips-D1QElds4.cjs.map → chips-DwvB_B3m.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/{circular-progress-BAlic8HY.js → circular-progress-BARPJm-e.js} +3 -3
- package/dist/{circular-progress-BAlic8HY.js.map → circular-progress-BARPJm-e.js.map} +1 -1
- package/dist/{circular-progress-CfPyDLX6.cjs → circular-progress-BDZFB3WR.cjs} +2 -2
- package/dist/{circular-progress-CfPyDLX6.cjs.map → circular-progress-BDZFB3WR.cjs.map} +1 -1
- package/dist/circular-progress.cjs +1 -1
- package/dist/circular-progress.js +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-BiVj9uxF.js → code-preview-BxswKcO8.js} +2 -2
- package/dist/{code-preview-BiVj9uxF.js.map → code-preview-BxswKcO8.js.map} +1 -1
- package/dist/{code-preview-DtvCblTa.cjs → code-preview-CFnSKSqn.cjs} +2 -2
- package/dist/{code-preview-DtvCblTa.cjs.map → code-preview-CFnSKSqn.cjs.map} +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-Cq8Wdd8b.cjs +131 -0
- package/dist/date-range-Cq8Wdd8b.cjs.map +1 -0
- package/dist/date-range-Fij9AQth.js +638 -0
- package/dist/date-range-Fij9AQth.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-KEyQxDNp.cjs → delay-YfksbdSk.cjs} +2 -2
- package/dist/{delay-KEyQxDNp.cjs.map → delay-YfksbdSk.cjs.map} +1 -1
- package/dist/{delay-BdXEKapp.js → delay-aA1TyZTr.js} +2 -2
- package/dist/{delay-BdXEKapp.js.map → delay-aA1TyZTr.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-D3sFNuVs.js → dialog-content-DpotaqHz.js} +3 -3
- package/dist/{dialog-content-D3sFNuVs.js.map → dialog-content-DpotaqHz.js.map} +1 -1
- package/dist/{dialog-content-D5YTttrK.cjs → dialog-content-NyJfG7nL.cjs} +2 -2
- package/dist/{dialog-content-D5YTttrK.cjs.map → dialog-content-NyJfG7nL.cjs.map} +1 -1
- package/dist/{dialog-service-BgqAlT7T.cjs → dialog-service-BZZK8N6A.cjs} +2 -2
- package/dist/dialog-service-BZZK8N6A.cjs.map +1 -0
- package/dist/dialog-service-DFMlRcXf.js +128 -0
- package/dist/dialog-service-DFMlRcXf.js.map +1 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/{divider-CNXiMvWd.js → divider-CEMmRD_e.js} +3 -3
- package/dist/{divider-CNXiMvWd.js.map → divider-CEMmRD_e.js.map} +1 -1
- package/dist/{divider-CDz3pUAy.cjs → divider-CMM91UNF.cjs} +2 -2
- package/dist/{divider-CDz3pUAy.cjs.map → divider-CMM91UNF.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-jlq_cqLS.cjs → dropdown-content-CUn_E7cR.cjs} +2 -2
- package/dist/{dropdown-content-jlq_cqLS.cjs.map → dropdown-content-CUn_E7cR.cjs.map} +1 -1
- package/dist/{dropdown-content-CVz6zPSO.js → dropdown-content-Cw5wN3oE.js} +3 -3
- package/dist/{dropdown-content-CVz6zPSO.js.map → dropdown-content-Cw5wN3oE.js.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-DFatBgot.cjs → flex-B9AdlerG.cjs} +2 -2
- package/dist/{flex-DFatBgot.cjs.map → flex-B9AdlerG.cjs.map} +1 -1
- package/dist/{flex-TjhbDSMX.js → flex-ChnKQLCI.js} +2 -2
- package/dist/{flex-TjhbDSMX.js.map → flex-ChnKQLCI.js.map} +1 -1
- package/dist/{form-ClDdYqke.cjs → form-BdGYvvVv.cjs} +2 -2
- package/dist/{form-ClDdYqke.cjs.map → form-BdGYvvVv.cjs.map} +1 -1
- package/dist/{form-D-auKn-K.js → form-DNXmZlmc.js} +2 -2
- package/dist/{form-D-auKn-K.js.map → form-DNXmZlmc.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-BfY2ZJUE.js → icon-BzxYzucF.js} +2 -2
- package/dist/{icon-BfY2ZJUE.js.map → icon-BzxYzucF.js.map} +1 -1
- package/dist/{icon-D2xGQiZb.cjs → icon-CiYXCpzk.cjs} +2 -2
- package/dist/{icon-D2xGQiZb.cjs.map → icon-CiYXCpzk.cjs.map} +1 -1
- package/dist/{icon-button-BUkdhu_-.cjs → icon-button-CVF8ZGrd.cjs} +2 -2
- package/dist/{icon-button-BUkdhu_-.cjs.map → icon-button-CVF8ZGrd.cjs.map} +1 -1
- package/dist/{icon-button-yKwaljg0.js → icon-button-VqejfzxG.js} +3 -3
- package/dist/{icon-button-yKwaljg0.js.map → icon-button-VqejfzxG.js.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 +43 -43
- package/dist/input-DfBGrUet.cjs +122 -0
- package/dist/input-DfBGrUet.cjs.map +1 -0
- package/dist/input-d4jaMv22.js +487 -0
- package/dist/input-d4jaMv22.js.map +1 -0
- 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-BO9C13wk.cjs → list-DN2eHabm.cjs} +2 -2
- package/dist/{list-BO9C13wk.cjs.map → list-DN2eHabm.cjs.map} +1 -1
- package/dist/{list-CHZKII-L.js → list-L1m51qC0.js} +2 -2
- package/dist/{list-CHZKII-L.js.map → list-L1m51qC0.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-CUibxXWX.cjs → litElement.mixin-CejONOpd.cjs} +2 -2
- package/dist/{litElement.mixin-CUibxXWX.cjs.map → litElement.mixin-CejONOpd.cjs.map} +1 -1
- package/dist/{litElement.mixin-5RC72TVS.js → litElement.mixin-D-SDs-Ez.js} +2 -2
- package/dist/{litElement.mixin-5RC72TVS.js.map → litElement.mixin-D-SDs-Ez.js.map} +1 -1
- package/dist/{media-4arP4Xi0.js → media-C0AR69S2.js} +2 -2
- package/dist/{media-4arP4Xi0.js.map → media-C0AR69S2.js.map} +1 -1
- package/dist/{media-v2LZA3zQ.cjs → media-yXym3iTa.cjs} +2 -2
- package/dist/{media-v2LZA3zQ.cjs.map → media-yXym3iTa.cjs.map} +1 -1
- package/dist/{menu-DvcxRQrY.js → menu-Bhh6qxR6.js} +3 -3
- package/dist/{menu-DvcxRQrY.js.map → menu-Bhh6qxR6.js.map} +1 -1
- package/dist/{menu-C-ZpBMON.cjs → menu-CKDW29ZR.cjs} +2 -2
- package/dist/{menu-C-ZpBMON.cjs.map → menu-CKDW29ZR.cjs.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-CcapAF2G.js → notification-service-CG4XTrXU.js} +3 -3
- package/dist/{notification-service-CcapAF2G.js.map → notification-service-CG4XTrXU.js.map} +1 -1
- package/dist/{notification-service-BXTqvkWg.cjs → notification-service-CRbqdLm_.cjs} +2 -2
- package/dist/{notification-service-BXTqvkWg.cjs.map → notification-service-CRbqdLm_.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-xSW3D1j5.js → option-Cj25fsD1.js} +2 -2
- package/dist/{option-xSW3D1j5.js.map → option-Cj25fsD1.js.map} +1 -1
- package/dist/{option-Cj3xNzQG.cjs → option-DFNHF3bL.cjs} +2 -2
- package/dist/{option-Cj3xNzQG.cjs.map → option-DFNHF3bL.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-CdNQkQa5.cjs → payment-card-form-CEANJmNw.cjs} +2 -2
- package/dist/{payment-card-form-CdNQkQa5.cjs.map → payment-card-form-CEANJmNw.cjs.map} +1 -1
- package/dist/{payment-card-form-B-W0YXS5.js → payment-card-form-YzyxteTK.js} +3 -3
- package/dist/{payment-card-form-B-W0YXS5.js.map → payment-card-form-YzyxteTK.js.map} +1 -1
- package/dist/{radio-button-WeQklCIj.cjs → radio-button-BVeem3E9.cjs} +2 -2
- package/dist/{radio-button-WeQklCIj.cjs.map → radio-button-BVeem3E9.cjs.map} +1 -1
- package/dist/{radio-button-CNrcOMLm.js → radio-button-CBcYZCqv.js} +2 -2
- package/dist/{radio-button-CNrcOMLm.js.map → radio-button-CBcYZCqv.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-kh5hz8Q8.cjs → schmancy-steps-container-B-Bvr-wZ.cjs} +2 -2
- package/dist/{schmancy-steps-container-kh5hz8Q8.cjs.map → schmancy-steps-container-B-Bvr-wZ.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-DTR_ppqJ.js → schmancy-steps-container-BACX3hp6.js} +2 -2
- package/dist/{schmancy-steps-container-DTR_ppqJ.js.map → schmancy-steps-container-BACX3hp6.js.map} +1 -1
- package/dist/{select-D6OdooZd.cjs → select-Cr15D48_.cjs} +2 -2
- package/dist/{select-D6OdooZd.cjs.map → select-Cr15D48_.cjs.map} +1 -1
- package/dist/{select-BeStY5QU.js → select-IgXxVwZQ.js} +3 -3
- package/dist/{select-BeStY5QU.js.map → select-IgXxVwZQ.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-DurXVAka.js → sheet-9m-LkKNU.js} +4 -4
- package/dist/{sheet-DurXVAka.js.map → sheet-9m-LkKNU.js.map} +1 -1
- package/dist/{sheet-BHdCyBYA.cjs → sheet-u1RXiD4G.cjs} +2 -2
- package/dist/{sheet-BHdCyBYA.cjs.map → sheet-u1RXiD4G.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{slider-eKHfEAqk.cjs → slider-BFJ0OVq5.cjs} +2 -2
- package/dist/{slider-eKHfEAqk.cjs.map → slider-BFJ0OVq5.cjs.map} +1 -1
- package/dist/{slider-CcOPTwfV.js → slider-BvOKAD4l.js} +3 -3
- package/dist/{slider-CcOPTwfV.js.map → slider-BvOKAD4l.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-0BTyqnFH.cjs → spinner-CRWcQJjQ.cjs} +2 -2
- package/dist/{spinner-0BTyqnFH.cjs.map → spinner-CRWcQJjQ.cjs.map} +1 -1
- package/dist/{spinner-BcaOyZIW.js → spinner-jaFB6wer.js} +3 -3
- package/dist/{spinner-BcaOyZIW.js.map → spinner-jaFB6wer.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-DhTA5nKg.cjs → surface-CTlwMC6K.cjs} +2 -2
- package/dist/{surface-DhTA5nKg.cjs.map → surface-CTlwMC6K.cjs.map} +1 -1
- package/dist/{surface-XqJoAcEI.js → surface-D7X23FXb.js} +2 -2
- package/dist/{surface-XqJoAcEI.js.map → surface-D7X23FXb.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-DPfOXBUJ.cjs → table-0HYVgRpO.cjs} +2 -2
- package/dist/{table-DPfOXBUJ.cjs.map → table-0HYVgRpO.cjs.map} +1 -1
- package/dist/{table-Dy5Fqu4G.js → table-Dwrox4AT.js} +2 -2
- package/dist/{table-Dy5Fqu4G.js.map → table-Dwrox4AT.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-BqSkFV08.js → tabs-compatibility-CHTrE420.js} +2 -2
- package/dist/{tabs-compatibility-BqSkFV08.js.map → tabs-compatibility-CHTrE420.js.map} +1 -1
- package/dist/{tabs-compatibility-TPaYG7ev.cjs → tabs-compatibility-DFaq5_66.cjs} +2 -2
- package/dist/{tabs-compatibility-TPaYG7ev.cjs.map → tabs-compatibility-DFaq5_66.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-Dx35wOig.js +43 -0
- package/dist/{tailwind.mixin-DpiTmETl.js.map → tailwind.mixin-Dx35wOig.js.map} +1 -1
- package/dist/tailwind.mixin-xwSbeHSt.cjs +2 -0
- package/dist/{tailwind.mixin-C6mrbvH3.cjs.map → tailwind.mixin-xwSbeHSt.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-Dy7B8B0d.cjs → textarea-D7NLGUQL.cjs} +2 -2
- package/dist/{textarea-Dy7B8B0d.cjs.map → textarea-D7NLGUQL.cjs.map} +1 -1
- package/dist/{textarea-Ba8gRDPS.js → textarea-Dx-DzkDe.js} +2 -2
- package/dist/{textarea-Ba8gRDPS.js.map → textarea-Dx-DzkDe.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-Bnm7IL1u.cjs → theme-button-25FKBtFN.cjs} +2 -2
- package/dist/{theme-button-Bnm7IL1u.cjs.map → theme-button-25FKBtFN.cjs.map} +1 -1
- package/dist/{theme-button-COwSZ83Y.js → theme-button-C97XGkCl.js} +2 -2
- package/dist/{theme-button-COwSZ83Y.js.map → theme-button-C97XGkCl.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-BV_e_mXY.js → theme.component-BAA4DyC6.js} +2 -2
- package/dist/{theme.component-BV_e_mXY.js.map → theme.component-BAA4DyC6.js.map} +1 -1
- package/dist/{theme.component-UBy29B7c.cjs → theme.component-DIXxdhcR.cjs} +2 -2
- package/dist/{theme.component-UBy29B7c.cjs.map → theme.component-DIXxdhcR.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-DBxPtZan.cjs → timezone-BWn9DNZY.cjs} +2 -2
- package/dist/{timezone-DBxPtZan.cjs.map → timezone-BWn9DNZY.cjs.map} +1 -1
- package/dist/{timezone-DEhkif2j.js → timezone-BurrHk00.js} +3 -3
- package/dist/{timezone-DEhkif2j.js.map → timezone-BurrHk00.js.map} +1 -1
- package/dist/{tooltip-D0coQKih.js → tooltip-Dy5bvLg8.js} +2 -2
- package/dist/{tooltip-D0coQKih.js.map → tooltip-Dy5bvLg8.js.map} +1 -1
- package/dist/{tooltip-CTBMN8M6.cjs → tooltip-dz3rb8at.cjs} +2 -2
- package/dist/{tooltip-CTBMN8M6.cjs.map → tooltip-dz3rb8at.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-Zy0XMFKh.js → tree-DzHOYcn8.js} +2 -2
- package/dist/{tree-Zy0XMFKh.js.map → tree-DzHOYcn8.js.map} +1 -1
- package/dist/{tree-Co4Ithrh.cjs → tree-z1EoelBs.cjs} +2 -2
- package/dist/{tree-Co4Ithrh.cjs.map → tree-z1EoelBs.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-C0InniFB.js → typewriter-BiBJSC2J.js} +4 -4
- package/dist/{typewriter-C0InniFB.js.map → typewriter-BiBJSC2J.js.map} +1 -1
- package/dist/{typewriter-soteXIt4.cjs → typewriter-D_bqiukY.cjs} +2 -2
- package/dist/{typewriter-soteXIt4.cjs.map → typewriter-D_bqiukY.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-Bw9baiV3.cjs → typography-BLenYAmX.cjs} +2 -2
- package/dist/{typography-Bw9baiV3.cjs.map → typography-BLenYAmX.cjs.map} +1 -1
- package/dist/{typography-CeTZ2VqE.js → typography-DtpDTIi7.js} +2 -2
- package/dist/{typography-CeTZ2VqE.js.map → typography-DtpDTIi7.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/dist/date-range-BPVaXilO.cjs +0 -117
- package/dist/date-range-BPVaXilO.cjs.map +0 -1
- package/dist/date-range-DN0v_ykN.js +0 -609
- package/dist/date-range-DN0v_ykN.js.map +0 -1
- package/dist/dialog-service-BgqAlT7T.cjs.map +0 -1
- package/dist/dialog-service-CnjZCTMj.js +0 -127
- package/dist/dialog-service-CnjZCTMj.js.map +0 -1
- package/dist/input-B3GMd-FZ.js +0 -363
- package/dist/input-B3GMd-FZ.js.map +0 -1
- package/dist/input-By2O_8YL.cjs +0 -111
- package/dist/input-By2O_8YL.cjs.map +0 -1
- package/dist/tailwind.mixin-C6mrbvH3.cjs +0 -2
- package/dist/tailwind.mixin-DpiTmETl.js +0 -43
package/ai/directives.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Schmancy Directives - AI Reference
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import { ripple, color, height, visibility } from '@mhmo91/schmancy/directives'
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Directives Overview
|
|
10
|
+
|
|
11
|
+
Lit directives that add common UI behaviors and styling capabilities to any element.
|
|
12
|
+
|
|
13
|
+
## API
|
|
14
|
+
|
|
15
|
+
### Ripple Directive
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// Add Material Design ripple effect to any element
|
|
19
|
+
<div ${ripple()}></div>
|
|
20
|
+
|
|
21
|
+
// Ripple automatically triggers on click
|
|
22
|
+
// Uses theme color: var(--schmancy-sys-color-surface-high)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Color Directive
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// Apply dynamic colors to elements
|
|
29
|
+
<div ${color({
|
|
30
|
+
bgColor?: string, // Background color
|
|
31
|
+
color?: string // Text color
|
|
32
|
+
})}></div>
|
|
33
|
+
|
|
34
|
+
// Examples
|
|
35
|
+
<div ${color({ bgColor: '#ff0000' })}></div>
|
|
36
|
+
<div ${color({ color: 'blue' })}></div>
|
|
37
|
+
<div ${color({ bgColor: 'var(--schmancy-sys-color-primary)', color: 'white' })}></div>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Height Directive
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// Dynamically set element height
|
|
44
|
+
<div ${height(value: string | number)}></div>
|
|
45
|
+
|
|
46
|
+
// Examples
|
|
47
|
+
<div ${height(200)}></div> // 200px
|
|
48
|
+
<div ${height('50vh')}></div> // 50% viewport height
|
|
49
|
+
<div ${height('calc(100% - 64px)')}></div> // Calculated height
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Visibility Directive
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// Control element visibility
|
|
56
|
+
<div ${visibility(isVisible: boolean)}></div>
|
|
57
|
+
|
|
58
|
+
// When false, sets display: none
|
|
59
|
+
// When true, removes display style
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Examples
|
|
63
|
+
|
|
64
|
+
### Basic Usage
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// Button with ripple effect
|
|
68
|
+
<button ${ripple()} class="px-4 py-2 rounded">
|
|
69
|
+
Click Me
|
|
70
|
+
</button>
|
|
71
|
+
|
|
72
|
+
// Colored container
|
|
73
|
+
<div ${color({ bgColor: 'var(--schmancy-sys-color-primary-container)' })} class="p-4">
|
|
74
|
+
Primary Container
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
// Conditional visibility
|
|
78
|
+
<div ${visibility(showContent)} class="alert">
|
|
79
|
+
This content is conditionally visible
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
// Dynamic height
|
|
83
|
+
<div ${height(collapsed ? 0 : 'auto')} class="transition-all">
|
|
84
|
+
Collapsible content
|
|
85
|
+
</div>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Combined Directives
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// Interactive card with multiple directives
|
|
92
|
+
<div
|
|
93
|
+
${ripple()}
|
|
94
|
+
${color({ bgColor: 'var(--schmancy-sys-color-surface-container)' })}
|
|
95
|
+
${visibility(isActive)}
|
|
96
|
+
class="p-4 rounded-lg cursor-pointer"
|
|
97
|
+
@click=${handleClick}>
|
|
98
|
+
Interactive Card
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
// Animated drawer
|
|
102
|
+
<div
|
|
103
|
+
${height(isOpen ? '300px' : '0')}
|
|
104
|
+
${visibility(isOpen)}
|
|
105
|
+
class="transition-all duration-300 overflow-hidden">
|
|
106
|
+
Drawer Content
|
|
107
|
+
</div>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Real-World Examples
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Custom button component
|
|
114
|
+
render() {
|
|
115
|
+
return html`
|
|
116
|
+
<button
|
|
117
|
+
${ripple()}
|
|
118
|
+
${color({
|
|
119
|
+
bgColor: this.variant === 'primary'
|
|
120
|
+
? 'var(--schmancy-sys-color-primary)'
|
|
121
|
+
: 'var(--schmancy-sys-color-surface-container)'
|
|
122
|
+
})}
|
|
123
|
+
class="px-4 py-2 rounded-full relative overflow-hidden"
|
|
124
|
+
?disabled=${this.disabled}>
|
|
125
|
+
<slot></slot>
|
|
126
|
+
</button>
|
|
127
|
+
`
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Expandable panel
|
|
131
|
+
render() {
|
|
132
|
+
return html`
|
|
133
|
+
<div class="border rounded-lg overflow-hidden">
|
|
134
|
+
<div
|
|
135
|
+
${ripple()}
|
|
136
|
+
class="p-4 cursor-pointer relative"
|
|
137
|
+
@click=${() => this.expanded = !this.expanded}>
|
|
138
|
+
<schmancy-typography type="title" token="md">
|
|
139
|
+
Panel Header
|
|
140
|
+
</schmancy-typography>
|
|
141
|
+
</div>
|
|
142
|
+
<div
|
|
143
|
+
${height(this.expanded ? 'auto' : '0')}
|
|
144
|
+
class="transition-all duration-300">
|
|
145
|
+
<div class="p-4">
|
|
146
|
+
Panel content goes here...
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
`
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Theme-aware container
|
|
154
|
+
render() {
|
|
155
|
+
const isDark = this.theme === 'dark'
|
|
156
|
+
return html`
|
|
157
|
+
<div
|
|
158
|
+
${color({
|
|
159
|
+
bgColor: isDark
|
|
160
|
+
? 'var(--schmancy-sys-color-surface-dim)'
|
|
161
|
+
: 'var(--schmancy-sys-color-surface-bright)',
|
|
162
|
+
color: 'var(--schmancy-sys-color-on-surface)'
|
|
163
|
+
})}
|
|
164
|
+
class="p-6 rounded-lg">
|
|
165
|
+
<slot></slot>
|
|
166
|
+
</div>
|
|
167
|
+
`
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Implementation Details
|
|
172
|
+
|
|
173
|
+
### Ripple Directive
|
|
174
|
+
- Creates span element with ripple animation
|
|
175
|
+
- Calculates position relative to click coordinates
|
|
176
|
+
- Auto-removes previous ripple before adding new one
|
|
177
|
+
- Uses CSS keyframe animation (600ms duration)
|
|
178
|
+
- Scales from 0 to 4x size while fading out
|
|
179
|
+
|
|
180
|
+
### Color Directive
|
|
181
|
+
- Directly sets style.backgroundColor and style.color
|
|
182
|
+
- Accepts any valid CSS color value
|
|
183
|
+
- Supports CSS variables
|
|
184
|
+
- Updates immediately on value change
|
|
185
|
+
|
|
186
|
+
### Height Directive
|
|
187
|
+
- Sets style.height property
|
|
188
|
+
- Accepts numbers (converted to px) or strings
|
|
189
|
+
- Useful for animations and transitions
|
|
190
|
+
- Works with calc() expressions
|
|
191
|
+
|
|
192
|
+
### Visibility Directive
|
|
193
|
+
- Controls display property
|
|
194
|
+
- When false: display = 'none'
|
|
195
|
+
- When true: removes display style
|
|
196
|
+
- Preserves other display values
|
|
197
|
+
|
|
198
|
+
## Best Practices
|
|
199
|
+
|
|
200
|
+
1. **Ripple Usage**: Best on interactive elements (buttons, cards, list items)
|
|
201
|
+
2. **Color Variables**: Prefer theme CSS variables over hardcoded colors
|
|
202
|
+
3. **Height Animations**: Combine with CSS transitions for smooth effects
|
|
203
|
+
4. **Visibility**: Use for simple show/hide; consider v-show for more control
|
|
204
|
+
5. **Performance**: Directives are lightweight but avoid excessive updates
|
|
205
|
+
|
|
206
|
+
## Common Pitfalls
|
|
207
|
+
|
|
208
|
+
- **Ripple Overflow**: Parent element needs `position: relative` and `overflow: hidden`
|
|
209
|
+
- **Color Specificity**: Inline styles from color directive override CSS classes
|
|
210
|
+
- **Height Auto**: Transitioning to/from 'auto' requires special handling
|
|
211
|
+
- **Visibility vs Display**: Visibility directive uses display, not visibility property
|
|
212
|
+
|
|
213
|
+
## Related Components
|
|
214
|
+
|
|
215
|
+
- **[Button](./button.md)**: Could use ripple directive
|
|
216
|
+
- **[Card](./card.md)**: Interactive cards benefit from ripple
|
|
217
|
+
- **[Surface](./surface.md)**: Color directive for dynamic theming
|
|
218
|
+
- **[Theme](./theme.md)**: Use theme variables with color directive
|
|
219
|
+
|
|
220
|
+
## TypeScript Types
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
// Ripple directive
|
|
224
|
+
ripple(): DirectiveResult
|
|
225
|
+
|
|
226
|
+
// Color directive
|
|
227
|
+
color(config: {
|
|
228
|
+
bgColor?: string;
|
|
229
|
+
color?: string;
|
|
230
|
+
}): DirectiveResult
|
|
231
|
+
|
|
232
|
+
// Height directive
|
|
233
|
+
height(value: string | number): DirectiveResult
|
|
234
|
+
|
|
235
|
+
// Visibility directive
|
|
236
|
+
visibility(isVisible: boolean): DirectiveResult
|
|
237
|
+
```
|
package/ai/input.md
CHANGED
|
@@ -3,55 +3,54 @@
|
|
|
3
3
|
```js
|
|
4
4
|
// Text Input
|
|
5
5
|
<schmancy-input
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
id?="custom-id" // Auto-generated if not provided
|
|
7
|
+
name="field-name" // Form field name
|
|
8
|
+
label="Field Label" // Label text
|
|
9
|
+
value="initial value" // Input value
|
|
10
|
+
type="text|password|email|number|tel|url|search|date|time|datetime-local" // Input type
|
|
11
|
+
placeholder="Placeholder text" // Placeholder text
|
|
12
|
+
hint?="Helper text" // Helper text below input
|
|
13
|
+
align?="left|center|right" // Text alignment (default: "left")
|
|
14
|
+
required? // Required field
|
|
15
|
+
disabled? // Disabled state
|
|
16
|
+
readonly? // Read-only state
|
|
17
|
+
clickable? // Show pointer cursor when readonly
|
|
18
|
+
error? // Error state (boolean)
|
|
19
|
+
autofocus? // Auto-focus on render
|
|
20
|
+
spellcheck? // Enable spellcheck
|
|
21
|
+
inputmode?="none|text|tel|url|email|numeric|decimal|search" // Virtual keyboard hint
|
|
22
|
+
autocomplete?="off|on|name|email|tel|etc" // Autofill hints
|
|
23
|
+
pattern?="regex" // Validation pattern
|
|
24
|
+
minlength?="number" // Min character length
|
|
25
|
+
maxlength?="number" // Max character length
|
|
26
|
+
min?="number|date" // Min value (number/date)
|
|
27
|
+
max?="number|date" // Max value (number/date)
|
|
28
|
+
step?="number|any" // Step increment
|
|
29
|
+
tabIndex?="number" // Tab order
|
|
30
|
+
@input=${handleInput} // Every keystroke
|
|
31
|
+
@change=${handleChange} // On blur/change
|
|
32
|
+
@enter=${handleEnter} // Enter key pressed
|
|
33
|
+
@focus=${handleFocus} // Focus event
|
|
34
|
+
@blur=${handleBlur}> // Blur event
|
|
21
35
|
</schmancy-input>
|
|
22
36
|
|
|
23
|
-
// Input v2 (enhanced version with formatting and validation)
|
|
24
|
-
<schmancy-input-v2
|
|
25
|
-
name="field-name"
|
|
26
|
-
label="Field Label"
|
|
27
|
-
value="initial value"
|
|
28
|
-
type="text|password|email|number|tel|url|search|date"
|
|
29
|
-
placeholder="Placeholder text"
|
|
30
|
-
required?
|
|
31
|
-
disabled?
|
|
32
|
-
readonly?
|
|
33
|
-
error="Error message"
|
|
34
|
-
success?
|
|
35
|
-
size="small|medium|large"
|
|
36
|
-
.format=${(value) => formattedValue}
|
|
37
|
-
.parse=${(displayValue) => parsedValue}
|
|
38
|
-
.validate=${(value) => errorMessage}
|
|
39
|
-
@input=${handleInput}
|
|
40
|
-
@change=${handleChange}>
|
|
41
|
-
</schmancy-input-v2>
|
|
42
|
-
|
|
43
37
|
// Input Methods
|
|
44
|
-
input.focus() -> void
|
|
38
|
+
input.focus(options?: FocusOptions) -> void
|
|
45
39
|
input.blur() -> void
|
|
46
|
-
input.
|
|
47
|
-
input.setCustomValidity(message) -> void
|
|
40
|
+
input.click() -> void
|
|
48
41
|
input.select() -> void
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
42
|
+
input.checkValidity() -> boolean
|
|
43
|
+
input.reportValidity() -> boolean
|
|
44
|
+
input.setCustomValidity(message: string) -> void
|
|
45
|
+
input.getValidity() -> ValidityState
|
|
46
|
+
|
|
47
|
+
// Events (Custom Events with detail)
|
|
48
|
+
@input // CustomEvent<{ value: string }>
|
|
49
|
+
@change // CustomEvent<{ value: string }>
|
|
50
|
+
@enter // CustomEvent<{ value: string }>
|
|
51
|
+
@focus // Standard FocusEvent
|
|
52
|
+
@blur // Standard FocusEvent
|
|
53
|
+
@click // Standard MouseEvent
|
|
55
54
|
|
|
56
55
|
// Examples
|
|
57
56
|
// 1. Basic input with validation
|
|
@@ -74,16 +73,44 @@ input.select() -> void
|
|
|
74
73
|
.validate=${(value) => value < 0 ? 'Amount must be positive' : ''}>
|
|
75
74
|
</schmancy-input-v2>
|
|
76
75
|
|
|
77
|
-
// 3.
|
|
78
|
-
<schmancy-input
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
// 3. Password input with visibility toggle
|
|
77
|
+
<schmancy-input
|
|
78
|
+
type="password"
|
|
79
|
+
label="Password"
|
|
80
|
+
name="password"
|
|
81
|
+
required
|
|
82
|
+
minlength="8"
|
|
83
|
+
@enter=${handleSubmit}>
|
|
81
84
|
</schmancy-input>
|
|
82
85
|
|
|
83
|
-
// 4.
|
|
84
|
-
<schmancy-input
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
// 4. Number input with constraints
|
|
87
|
+
<schmancy-input
|
|
88
|
+
type="number"
|
|
89
|
+
label="Quantity"
|
|
90
|
+
name="quantity"
|
|
91
|
+
min="1"
|
|
92
|
+
max="100"
|
|
93
|
+
step="1"
|
|
94
|
+
value="1">
|
|
95
|
+
</schmancy-input>
|
|
96
|
+
|
|
97
|
+
// 5. Input with error state and hint
|
|
98
|
+
<schmancy-input
|
|
99
|
+
label="Username"
|
|
100
|
+
name="username"
|
|
101
|
+
?error=${hasError}
|
|
102
|
+
hint=${hasError ? "Username already taken" : "Choose a unique username"}
|
|
103
|
+
pattern="^[a-zA-Z0-9_]+$">
|
|
104
|
+
</schmancy-input>
|
|
105
|
+
|
|
106
|
+
// 6. Centered readonly input that's clickable
|
|
107
|
+
<schmancy-input
|
|
108
|
+
label="Invitation Code"
|
|
109
|
+
value="ABC123XYZ"
|
|
110
|
+
readonly
|
|
111
|
+
clickable
|
|
112
|
+
align="center"
|
|
113
|
+
@click=${copyToClipboard}>
|
|
87
114
|
</schmancy-input>
|
|
88
115
|
```
|
|
89
116
|
|
|
@@ -95,9 +122,26 @@ input.select() -> void
|
|
|
95
122
|
|
|
96
123
|
## Technical Details
|
|
97
124
|
|
|
98
|
-
###
|
|
99
|
-
|
|
100
|
-
|
|
125
|
+
### Form Association
|
|
126
|
+
The component is form-associated using ElementInternals API, which means:
|
|
127
|
+
- It participates in form submission
|
|
128
|
+
- Works with form validation
|
|
129
|
+
- Integrates with FormData
|
|
130
|
+
- Supports constraint validation API
|
|
131
|
+
|
|
132
|
+
### Accessibility Features
|
|
133
|
+
- Auto-generated IDs for label association
|
|
134
|
+
- ARIA attributes (aria-label, aria-required, aria-invalid, etc.)
|
|
135
|
+
- Proper form association
|
|
136
|
+
- Keyboard navigation support
|
|
137
|
+
|
|
138
|
+
### Validation
|
|
139
|
+
```typescript
|
|
140
|
+
// Built-in HTML5 validation
|
|
141
|
+
input.checkValidity() // Returns true/false
|
|
142
|
+
input.reportValidity() // Shows validation message
|
|
143
|
+
input.setCustomValidity('Custom error') // Set custom message
|
|
144
|
+
input.getValidity() // Get ValidityState object
|
|
101
145
|
suffix: Content displayed after the input field
|
|
102
146
|
```
|
|
103
147
|
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Schmancy Payment Card Form - AI Reference
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import '@mhmo91/schmancy/components/form-elements'
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Component Overview
|
|
10
|
+
|
|
11
|
+
A mobile-friendly payment card form component with real-time validation and formatting for credit card information. Uses Cleave.js for intelligent input formatting.
|
|
12
|
+
|
|
13
|
+
## API
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
// Payment Card Form Component
|
|
17
|
+
<schmancy-payment-card-form
|
|
18
|
+
value?="{
|
|
19
|
+
cardName: string,
|
|
20
|
+
cardNumber: string,
|
|
21
|
+
expirationDate: string,
|
|
22
|
+
cvv: string
|
|
23
|
+
}"
|
|
24
|
+
@change=${handleChange}>
|
|
25
|
+
<!-- Optional additional content -->
|
|
26
|
+
</schmancy-payment-card-form>
|
|
27
|
+
|
|
28
|
+
// Component Properties
|
|
29
|
+
value: {
|
|
30
|
+
cardName: string // Cardholder name
|
|
31
|
+
cardNumber: string // Card number (formatted)
|
|
32
|
+
expirationDate: string // MM/YY format
|
|
33
|
+
cvv: string // 3-4 digits
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Events
|
|
37
|
+
@change // Fires when any field changes with complete form data
|
|
38
|
+
|
|
39
|
+
// Methods
|
|
40
|
+
form.checkValidity() -> boolean // Check if all fields are valid
|
|
41
|
+
form.submit() -> void // Submit the form
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
### Basic Usage
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// Simple payment form
|
|
50
|
+
<schmancy-payment-card-form
|
|
51
|
+
@change=${(e) => console.log('Form data:', e.detail)}>
|
|
52
|
+
</schmancy-payment-card-form>
|
|
53
|
+
|
|
54
|
+
// With initial values
|
|
55
|
+
<schmancy-payment-card-form
|
|
56
|
+
.value=${{
|
|
57
|
+
cardName: 'John Doe',
|
|
58
|
+
cardNumber: '',
|
|
59
|
+
expirationDate: '',
|
|
60
|
+
cvv: ''
|
|
61
|
+
}}
|
|
62
|
+
@change=${handlePaymentChange}>
|
|
63
|
+
</schmancy-payment-card-form>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Form Integration
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// Inside a larger form
|
|
70
|
+
<schmancy-form @submit=${handleCheckout}>
|
|
71
|
+
<schmancy-typography type="headline" token="sm" class="mb-4 block">
|
|
72
|
+
Payment Information
|
|
73
|
+
</schmancy-typography>
|
|
74
|
+
|
|
75
|
+
<schmancy-payment-card-form
|
|
76
|
+
@change=${(e) => this.paymentData = e.detail}>
|
|
77
|
+
</schmancy-payment-card-form>
|
|
78
|
+
|
|
79
|
+
<schmancy-button type="submit" variant="filled" class="mt-4">
|
|
80
|
+
Complete Purchase
|
|
81
|
+
</schmancy-button>
|
|
82
|
+
</schmancy-form>
|
|
83
|
+
|
|
84
|
+
// Handling submission
|
|
85
|
+
handleCheckout(e) {
|
|
86
|
+
const formData = e.detail;
|
|
87
|
+
const payment = this.paymentData;
|
|
88
|
+
|
|
89
|
+
// Process payment...
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Real-World Examples
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// E-commerce checkout
|
|
97
|
+
render() {
|
|
98
|
+
return html`
|
|
99
|
+
<schmancy-surface class="p-6 rounded-lg">
|
|
100
|
+
<schmancy-payment-card-form
|
|
101
|
+
.value=${this.paymentInfo}
|
|
102
|
+
@change=${this.handlePaymentUpdate}>
|
|
103
|
+
|
|
104
|
+
<!-- Additional fields can be added via slot -->
|
|
105
|
+
<schmancy-input
|
|
106
|
+
label="Billing ZIP Code"
|
|
107
|
+
name="zipCode"
|
|
108
|
+
required
|
|
109
|
+
pattern="[0-9]{5}"
|
|
110
|
+
class="mt-4">
|
|
111
|
+
</schmancy-input>
|
|
112
|
+
</schmancy-payment-card-form>
|
|
113
|
+
|
|
114
|
+
<div class="flex gap-4 mt-6">
|
|
115
|
+
<schmancy-button variant="text" @click=${this.goBack}>
|
|
116
|
+
Back
|
|
117
|
+
</schmancy-button>
|
|
118
|
+
<schmancy-button
|
|
119
|
+
variant="filled"
|
|
120
|
+
@click=${this.processPayment}
|
|
121
|
+
?disabled=${!this.isValid}>
|
|
122
|
+
Pay $${this.total}
|
|
123
|
+
</schmancy-button>
|
|
124
|
+
</div>
|
|
125
|
+
</schmancy-surface>
|
|
126
|
+
`
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// With validation feedback
|
|
130
|
+
class CheckoutForm extends LitElement {
|
|
131
|
+
@state() errors = {};
|
|
132
|
+
|
|
133
|
+
async processPayment() {
|
|
134
|
+
const form = this.shadowRoot.querySelector('schmancy-payment-card-form');
|
|
135
|
+
|
|
136
|
+
if (!form.checkValidity()) {
|
|
137
|
+
this.errors = {
|
|
138
|
+
payment: 'Please complete all payment fields correctly'
|
|
139
|
+
};
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Process payment...
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Features
|
|
149
|
+
|
|
150
|
+
### Automatic Formatting
|
|
151
|
+
- **Card Number**: Spaces added automatically (e.g., "4242 4242 4242 4242")
|
|
152
|
+
- **Expiration Date**: MM/YY format enforced
|
|
153
|
+
- **CVV**: Length adjusted based on card type (3 for most, 4 for Amex)
|
|
154
|
+
|
|
155
|
+
### Card Type Detection
|
|
156
|
+
- Automatically detects card type from number
|
|
157
|
+
- Supports: Visa, Mastercard, Amex, Discover, JCB, Diners, etc.
|
|
158
|
+
- Shows appropriate card icon
|
|
159
|
+
- Adjusts validation rules per card type
|
|
160
|
+
|
|
161
|
+
### Real-time Validation
|
|
162
|
+
- Card number validity (Luhn algorithm)
|
|
163
|
+
- Expiration date must be future date
|
|
164
|
+
- CVV length based on card type
|
|
165
|
+
- Name field required
|
|
166
|
+
|
|
167
|
+
### Mobile Optimized
|
|
168
|
+
- Appropriate input modes for virtual keyboards
|
|
169
|
+
- Large touch targets
|
|
170
|
+
- Clear error states
|
|
171
|
+
- Smooth animations
|
|
172
|
+
|
|
173
|
+
## Validation Rules
|
|
174
|
+
|
|
175
|
+
1. **Card Name**: Required, min 2 characters
|
|
176
|
+
2. **Card Number**:
|
|
177
|
+
- Valid card number format
|
|
178
|
+
- Passes Luhn check
|
|
179
|
+
- Supported card type
|
|
180
|
+
3. **Expiration Date**:
|
|
181
|
+
- MM/YY format
|
|
182
|
+
- Must be current or future month
|
|
183
|
+
4. **CVV**:
|
|
184
|
+
- 3 digits (most cards)
|
|
185
|
+
- 4 digits (American Express)
|
|
186
|
+
|
|
187
|
+
## Accessibility
|
|
188
|
+
|
|
189
|
+
- Proper label associations
|
|
190
|
+
- ARIA attributes for validation states
|
|
191
|
+
- Keyboard navigation support
|
|
192
|
+
- Screen reader announcements for errors
|
|
193
|
+
- High contrast error states
|
|
194
|
+
|
|
195
|
+
## Best Practices
|
|
196
|
+
|
|
197
|
+
1. **Security**: Never store raw card data - tokenize on backend
|
|
198
|
+
2. **PCI Compliance**: Use HTTPS and follow PCI-DSS guidelines
|
|
199
|
+
3. **Error Handling**: Show clear, specific error messages
|
|
200
|
+
4. **Loading States**: Disable form during payment processing
|
|
201
|
+
5. **Confirmation**: Show summary before final submission
|
|
202
|
+
|
|
203
|
+
## Common Pitfalls
|
|
204
|
+
|
|
205
|
+
- **Test Cards**: Component validates real card numbers only
|
|
206
|
+
- **Date Validation**: MM/YY not MM/YYYY
|
|
207
|
+
- **Auto-submit**: Don't auto-submit on completion
|
|
208
|
+
- **Browser Autofill**: May conflict with Cleave.js formatting
|
|
209
|
+
|
|
210
|
+
## Related Components
|
|
211
|
+
|
|
212
|
+
- **[Form](./form.md)**: Parent form container
|
|
213
|
+
- **[Input](./input.md)**: Base input component used internally
|
|
214
|
+
- **[Button](./button.md)**: Submit buttons
|
|
215
|
+
- **[Surface](./surface.md)**: Card containers
|
|
216
|
+
|
|
217
|
+
## Dependencies
|
|
218
|
+
|
|
219
|
+
- **Cleave.js**: Handles input formatting and validation
|
|
220
|
+
- Automatically included with component
|
|
221
|
+
|
|
222
|
+
## TypeScript Interface
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
interface PaymentCardData {
|
|
226
|
+
cardName: string;
|
|
227
|
+
cardNumber: string;
|
|
228
|
+
expirationDate: string;
|
|
229
|
+
cvv: string;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
interface SchmancyPaymentCardFormElement extends HTMLElement {
|
|
233
|
+
value: PaymentCardData;
|
|
234
|
+
checkValidity(): boolean;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Change event
|
|
238
|
+
interface PaymentCardChangeEvent extends CustomEvent {
|
|
239
|
+
detail: PaymentCardData;
|
|
240
|
+
}
|
|
241
|
+
```
|
package/ai/surface.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// Properties
|
|
14
14
|
fill: string // "all", "width", "height", "auto" (default: "auto")
|
|
15
15
|
rounded: string // Corner rounding: "none", "top", "left", "right", "bottom", "all" (default: "none")
|
|
16
|
-
type: string // Surface color variant (default: "
|
|
16
|
+
type: string // Surface color variant (default: "container")
|
|
17
17
|
elevation: number // Shadow depth 0-5 (default: 0)
|
|
18
18
|
|
|
19
19
|
// Surface Types (background colors)
|