@mhmo91/schmancy 0.4.18 → 0.4.20
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/chips.md +43 -14
- package/ai/context.md +545 -0
- package/ai/typography.md +8 -8
- package/dist/ai/chips.md +43 -14
- package/dist/ai/context.md +545 -0
- package/dist/ai/typography.md +8 -8
- package/dist/{animated-text-Dt7ULIfK.cjs → animated-text-Be4toKE0.cjs} +2 -2
- package/dist/{animated-text-Dt7ULIfK.cjs.map → animated-text-Be4toKE0.cjs.map} +1 -1
- package/dist/{animated-text-BLAxtIAw.js → animated-text-CNPSIIYg.js} +3 -3
- package/dist/{animated-text-BLAxtIAw.js.map → animated-text-CNPSIIYg.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-BgxB7rJS.cjs → area.component-YKEQV9hc.cjs} +2 -2
- package/dist/{area.component-BgxB7rJS.cjs.map → area.component-YKEQV9hc.cjs.map} +1 -1
- package/dist/{area.component-BLgSdlkJ.js → area.component-i-mmh5is.js} +3 -3
- package/dist/{area.component-BLgSdlkJ.js.map → area.component-i-mmh5is.js.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-DpNmzOji.cjs → autocomplete-C0EU8KiN.cjs} +2 -2
- package/dist/{autocomplete-DpNmzOji.cjs.map → autocomplete-C0EU8KiN.cjs.map} +1 -1
- package/dist/{autocomplete-C8uZsIcD.js → autocomplete-EapOt3ES.js} +3 -3
- package/dist/{autocomplete-C8uZsIcD.js.map → autocomplete-EapOt3ES.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-CUNb2WdS.js → avatar-7Rif8_0P.js} +46 -46
- package/dist/{avatar-CUNb2WdS.js.map → avatar-7Rif8_0P.js.map} +1 -1
- package/dist/{avatar-CTu9FwSF.cjs → avatar-BoOnOo3X.cjs} +2 -2
- package/dist/{avatar-CTu9FwSF.cjs.map → avatar-BoOnOo3X.cjs.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-CkVYkaEC.cjs → boat-C59hzqZ0.cjs} +2 -2
- package/dist/{boat-CkVYkaEC.cjs.map → boat-C59hzqZ0.cjs.map} +1 -1
- package/dist/{boat-d9gIROWW.js → boat-DPTS3Kpw.js} +2 -2
- package/dist/{boat-d9gIROWW.js.map → boat-DPTS3Kpw.js.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-BtGm_bDJ.js → checkbox-B85eeKqn.js} +2 -2
- package/dist/{checkbox-BtGm_bDJ.js.map → checkbox-B85eeKqn.js.map} +1 -1
- package/dist/{checkbox-D_GZpk5w.cjs → checkbox-C-kjO37F.cjs} +2 -2
- package/dist/{checkbox-D_GZpk5w.cjs.map → checkbox-C-kjO37F.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BdxXRe8e.js → chips-BNRMzGrx.js} +64 -60
- package/dist/{chips-BdxXRe8e.js.map → chips-BNRMzGrx.js.map} +1 -1
- package/dist/{chips-Dcgoq3mi.cjs → chips-DW6y4ZMs.cjs} +22 -18
- package/dist/{chips-Dcgoq3mi.cjs.map → chips-DW6y4ZMs.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/{circular-progress-hdKLycBS.cjs → circular-progress-BridvYCS.cjs} +2 -2
- package/dist/{circular-progress-hdKLycBS.cjs.map → circular-progress-BridvYCS.cjs.map} +1 -1
- package/dist/{circular-progress-I-eWIvbu.js → circular-progress-Cl_dXUPO.js} +3 -3
- package/dist/{circular-progress-I-eWIvbu.js.map → circular-progress-Cl_dXUPO.js.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-Cj3yKkoI.cjs → code-preview-B0oGIV9F.cjs} +2 -2
- package/dist/{code-preview-Cj3yKkoI.cjs.map → code-preview-B0oGIV9F.cjs.map} +1 -1
- package/dist/{code-preview-vm-MGUcq.js → code-preview-B8X7JaxA.js} +2 -2
- package/dist/{code-preview-vm-MGUcq.js.map → code-preview-B8X7JaxA.js.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-CEah0Br4.js → date-range-9sVFbxK0.js} +3 -3
- package/dist/{date-range-CEah0Br4.js.map → date-range-9sVFbxK0.js.map} +1 -1
- package/dist/{date-range-D8Y4NfOS.cjs → date-range-DqaB9kwM.cjs} +2 -2
- package/dist/{date-range-D8Y4NfOS.cjs.map → date-range-DqaB9kwM.cjs.map} +1 -1
- package/dist/{date-range-inline-DsJ52mz_.js → date-range-inline-Bqnc8wBb.js} +3 -3
- package/dist/{date-range-inline-DsJ52mz_.js.map → date-range-inline-Bqnc8wBb.js.map} +1 -1
- package/dist/{date-range-inline-lrZkGjTt.cjs → date-range-inline-DGRKHzTX.cjs} +2 -2
- package/dist/{date-range-inline-lrZkGjTt.cjs.map → date-range-inline-DGRKHzTX.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-CMthr2Hj.cjs → delay-ClP0gwsX.cjs} +2 -2
- package/dist/{delay-CMthr2Hj.cjs.map → delay-ClP0gwsX.cjs.map} +1 -1
- package/dist/{delay-C_vw_yei.js → delay-u5isp6Vb.js} +2 -2
- package/dist/{delay-C_vw_yei.js.map → delay-u5isp6Vb.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-B2j1jowD.cjs → dialog-content-CGgHTvcB.cjs} +2 -2
- package/dist/{dialog-content-B2j1jowD.cjs.map → dialog-content-CGgHTvcB.cjs.map} +1 -1
- package/dist/{dialog-content-mEW0FAuk.js → dialog-content-ZpgRQC1m.js} +3 -3
- package/dist/{dialog-content-mEW0FAuk.js.map → dialog-content-ZpgRQC1m.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-Crcv35Yc.js → divider-BK4PNB76.js} +3 -3
- package/dist/{divider-Crcv35Yc.js.map → divider-BK4PNB76.js.map} +1 -1
- package/dist/{divider-Dhl8ZwLT.cjs → divider-CIXGsKd7.cjs} +2 -2
- package/dist/{divider-Dhl8ZwLT.cjs.map → divider-CIXGsKd7.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-BmIs8S4S.cjs → dropdown-content-CeYUqD56.cjs} +2 -2
- package/dist/{dropdown-content-BmIs8S4S.cjs.map → dropdown-content-CeYUqD56.cjs.map} +1 -1
- package/dist/{dropdown-content-xZnz8Pxv.js → dropdown-content-DbHKYDCS.js} +3 -3
- package/dist/{dropdown-content-xZnz8Pxv.js.map → dropdown-content-DbHKYDCS.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-CKZqzjoT.cjs → flex-Dub7SPI7.cjs} +2 -2
- package/dist/{flex-CKZqzjoT.cjs.map → flex-Dub7SPI7.cjs.map} +1 -1
- package/dist/{flex-BxLHuykH.js → flex-JcwYdb2G.js} +2 -2
- package/dist/{flex-BxLHuykH.js.map → flex-JcwYdb2G.js.map} +1 -1
- package/dist/{form-CkXLwrgF.js → form-CMv0SQko.js} +2 -2
- package/dist/{form-CkXLwrgF.js.map → form-CMv0SQko.js.map} +1 -1
- package/dist/{form-BILl3KSi.cjs → form-DKF6UgIS.cjs} +2 -2
- package/dist/{form-BILl3KSi.cjs.map → form-DKF6UgIS.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-7oRbKIJG.cjs → formField.mixin-BrHllh45.cjs} +2 -2
- package/dist/{formField.mixin-7oRbKIJG.cjs.map → formField.mixin-BrHllh45.cjs.map} +1 -1
- package/dist/{formField.mixin-B5IdUrHP.js → formField.mixin-D0GeY28y.js} +2 -2
- package/dist/{formField.mixin-B5IdUrHP.js.map → formField.mixin-D0GeY28y.js.map} +1 -1
- package/dist/{icon-DSNyRhWY.js → icon--s5dpU1N.js} +2 -2
- package/dist/{icon-DSNyRhWY.js.map → icon--s5dpU1N.js.map} +1 -1
- package/dist/{icon-BMRm6Q7E.cjs → icon-CJe2TSk1.cjs} +2 -2
- package/dist/{icon-BMRm6Q7E.cjs.map → icon-CJe2TSk1.cjs.map} +1 -1
- package/dist/{icon-button-BzelG5eZ.js → icon-button-Ckd9jE-a.js} +3 -3
- package/dist/{icon-button-BzelG5eZ.js.map → icon-button-Ckd9jE-a.js.map} +1 -1
- package/dist/{icon-button-CSP3nxqH.cjs → icon-button-x5uqpaeg.cjs} +2 -2
- package/dist/{icon-button-CSP3nxqH.cjs.map → icon-button-x5uqpaeg.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 +44 -44
- package/dist/{input-BA52VU9F.cjs → input-DcWJTrr9.cjs} +2 -2
- package/dist/{input-BA52VU9F.cjs.map → input-DcWJTrr9.cjs.map} +1 -1
- package/dist/{input-BxvmmN6J.js → input-P8bwT-4D.js} +3 -3
- package/dist/{input-BxvmmN6J.js.map → input-P8bwT-4D.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-GmGQKun4.cjs → list-DZAZpM5m.cjs} +2 -2
- package/dist/{list-GmGQKun4.cjs.map → list-DZAZpM5m.cjs.map} +1 -1
- package/dist/{list-Cp-I9q0R.js → list-rGydduh7.js} +2 -2
- package/dist/{list-Cp-I9q0R.js.map → list-rGydduh7.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-bzDPHaHQ.cjs → litElement.mixin-B1eYYBf4.cjs} +2 -2
- package/dist/{litElement.mixin-bzDPHaHQ.cjs.map → litElement.mixin-B1eYYBf4.cjs.map} +1 -1
- package/dist/{litElement.mixin-BzhYdE-s.js → litElement.mixin-Cq-COufw.js} +2 -2
- package/dist/{litElement.mixin-BzhYdE-s.js.map → litElement.mixin-Cq-COufw.js.map} +1 -1
- package/dist/{media-DTdOxwsY.js → media-BG2j6r0I.js} +27 -55
- package/dist/media-BG2j6r0I.js.map +1 -0
- package/dist/{media-DzPzgQVq.cjs → media-C_UPDRKi.cjs} +8 -36
- package/dist/media-C_UPDRKi.cjs.map +1 -0
- package/dist/{menu-DmRH9LKU.cjs → menu-D5aDG-Rp.cjs} +2 -2
- package/dist/{menu-DmRH9LKU.cjs.map → menu-D5aDG-Rp.cjs.map} +1 -1
- package/dist/{menu-CyouBgEC.js → menu-DvZSvoOx.js} +3 -3
- package/dist/{menu-CyouBgEC.js.map → menu-DvZSvoOx.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-iaaiYOCz.cjs → notification-service-BzzXjm4l.cjs} +2 -2
- package/dist/{notification-service-iaaiYOCz.cjs.map → notification-service-BzzXjm4l.cjs.map} +1 -1
- package/dist/{notification-service-5CLr66rH.js → notification-service-DKHubhXv.js} +3 -3
- package/dist/{notification-service-5CLr66rH.js.map → notification-service-DKHubhXv.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BN5jqJ5U.cjs → option-DqN5-RK7.cjs} +2 -2
- package/dist/{option-BN5jqJ5U.cjs.map → option-DqN5-RK7.cjs.map} +1 -1
- package/dist/{option-BCCLGZkk.js → option-T6zGawbH.js} +2 -2
- package/dist/{option-BCCLGZkk.js.map → option-T6zGawbH.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-CC19F7EH.cjs → payment-card-form-C42icpX4.cjs} +2 -2
- package/dist/{payment-card-form-CC19F7EH.cjs.map → payment-card-form-C42icpX4.cjs.map} +1 -1
- package/dist/{payment-card-form-C7IkJyYO.js → payment-card-form-GEOaUypQ.js} +3 -3
- package/dist/{payment-card-form-C7IkJyYO.js.map → payment-card-form-GEOaUypQ.js.map} +1 -1
- package/dist/{progress-Dbfk44z0.cjs → progress-CL35MIi9.cjs} +2 -2
- package/dist/{progress-Dbfk44z0.cjs.map → progress-CL35MIi9.cjs.map} +1 -1
- package/dist/{progress-DYk5Em61.js → progress-EL16etnw.js} +2 -2
- package/dist/{progress-DYk5Em61.js.map → progress-EL16etnw.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-CABGVVlQ.js → radio-button-BQ7snEVj.js} +3 -3
- package/dist/{radio-button-CABGVVlQ.js.map → radio-button-BQ7snEVj.js.map} +1 -1
- package/dist/{radio-button-CNQZeJgH.cjs → radio-button-DrSJB4B-.cjs} +2 -2
- package/dist/{radio-button-CNQZeJgH.cjs.map → radio-button-DrSJB4B-.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-Dlr_V8N0.js → schmancy-steps-container-2WW-9LYL.js} +2 -2
- package/dist/{schmancy-steps-container-Dlr_V8N0.js.map → schmancy-steps-container-2WW-9LYL.js.map} +1 -1
- package/dist/{schmancy-steps-container-39pHxNAK.cjs → schmancy-steps-container-C_HHZFeb.cjs} +2 -2
- package/dist/{schmancy-steps-container-39pHxNAK.cjs.map → schmancy-steps-container-C_HHZFeb.cjs.map} +1 -1
- package/dist/{select-DxmJTxAy.cjs → select-BHRtVoTo.cjs} +2 -2
- package/dist/{select-DxmJTxAy.cjs.map → select-BHRtVoTo.cjs.map} +1 -1
- package/dist/{select-UfyNhLTO.js → select-Bl8FO2kb.js} +3 -3
- package/dist/{select-UfyNhLTO.js.map → select-Bl8FO2kb.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-Dp2wyj6y.cjs → sheet-BiUUD0Td.cjs} +2 -2
- package/dist/{sheet-Dp2wyj6y.cjs.map → sheet-BiUUD0Td.cjs.map} +1 -1
- package/dist/{sheet-b-tYD9Bq.js → sheet-WpG2m2yT.js} +4 -4
- package/dist/{sheet-b-tYD9Bq.js.map → sheet-WpG2m2yT.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-IRrxLZ3N.cjs → sheet.service-B5sh8d0k.cjs} +2 -2
- package/dist/{sheet.service-IRrxLZ3N.cjs.map → sheet.service-B5sh8d0k.cjs.map} +1 -1
- package/dist/{sheet.service-Cnpanz9P.js → sheet.service-COPNmxwp.js} +2 -2
- package/dist/{sheet.service-Cnpanz9P.js.map → sheet.service-COPNmxwp.js.map} +1 -1
- package/dist/{slider-BzsOgIrd.js → slider-4ggti1yr.js} +3 -3
- package/dist/{slider-BzsOgIrd.js.map → slider-4ggti1yr.js.map} +1 -1
- package/dist/{slider-DxUw0ywu.cjs → slider-DX-XUnE-.cjs} +2 -2
- package/dist/{slider-DxUw0ywu.cjs.map → slider-DX-XUnE-.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-EZjRf-QZ.js → spinner-BPqLh7JL.js} +2 -2
- package/dist/{spinner-EZjRf-QZ.js.map → spinner-BPqLh7JL.js.map} +1 -1
- package/dist/{spinner-B2VjkiCF.cjs → spinner-Cq8tY2xk.cjs} +2 -2
- package/dist/{spinner-B2VjkiCF.cjs.map → spinner-Cq8tY2xk.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-BmAoIqMr.js → surface-1xboRERM.js} +2 -2
- package/dist/{surface-BmAoIqMr.js.map → surface-1xboRERM.js.map} +1 -1
- package/dist/{surface-063HkUq8.cjs → surface-YyZ8eXfj.cjs} +2 -2
- package/dist/{surface-063HkUq8.cjs.map → surface-YyZ8eXfj.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-DyqYDcX9.js → table-C6EWKqDY.js} +2 -2
- package/dist/{table-DyqYDcX9.js.map → table-C6EWKqDY.js.map} +1 -1
- package/dist/{table-DiUP88FH.cjs → table-DpXmflf7.cjs} +2 -2
- package/dist/{table-DiUP88FH.cjs.map → table-DpXmflf7.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-Cy8kD9mX.js → tabs-compatibility-AFzKAP2D.js} +2 -2
- package/dist/{tabs-compatibility-Cy8kD9mX.js.map → tabs-compatibility-AFzKAP2D.js.map} +1 -1
- package/dist/{tabs-compatibility-DfgDgm3L.cjs → tabs-compatibility-ThgWuSrK.cjs} +2 -2
- package/dist/{tabs-compatibility-DfgDgm3L.cjs.map → tabs-compatibility-ThgWuSrK.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-C9z3GSDB.cjs → tailwind.mixin-DNME2oUL.cjs} +2 -2
- package/dist/{tailwind.mixin-C9z3GSDB.cjs.map → tailwind.mixin-DNME2oUL.cjs.map} +1 -1
- package/dist/{tailwind.mixin-Bnsuwr6X.js → tailwind.mixin-epCxS6FK.js} +9 -9
- package/dist/{tailwind.mixin-Bnsuwr6X.js.map → tailwind.mixin-epCxS6FK.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-C655CWvM.cjs → textarea-B_TlKSop.cjs} +2 -2
- package/dist/{textarea-C655CWvM.cjs.map → textarea-B_TlKSop.cjs.map} +1 -1
- package/dist/{textarea-CQM25O_4.js → textarea-JO7OVdfk.js} +2 -2
- package/dist/{textarea-CQM25O_4.js.map → textarea-JO7OVdfk.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-CWlSwmLe.js → theme-button-C8cK7un6.js} +2 -2
- package/dist/{theme-button-CWlSwmLe.js.map → theme-button-C8cK7un6.js.map} +1 -1
- package/dist/{theme-button-D70_9T_Q.cjs → theme-button-DnrKANEK.cjs} +2 -2
- package/dist/{theme-button-D70_9T_Q.cjs.map → theme-button-DnrKANEK.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-DrQWdXpw.cjs → timezone-C56jMhLK.cjs} +2 -2
- package/dist/{timezone-DrQWdXpw.cjs.map → timezone-C56jMhLK.cjs.map} +1 -1
- package/dist/{timezone-DnBsehNw.js → timezone-CEEEd-9_.js} +3 -3
- package/dist/{timezone-DnBsehNw.js.map → timezone-CEEEd-9_.js.map} +1 -1
- package/dist/{tooltip-DdXpj7ri.js → tooltip-CnuYee5c.js} +2 -2
- package/dist/{tooltip-DdXpj7ri.js.map → tooltip-CnuYee5c.js.map} +1 -1
- package/dist/{tooltip-dlvpo-O7.cjs → tooltip-twQMYpmk.cjs} +2 -2
- package/dist/{tooltip-dlvpo-O7.cjs.map → tooltip-twQMYpmk.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-BX1rDcI3.js → tree-CfnCGGn7.js} +2 -2
- package/dist/{tree-BX1rDcI3.js.map → tree-CfnCGGn7.js.map} +1 -1
- package/dist/{tree-BUQThnka.cjs → tree-Dv5R6kdP.cjs} +2 -2
- package/dist/{tree-BUQThnka.cjs.map → tree-Dv5R6kdP.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Czy543Ke.js → typewriter-DAxRjeRy.js} +4 -4
- package/dist/{typewriter-Czy543Ke.js.map → typewriter-DAxRjeRy.js.map} +1 -1
- package/dist/{typewriter-BfD8bxa4.cjs → typewriter-egr1HiFJ.cjs} +2 -2
- package/dist/{typewriter-BfD8bxa4.cjs.map → typewriter-egr1HiFJ.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DyM6-J-U.cjs → typography-DVZ2ezpU.cjs} +2 -2
- package/dist/{typography-DyM6-J-U.cjs.map → typography-DVZ2ezpU.cjs.map} +1 -1
- package/dist/{typography-DS-zFvYn.js → typography-De5UXL0j.js} +2 -2
- package/dist/{typography-DS-zFvYn.js.map → typography-De5UXL0j.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/dist/media-DTdOxwsY.js.map +0 -1
- package/dist/media-DzPzgQVq.cjs.map +0 -1
package/ai/chips.md
CHANGED
|
@@ -1,23 +1,40 @@
|
|
|
1
1
|
# Schmancy Chips - AI Reference
|
|
2
2
|
|
|
3
3
|
```js
|
|
4
|
-
// Single Chip
|
|
4
|
+
// Single Chip - now accepts ANY content!
|
|
5
5
|
<schmancy-chip
|
|
6
6
|
value="chip-value"
|
|
7
7
|
selected?
|
|
8
|
-
icon="emoji-icon"
|
|
9
8
|
readOnly?
|
|
10
9
|
disabled?
|
|
11
|
-
@change=${handleChange}
|
|
12
|
-
|
|
13
|
-
Chip Text
|
|
10
|
+
@change=${handleChange}>
|
|
11
|
+
Any content here
|
|
14
12
|
</schmancy-chip>
|
|
15
13
|
|
|
16
|
-
//
|
|
17
|
-
<schmancy-chip
|
|
14
|
+
// Simple text chip
|
|
15
|
+
<schmancy-chip value="javascript">
|
|
18
16
|
JavaScript
|
|
19
17
|
</schmancy-chip>
|
|
20
18
|
|
|
19
|
+
// Chip with icon
|
|
20
|
+
<schmancy-chip value="edit">
|
|
21
|
+
<schmancy-icon>edit</schmancy-icon>
|
|
22
|
+
Edit
|
|
23
|
+
</schmancy-chip>
|
|
24
|
+
|
|
25
|
+
// Chip with avatar and text
|
|
26
|
+
<schmancy-chip value="user1" class="flex items-center gap-2">
|
|
27
|
+
<schmancy-avatar size="sm">JD</schmancy-avatar>
|
|
28
|
+
<schmancy-typography type="body" token="sm">john.doe@example.com</schmancy-typography>
|
|
29
|
+
</schmancy-chip>
|
|
30
|
+
|
|
31
|
+
// Chip with badge
|
|
32
|
+
<schmancy-chip value="notifications" class="flex items-center gap-2">
|
|
33
|
+
<schmancy-icon>notifications</schmancy-icon>
|
|
34
|
+
<span>Notifications</span>
|
|
35
|
+
<schmancy-badge>5</schmancy-badge>
|
|
36
|
+
</schmancy-chip>
|
|
37
|
+
|
|
21
38
|
// Chips Container - Single Selection
|
|
22
39
|
<schmancy-chips
|
|
23
40
|
.value=${selectedValue}
|
|
@@ -49,9 +66,8 @@
|
|
|
49
66
|
// Chip Properties
|
|
50
67
|
value: string // Value for selection purposes
|
|
51
68
|
selected: boolean // Whether the chip is selected
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
disabled: boolean // Disable the chip
|
|
69
|
+
readOnly: boolean // Makes chip non-interactive (no selection change)
|
|
70
|
+
disabled: boolean // Disable the chip (no interaction at all)
|
|
55
71
|
|
|
56
72
|
// Chips Container Properties
|
|
57
73
|
multi: boolean // Enable multiple selection mode
|
|
@@ -67,13 +83,26 @@ wrap: boolean // Whether chips wrap to new lines (default: true)
|
|
|
67
83
|
@change // Fires when selection changes, with detail being string (single) or string[] (multi)
|
|
68
84
|
|
|
69
85
|
// Examples
|
|
70
|
-
// Basic chips
|
|
86
|
+
// Basic chips with emoji and Material icons
|
|
71
87
|
<div>
|
|
72
88
|
<schmancy-chip value="basic">Basic</schmancy-chip>
|
|
73
89
|
<schmancy-chip value="javascript" icon="📝">JavaScript</schmancy-chip>
|
|
74
|
-
<schmancy-chip value="
|
|
75
|
-
<schmancy-chip value="
|
|
76
|
-
<schmancy-chip value="
|
|
90
|
+
<schmancy-chip value="settings" icon="settings">Settings</schmancy-chip>
|
|
91
|
+
<schmancy-chip value="star" icon="star">Starred</schmancy-chip>
|
|
92
|
+
<schmancy-chip value="delete" icon="delete">Delete</schmancy-chip>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
// User chips with avatars - now fully supported!
|
|
96
|
+
<div class="flex flex-wrap gap-2">
|
|
97
|
+
<schmancy-chip value="user1" class="flex items-center gap-2">
|
|
98
|
+
<schmancy-avatar size="sm">JD</schmancy-avatar>
|
|
99
|
+
<schmancy-typography type="body" token="sm">john.doe@example.com</schmancy-typography>
|
|
100
|
+
</schmancy-chip>
|
|
101
|
+
|
|
102
|
+
<schmancy-chip value="user2" selected class="flex items-center gap-2">
|
|
103
|
+
<schmancy-avatar size="sm">AS</schmancy-avatar>
|
|
104
|
+
<schmancy-typography type="body" token="sm">alice.smith@example.com</schmancy-typography>
|
|
105
|
+
</schmancy-chip>
|
|
77
106
|
</div>
|
|
78
107
|
|
|
79
108
|
// Single selection chips
|
package/ai/context.md
ADDED
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
# Context API - Schmancy Framework
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Context API in Schmancy provides a reactive state management solution with automatic persistence across browser storage mechanisms. It's built on RxJS observables and integrates seamlessly with Lit components.
|
|
6
|
+
|
|
7
|
+
## Core Concepts
|
|
8
|
+
|
|
9
|
+
### What is a Context?
|
|
10
|
+
|
|
11
|
+
A context is a reactive container that:
|
|
12
|
+
- Holds application state
|
|
13
|
+
- Automatically persists to browser storage
|
|
14
|
+
- Notifies all subscribers of changes
|
|
15
|
+
- Works across component boundaries without prop drilling
|
|
16
|
+
|
|
17
|
+
### Storage Types
|
|
18
|
+
|
|
19
|
+
| Type | Use Case | Size Limit | Persistence |
|
|
20
|
+
|------|----------|------------|-------------|
|
|
21
|
+
| `'local'` | User preferences, auth tokens | ~5-10MB | Survives browser restart |
|
|
22
|
+
| `'session'` | Temporary UI state, filters | ~5-10MB | Cleared on tab close |
|
|
23
|
+
| `'indexeddb'` | Large datasets, complex objects | GB+ | Survives browser restart |
|
|
24
|
+
| `null` | Non-persisted state | Memory only | Lost on page reload |
|
|
25
|
+
|
|
26
|
+
## Creating Contexts
|
|
27
|
+
|
|
28
|
+
### Basic Syntax
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { createContext } from '@mhmo91/schmancy/context'
|
|
32
|
+
|
|
33
|
+
export const contextName = createContext<Type>(
|
|
34
|
+
initialValue, // Default value
|
|
35
|
+
storageType, // 'local' | 'session' | 'indexeddb' | null
|
|
36
|
+
storageKey // Unique key for storage
|
|
37
|
+
)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Examples by Use Case
|
|
41
|
+
|
|
42
|
+
#### User Authentication
|
|
43
|
+
```typescript
|
|
44
|
+
// Single user object that persists across sessions
|
|
45
|
+
export const userContext = createContext<User>(
|
|
46
|
+
new User(),
|
|
47
|
+
'local',
|
|
48
|
+
'auth_user'
|
|
49
|
+
)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### Application Configuration
|
|
53
|
+
```typescript
|
|
54
|
+
// App-wide settings
|
|
55
|
+
export const configContext = createContext<AppConfig>(
|
|
56
|
+
{ theme: 'light', language: 'en' },
|
|
57
|
+
'local',
|
|
58
|
+
'app_config'
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### Collections (Use Maps for Performance)
|
|
63
|
+
```typescript
|
|
64
|
+
// Large collections with frequent lookups
|
|
65
|
+
export const productsContext = createContext<Map<string, Product>>(
|
|
66
|
+
new Map(),
|
|
67
|
+
'indexeddb',
|
|
68
|
+
'products_collection'
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
// User collection with relationships
|
|
72
|
+
export const usersContext = createContext<Map<string, User>>(
|
|
73
|
+
new Map(),
|
|
74
|
+
'indexeddb',
|
|
75
|
+
'users_collection'
|
|
76
|
+
)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
#### Temporary UI State
|
|
80
|
+
```typescript
|
|
81
|
+
// Filter state cleared on tab close
|
|
82
|
+
export const filterContext = createContext<ProductFilter>(
|
|
83
|
+
{ category: 'all', priceRange: [0, 1000] },
|
|
84
|
+
'session',
|
|
85
|
+
'product_filter'
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
// Selected items in current session
|
|
89
|
+
export const selectedIdsContext = createContext<Set<string>>(
|
|
90
|
+
new Set(),
|
|
91
|
+
'session',
|
|
92
|
+
'selected_items'
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### Non-Persisted State
|
|
97
|
+
```typescript
|
|
98
|
+
// Loading states, temporary flags
|
|
99
|
+
export const loadingContext = createContext<boolean>(
|
|
100
|
+
false,
|
|
101
|
+
null, // No persistence
|
|
102
|
+
'loading_state'
|
|
103
|
+
)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Using Contexts in Components
|
|
107
|
+
|
|
108
|
+
### Basic Component Integration
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { $LitElement } from '@mhmo91/schmancy/core/$lit'
|
|
112
|
+
import { select } from '@mhmo91/schmancy/context'
|
|
113
|
+
import { userContext, productsContext } from './contexts'
|
|
114
|
+
|
|
115
|
+
@customElement('my-component')
|
|
116
|
+
export class MyComponent extends $LitElement() {
|
|
117
|
+
// Basic selection
|
|
118
|
+
@select(userContext) user!: User
|
|
119
|
+
|
|
120
|
+
// With transformation
|
|
121
|
+
@select(productsContext, products => Array.from(products.values()))
|
|
122
|
+
productsList!: Product[]
|
|
123
|
+
|
|
124
|
+
// Required context (throws if undefined)
|
|
125
|
+
@select(configContext, config => config, { required: true })
|
|
126
|
+
config!: AppConfig
|
|
127
|
+
|
|
128
|
+
render() {
|
|
129
|
+
return html`
|
|
130
|
+
<div>Welcome, ${this.user.name}</div>
|
|
131
|
+
<div>${this.productsList.length} products</div>
|
|
132
|
+
`
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Advanced Subscriptions
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
@customElement('advanced-component')
|
|
141
|
+
export class AdvancedComponent extends $LitElement() {
|
|
142
|
+
connectedCallback() {
|
|
143
|
+
super.connectedCallback()
|
|
144
|
+
|
|
145
|
+
// React to context changes
|
|
146
|
+
userContext.$.pipe(
|
|
147
|
+
takeUntil(this.disconnecting),
|
|
148
|
+
filter(user => user.isAuthenticated),
|
|
149
|
+
debounceTime(300)
|
|
150
|
+
).subscribe(user => {
|
|
151
|
+
console.log('Authenticated user changed:', user)
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
// Combine multiple contexts
|
|
155
|
+
combineLatest([
|
|
156
|
+
userContext.$,
|
|
157
|
+
organizationContext.$
|
|
158
|
+
]).pipe(
|
|
159
|
+
takeUntil(this.disconnecting)
|
|
160
|
+
).subscribe(([user, org]) => {
|
|
161
|
+
// React to either changing
|
|
162
|
+
})
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Context Operations
|
|
168
|
+
|
|
169
|
+
### Reading Values
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
// Get current value synchronously
|
|
173
|
+
const currentUser = userContext.value
|
|
174
|
+
|
|
175
|
+
// Subscribe to changes
|
|
176
|
+
userContext.$.subscribe(user => {
|
|
177
|
+
console.log('User changed:', user)
|
|
178
|
+
})
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Updating Values
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
// Partial update (merges with existing)
|
|
185
|
+
userContext.set({ name: 'New Name' })
|
|
186
|
+
|
|
187
|
+
// Full replacement
|
|
188
|
+
userContext.replace(new User({ id: '123', name: 'John' }))
|
|
189
|
+
|
|
190
|
+
// For Maps
|
|
191
|
+
productsContext.set(prevMap => {
|
|
192
|
+
const newMap = new Map(prevMap)
|
|
193
|
+
newMap.set('123', newProduct)
|
|
194
|
+
return newMap
|
|
195
|
+
})
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Clearing Values
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Reset to initial value and clear storage
|
|
202
|
+
userContext.clear()
|
|
203
|
+
|
|
204
|
+
// Clear all contexts (useful for logout)
|
|
205
|
+
export function clearAllContexts() {
|
|
206
|
+
userContext.clear()
|
|
207
|
+
configContext.clear()
|
|
208
|
+
productsContext.clear()
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Best Practices
|
|
213
|
+
|
|
214
|
+
### 1. Organization
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
// Feature-based structure
|
|
218
|
+
src/
|
|
219
|
+
features/
|
|
220
|
+
auth/
|
|
221
|
+
context.ts // Auth-related contexts
|
|
222
|
+
components/
|
|
223
|
+
products/
|
|
224
|
+
context.ts // Product-related contexts
|
|
225
|
+
components/
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 2. Type Safety
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
// Always provide explicit types
|
|
232
|
+
export const userContext = createContext<User>(...) // ✅
|
|
233
|
+
|
|
234
|
+
// Avoid any
|
|
235
|
+
export const dataContext = createContext<any>(...) // ❌
|
|
236
|
+
|
|
237
|
+
// Use discriminated unions for complex state
|
|
238
|
+
type AuthState =
|
|
239
|
+
| { status: 'idle' }
|
|
240
|
+
| { status: 'loading' }
|
|
241
|
+
| { status: 'authenticated'; user: User }
|
|
242
|
+
| { status: 'error'; error: string }
|
|
243
|
+
|
|
244
|
+
export const authStateContext = createContext<AuthState>(
|
|
245
|
+
{ status: 'idle' },
|
|
246
|
+
'session',
|
|
247
|
+
'auth_state'
|
|
248
|
+
)
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 3. Performance Optimization
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
// Use Maps for collections with frequent lookups
|
|
255
|
+
export const itemsContext = createContext<Map<string, Item>>(new Map(), ...)
|
|
256
|
+
|
|
257
|
+
// Avoid storing derived state
|
|
258
|
+
// ❌ Bad: Storing filtered results
|
|
259
|
+
export const filteredProductsContext = createContext<Product[]>([], ...)
|
|
260
|
+
|
|
261
|
+
// ✅ Good: Compute in component
|
|
262
|
+
@select(productsContext, products =>
|
|
263
|
+
Array.from(products.values()).filter(p => p.category === 'electronics')
|
|
264
|
+
)
|
|
265
|
+
filteredProducts!: Product[]
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### 4. Memory Management
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
// Always cleanup subscriptions
|
|
272
|
+
connectedCallback() {
|
|
273
|
+
super.connectedCallback()
|
|
274
|
+
|
|
275
|
+
// Use takeUntil with disconnecting
|
|
276
|
+
someContext.$.pipe(
|
|
277
|
+
takeUntil(this.disconnecting)
|
|
278
|
+
).subscribe()
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Avoid memory leaks
|
|
282
|
+
disconnectedCallback() {
|
|
283
|
+
super.disconnectedCallback()
|
|
284
|
+
// Subscriptions are automatically cleaned up
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### 5. Storage Key Naming
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
// Use consistent, descriptive keys
|
|
292
|
+
'auth_user' // ✅ Clear purpose
|
|
293
|
+
'app_config' // ✅ Namespaced
|
|
294
|
+
'products_v2' // ✅ Versioned if needed
|
|
295
|
+
'data' // ❌ Too generic
|
|
296
|
+
'u' // ❌ Too short
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Common Patterns
|
|
300
|
+
|
|
301
|
+
### Authentication Flow
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
// contexts/auth.ts
|
|
305
|
+
export const userContext = createContext<User | null>(null, 'local', 'auth_user')
|
|
306
|
+
export const tokenContext = createContext<string>('', 'local', 'auth_token')
|
|
307
|
+
|
|
308
|
+
// components/login.ts
|
|
309
|
+
async function login(credentials: Credentials) {
|
|
310
|
+
const response = await api.login(credentials)
|
|
311
|
+
userContext.set(response.user)
|
|
312
|
+
tokenContext.set(response.token)
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
async function logout() {
|
|
316
|
+
userContext.clear()
|
|
317
|
+
tokenContext.clear()
|
|
318
|
+
// Clear other user-specific contexts
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Master-Detail Pattern
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
// contexts/products.ts
|
|
326
|
+
export const productsContext = createContext<Map<string, Product>>(
|
|
327
|
+
new Map(),
|
|
328
|
+
'indexeddb',
|
|
329
|
+
'products'
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
export const selectedProductIdContext = createContext<string | null>(
|
|
333
|
+
null,
|
|
334
|
+
'session',
|
|
335
|
+
'selected_product'
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
// components/product-list.ts
|
|
339
|
+
@select(productsContext) products!: Map<string, Product>
|
|
340
|
+
@select(selectedProductIdContext) selectedId!: string | null
|
|
341
|
+
|
|
342
|
+
selectProduct(id: string) {
|
|
343
|
+
selectedProductIdContext.set(id)
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// components/product-detail.ts
|
|
347
|
+
@select(selectedProductIdContext) productId!: string | null
|
|
348
|
+
@select(productsContext, (products, productId) =>
|
|
349
|
+
productId ? products.get(productId) : null
|
|
350
|
+
)
|
|
351
|
+
selectedProduct!: Product | null
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Form State Management
|
|
355
|
+
|
|
356
|
+
```typescript
|
|
357
|
+
// contexts/form.ts
|
|
358
|
+
export interface FormData {
|
|
359
|
+
name?: string
|
|
360
|
+
email?: string
|
|
361
|
+
message?: string
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
export const formContext = createContext<FormData>(
|
|
365
|
+
{},
|
|
366
|
+
'session', // Don't persist incomplete forms
|
|
367
|
+
'contact_form'
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
// components/form.ts
|
|
371
|
+
@select(formContext) formData!: FormData
|
|
372
|
+
|
|
373
|
+
updateField(field: keyof FormData, value: string) {
|
|
374
|
+
formContext.set({ [field]: value })
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
submitForm() {
|
|
378
|
+
const data = formContext.value
|
|
379
|
+
// Submit logic
|
|
380
|
+
formContext.clear() // Clear after submit
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### Optimistic Updates
|
|
385
|
+
|
|
386
|
+
```typescript
|
|
387
|
+
// Immediately update UI, then sync with server
|
|
388
|
+
async function updateProduct(id: string, updates: Partial<Product>) {
|
|
389
|
+
// Optimistic update
|
|
390
|
+
productsContext.set(prev => {
|
|
391
|
+
const newMap = new Map(prev)
|
|
392
|
+
const product = newMap.get(id)
|
|
393
|
+
if (product) {
|
|
394
|
+
newMap.set(id, { ...product, ...updates })
|
|
395
|
+
}
|
|
396
|
+
return newMap
|
|
397
|
+
})
|
|
398
|
+
|
|
399
|
+
try {
|
|
400
|
+
// Sync with server
|
|
401
|
+
const updated = await api.updateProduct(id, updates)
|
|
402
|
+
|
|
403
|
+
// Update with server response
|
|
404
|
+
productsContext.set(prev => {
|
|
405
|
+
const newMap = new Map(prev)
|
|
406
|
+
newMap.set(id, updated)
|
|
407
|
+
return newMap
|
|
408
|
+
})
|
|
409
|
+
} catch (error) {
|
|
410
|
+
// Revert on error
|
|
411
|
+
productsContext.set(prev => {
|
|
412
|
+
// Restore original state
|
|
413
|
+
})
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## Testing Contexts
|
|
419
|
+
|
|
420
|
+
```typescript
|
|
421
|
+
// test/setup.ts
|
|
422
|
+
import { beforeEach } from 'vitest'
|
|
423
|
+
|
|
424
|
+
beforeEach(() => {
|
|
425
|
+
// Clear all contexts before each test
|
|
426
|
+
localStorage.clear()
|
|
427
|
+
sessionStorage.clear()
|
|
428
|
+
|
|
429
|
+
// Reset to initial values
|
|
430
|
+
userContext.clear()
|
|
431
|
+
productsContext.clear()
|
|
432
|
+
})
|
|
433
|
+
|
|
434
|
+
// test/auth.test.ts
|
|
435
|
+
describe('Authentication', () => {
|
|
436
|
+
it('should update user context on login', async () => {
|
|
437
|
+
const mockUser = { id: '1', name: 'Test User' }
|
|
438
|
+
|
|
439
|
+
// Set context value
|
|
440
|
+
userContext.set(mockUser)
|
|
441
|
+
|
|
442
|
+
// Verify update
|
|
443
|
+
expect(userContext.value).toEqual(mockUser)
|
|
444
|
+
expect(localStorage.getItem('auth_user')).toBeTruthy()
|
|
445
|
+
})
|
|
446
|
+
})
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
## Troubleshooting
|
|
450
|
+
|
|
451
|
+
### Context Not Updating
|
|
452
|
+
|
|
453
|
+
```typescript
|
|
454
|
+
// Check if component is subscribing correctly
|
|
455
|
+
@select(userContext) user!: User // ✅ Will update
|
|
456
|
+
|
|
457
|
+
// Manual subscription needs cleanup
|
|
458
|
+
userContext.$.pipe(
|
|
459
|
+
takeUntil(this.disconnecting) // ✅ Important!
|
|
460
|
+
).subscribe()
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Storage Quota Exceeded
|
|
464
|
+
|
|
465
|
+
```typescript
|
|
466
|
+
// For large data, use IndexedDB
|
|
467
|
+
export const largeDataContext = createContext<LargeData>(
|
|
468
|
+
{},
|
|
469
|
+
'indexeddb', // ✅ Much larger quota
|
|
470
|
+
'large_data'
|
|
471
|
+
)
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Type Errors with Collections
|
|
475
|
+
|
|
476
|
+
```typescript
|
|
477
|
+
// When using Maps, remember to transform for templates
|
|
478
|
+
@select(itemsContext, items => Array.from(items.values()))
|
|
479
|
+
itemsList!: Item[] // ✅ Array for template iteration
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### Debugging Tips
|
|
483
|
+
|
|
484
|
+
```typescript
|
|
485
|
+
// Log all context changes
|
|
486
|
+
if (import.meta.env.DEV) {
|
|
487
|
+
userContext.$.subscribe(user =>
|
|
488
|
+
console.log('[Context] User:', user)
|
|
489
|
+
)
|
|
490
|
+
|
|
491
|
+
productsContext.$.subscribe(products =>
|
|
492
|
+
console.log('[Context] Products:', products.size)
|
|
493
|
+
)
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Check storage directly
|
|
497
|
+
console.log('LocalStorage:', localStorage.getItem('auth_user'))
|
|
498
|
+
console.log('SessionStorage:', sessionStorage.getItem('filter_state'))
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
## Migration Guide
|
|
502
|
+
|
|
503
|
+
### From Redux/Vuex
|
|
504
|
+
|
|
505
|
+
```typescript
|
|
506
|
+
// Redux pattern
|
|
507
|
+
dispatch({ type: 'SET_USER', payload: user })
|
|
508
|
+
|
|
509
|
+
// Context pattern
|
|
510
|
+
userContext.set(user)
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### From React Context
|
|
514
|
+
|
|
515
|
+
```typescript
|
|
516
|
+
// React Context
|
|
517
|
+
const UserContext = React.createContext()
|
|
518
|
+
<UserContext.Provider value={user}>
|
|
519
|
+
|
|
520
|
+
// Schmancy Context
|
|
521
|
+
export const userContext = createContext<User>(...)
|
|
522
|
+
// No provider needed - works globally
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
### From Local Component State
|
|
526
|
+
|
|
527
|
+
```typescript
|
|
528
|
+
// Before: Component state
|
|
529
|
+
class MyComponent {
|
|
530
|
+
@state() private user?: User
|
|
531
|
+
|
|
532
|
+
updateUser(user: User) {
|
|
533
|
+
this.user = user
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// After: Shared context
|
|
538
|
+
class MyComponent {
|
|
539
|
+
@select(userContext) user!: User
|
|
540
|
+
|
|
541
|
+
updateUser(user: User) {
|
|
542
|
+
userContext.set(user) // Updates all subscribers
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
```
|
package/ai/typography.md
CHANGED
|
@@ -52,7 +52,7 @@ import '@mhmo91/schmancy/typography'
|
|
|
52
52
|
</schmancy-typography>
|
|
53
53
|
|
|
54
54
|
// 6. With additional styling
|
|
55
|
-
<schmancy-typography type="headline" token="sm" class="text-primary
|
|
55
|
+
<schmancy-typography type="headline" token="sm" class="mb-4 text-primary">
|
|
56
56
|
Highlighted Section
|
|
57
57
|
</schmancy-typography>
|
|
58
58
|
|
|
@@ -73,10 +73,10 @@ import '@mhmo91/schmancy/typography'
|
|
|
73
73
|
|
|
74
74
|
// 10. Multiple typography in a card
|
|
75
75
|
<schmancy-card class="p-6">
|
|
76
|
-
<schmancy-typography type="headline" token="sm" class="mb-2
|
|
76
|
+
<schmancy-typography type="headline" token="sm" class="block mb-2">
|
|
77
77
|
Card Title
|
|
78
78
|
</schmancy-typography>
|
|
79
|
-
<schmancy-typography type="body" token="md" class="text-surface-onVariant
|
|
79
|
+
<schmancy-typography type="body" token="md" class="block mb-4 text-surface-onVariant">
|
|
80
80
|
This is a description that provides more context about the card content.
|
|
81
81
|
</schmancy-typography>
|
|
82
82
|
<schmancy-typography type="label" token="lg" class="text-primary">
|
|
@@ -180,17 +180,17 @@ Typography automatically inherits colors from the theme:
|
|
|
180
180
|
|
|
181
181
|
1. **Page Layout**
|
|
182
182
|
```html
|
|
183
|
-
<schmancy-typography type="display" token="md" class="mb-4
|
|
183
|
+
<schmancy-typography type="display" token="md" class="block mb-4">
|
|
184
184
|
Dashboard
|
|
185
185
|
</schmancy-typography>
|
|
186
|
-
<schmancy-typography type="body" token="lg" class="text-surface-onVariant
|
|
186
|
+
<schmancy-typography type="body" token="lg" class="block text-surface-onVariant">
|
|
187
187
|
Welcome back! Here's your activity summary.
|
|
188
188
|
</schmancy-typography>
|
|
189
189
|
```
|
|
190
190
|
|
|
191
191
|
2. **Form Fields**
|
|
192
192
|
```html
|
|
193
|
-
<schmancy-typography type="label" token="md" class="mb-2
|
|
193
|
+
<schmancy-typography type="label" token="md" class="block mb-2">
|
|
194
194
|
Username
|
|
195
195
|
</schmancy-typography>
|
|
196
196
|
<schmancy-input placeholder="Enter username"></schmancy-input>
|
|
@@ -198,7 +198,7 @@ Typography automatically inherits colors from the theme:
|
|
|
198
198
|
|
|
199
199
|
3. **Data Display**
|
|
200
200
|
```html
|
|
201
|
-
<schmancy-typography type="headline" token="md" class="text-primary
|
|
201
|
+
<schmancy-typography type="headline" token="md" class="block text-primary">
|
|
202
202
|
$1,234.56
|
|
203
203
|
</schmancy-typography>
|
|
204
204
|
<schmancy-typography type="label" token="sm" class="text-surface-onVariant">
|
|
@@ -213,7 +213,7 @@ Typography automatically inherits colors from the theme:
|
|
|
213
213
|
<schmancy-typography type="title" token="md" class="block">
|
|
214
214
|
Feature One
|
|
215
215
|
</schmancy-typography>
|
|
216
|
-
<schmancy-typography type="body" token="sm" class="text-surface-onVariant
|
|
216
|
+
<schmancy-typography type="body" token="sm" class="block text-surface-onVariant">
|
|
217
217
|
Description of the first feature
|
|
218
218
|
</schmancy-typography>
|
|
219
219
|
</div>
|