@mhmo91/schmancy 0.9.2 → 0.9.3
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/README.md +19 -75
- package/ai/INDEX.md +321 -0
- package/ai/area.md +194 -40
- package/ai/audio.md +69 -0
- package/ai/boat.md +47 -0
- package/ai/charts.md +93 -0
- package/ai/connectivity.md +36 -0
- package/ai/date-range-inline.md +44 -0
- package/ai/delay.md +50 -0
- package/ai/discovery.md +67 -0
- package/ai/expand.md +63 -0
- package/ai/extra.md +59 -0
- package/ai/float.md +14 -0
- package/ai/iframe.md +44 -0
- package/ai/json.md +33 -0
- package/ai/layout.md +63 -0
- package/ai/mailbox.md +102 -0
- package/ai/map.md +55 -0
- package/ai/mixins.md +169 -38
- package/ai/option.md +43 -0
- package/ai/page.md +42 -0
- package/ai/qr-scanner.md +51 -0
- package/ai/range.md +47 -0
- package/ai/rxjs-utils.md +60 -0
- package/ai/slider.md +43 -0
- package/ai/store.md +158 -49
- package/ai/teleport.md +55 -0
- package/ai/theme-button.md +26 -0
- package/ai/typewriter.md +46 -0
- package/ai/utils.md +95 -0
- package/ai/window.md +67 -0
- package/dist/ai/INDEX.md +321 -0
- package/dist/ai/area.md +194 -40
- package/dist/ai/audio.md +69 -0
- package/dist/ai/boat.md +47 -0
- package/dist/ai/charts.md +93 -0
- package/dist/ai/connectivity.md +36 -0
- package/dist/ai/date-range-inline.md +44 -0
- package/dist/ai/delay.md +50 -0
- package/dist/ai/discovery.md +67 -0
- package/dist/ai/expand.md +63 -0
- package/dist/ai/extra.md +59 -0
- package/dist/ai/float.md +14 -0
- package/dist/ai/iframe.md +44 -0
- package/dist/ai/json.md +33 -0
- package/dist/ai/layout.md +63 -0
- package/dist/ai/mailbox.md +102 -0
- package/dist/ai/map.md +55 -0
- package/dist/ai/mixins.md +169 -38
- package/dist/ai/option.md +43 -0
- package/dist/ai/page.md +42 -0
- package/dist/ai/qr-scanner.md +51 -0
- package/dist/ai/range.md +47 -0
- package/dist/ai/rxjs-utils.md +60 -0
- package/dist/ai/slider.md +43 -0
- package/dist/ai/store.md +158 -49
- package/dist/ai/teleport.md +55 -0
- package/dist/ai/theme-button.md +26 -0
- package/dist/ai/typewriter.md +46 -0
- package/dist/ai/utils.md +95 -0
- package/dist/ai/window.md +67 -0
- package/dist/{area-DbBcfm5p.js → area-CC8fUnra.js} +2 -2
- package/dist/{area-DbBcfm5p.js.map → area-CC8fUnra.js.map} +1 -1
- package/dist/{area-1h9xEpTc.cjs → area-wnWUAHEn.cjs} +1 -1
- package/dist/{area-1h9xEpTc.cjs.map → area-wnWUAHEn.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-B2Z3WK_7.cjs} +1 -1
- package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-B2Z3WK_7.cjs.map} +1 -1
- package/dist/{autocomplete-DDVsegep.js → autocomplete-CJ7YgtKN.js} +3 -3
- package/dist/{autocomplete-DDVsegep.js.map → autocomplete-CJ7YgtKN.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-Cf1oJ0ka.cjs → boat-B57_4TzJ.cjs} +1 -1
- package/dist/{boat-Cf1oJ0ka.cjs.map → boat-B57_4TzJ.cjs.map} +1 -1
- package/dist/{boat-T8Ov4-yA.js → boat-C9eU6NO-.js} +2 -2
- package/dist/{boat-T8Ov4-yA.js.map → boat-C9eU6NO-.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/{busy-DF9wztWL.cjs → busy--6oimtop.cjs} +1 -1
- package/dist/{busy-DF9wztWL.cjs.map → busy--6oimtop.cjs.map} +1 -1
- package/dist/{busy-BD6D5P-l.js → busy-CGZXy0h-.js} +1 -1
- package/dist/{busy-BD6D5P-l.js.map → busy-CGZXy0h-.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +2 -2
- package/dist/{card-Csvu8UJ9.cjs → card-BGJ0Hb1O.cjs} +1 -1
- package/dist/{card-Csvu8UJ9.cjs.map → card-BGJ0Hb1O.cjs.map} +1 -1
- package/dist/{card-DM_miKMd.js → card-C-ee-l5O.js} +1 -1
- package/dist/{card-DM_miKMd.js.map → card-C-ee-l5O.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.js +2 -2
- package/dist/{checkbox-sJujc_ga.cjs → checkbox-DuYaKoDZ.cjs} +1 -1
- package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-DuYaKoDZ.cjs.map} +1 -1
- package/dist/{checkbox-BgGtMaMR.js → checkbox-FRcorDrD.js} +1 -1
- package/dist/{checkbox-BgGtMaMR.js.map → checkbox-FRcorDrD.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-D_e6wijp.cjs → chips-BpA0A-qr.cjs} +1 -1
- package/dist/{chips-D_e6wijp.cjs.map → chips-BpA0A-qr.cjs.map} +1 -1
- package/dist/{chips-BZaH4wez.js → chips-CyzNbKJD.js} +3 -3
- package/dist/{chips-BZaH4wez.js.map → chips-CyzNbKJD.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-Q3cc6ukq.js → code-highlight-C7O9ltXm.js} +1 -1
- package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-C7O9ltXm.js.map} +1 -1
- package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-DsBdSQBG.cjs} +1 -1
- package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-DsBdSQBG.cjs.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-CRhkB3V2.js → components-CkMvOiTR.js} +2 -2
- package/dist/{components-CRhkB3V2.js.map → components-CkMvOiTR.js.map} +1 -1
- package/dist/{components-DnlEYYDs.cjs → components-dDI3xeIf.cjs} +1 -1
- package/dist/{components-DnlEYYDs.cjs.map → components-dDI3xeIf.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-cymbTDnl.cjs → date-range-70zhLUKE.cjs} +1 -1
- package/dist/{date-range-cymbTDnl.cjs.map → date-range-70zhLUKE.cjs.map} +1 -1
- package/dist/{date-range-C0IYnvHF.js → date-range-BrN_Bs6_.js} +3 -3
- package/dist/{date-range-C0IYnvHF.js.map → date-range-BrN_Bs6_.js.map} +1 -1
- package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-CPzD-tIv.cjs} +1 -1
- package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-CPzD-tIv.cjs.map} +1 -1
- package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Cp294DxR.js} +1 -1
- package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Cp294DxR.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-D6mQLUp-.cjs → delay-COcAkBqB.cjs} +1 -1
- package/dist/{delay-D6mQLUp-.cjs.map → delay-COcAkBqB.cjs.map} +1 -1
- package/dist/{delay-D1dVP93u.js → delay-IV0Swce2.js} +3 -3
- package/dist/{delay-D1dVP93u.js.map → delay-IV0Swce2.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Cv4OOrVW.js → details-CuKmr3Qw.js} +2 -2
- package/dist/{details-Cv4OOrVW.js.map → details-CuKmr3Qw.js.map} +1 -1
- package/dist/{details-CPT_Mi4e.cjs → details-DgWkPqmt.cjs} +1 -1
- package/dist/{details-CPT_Mi4e.cjs.map → details-DgWkPqmt.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/{divider-DDC-kND3.js → divider-BWoUbfgZ.js} +2 -2
- package/dist/{divider-DDC-kND3.js.map → divider-BWoUbfgZ.js.map} +1 -1
- package/dist/{divider-nZ_2to2N.cjs → divider-BghtrMbn.cjs} +1 -1
- package/dist/{divider-nZ_2to2N.cjs.map → divider-BghtrMbn.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-Bp3N8CcL.js → expand-CJU9m4ga.js} +3 -3
- package/dist/{expand-Bp3N8CcL.js.map → expand-CJU9m4ga.js.map} +1 -1
- package/dist/{expand-Crdts9q_.cjs → expand-XyDE5SsO.cjs} +1 -1
- package/dist/{expand-Crdts9q_.cjs.map → expand-XyDE5SsO.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-DupwhQhC.js → extra-BxXFmW1w.js} +2 -2
- package/dist/{extra-DupwhQhC.js.map → extra-BxXFmW1w.js.map} +1 -1
- package/dist/{extra-B0IZCg0t.cjs → extra-CsrRKKqE.cjs} +1 -1
- package/dist/{extra-B0IZCg0t.cjs.map → extra-CsrRKKqE.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-Dqdc1_S5.js → float-BD86t_NU.js} +2 -2
- package/dist/{float-Dqdc1_S5.js.map → float-BD86t_NU.js.map} +1 -1
- package/dist/{float-CQoJ_oSB.cjs → float-DBv1FINW.cjs} +1 -1
- package/dist/{float-CQoJ_oSB.cjs.map → float-DBv1FINW.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-CW5XNuTg.js → form-Cp5-I_ZV.js} +1 -1
- package/dist/{form-CW5XNuTg.js.map → form-Cp5-I_ZV.js.map} +1 -1
- package/dist/{form-CvoLqMY7.cjs → form-D0bIeDWT.cjs} +1 -1
- package/dist/{form-CvoLqMY7.cjs.map → form-D0bIeDWT.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icons-Cpfdb7sA.js → icons-BpU0_l92.js} +1 -1
- package/dist/{icons-Cpfdb7sA.js.map → icons-BpU0_l92.js.map} +1 -1
- package/dist/{icons-BLQHEbIk.cjs → icons-D8w_20mO.cjs} +1 -1
- package/dist/{icons-BLQHEbIk.cjs.map → icons-D8w_20mO.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-sJGXBbxT.cjs → iframe-BjwxA2Pg.cjs} +1 -1
- package/dist/{iframe-sJGXBbxT.cjs.map → iframe-BjwxA2Pg.cjs.map} +1 -1
- package/dist/{iframe-DG6HVYdy.js → iframe-tY1GY5g1.js} +1 -1
- package/dist/{iframe-DG6HVYdy.js.map → iframe-tY1GY5g1.js.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +33 -33
- package/dist/{input-BevxycIt.js → input-BnfTpRN9.js} +1 -1
- package/dist/{input-BevxycIt.js.map → input-BnfTpRN9.js.map} +1 -1
- package/dist/{input-DGTdmp1Q.cjs → input-BwxwognS.cjs} +1 -1
- package/dist/{input-DGTdmp1Q.cjs.map → input-BwxwognS.cjs.map} +1 -1
- package/dist/{input-chip-BWS-SFU4.js → input-chip-CkM2aYmO.js} +1 -1
- package/dist/{input-chip-BWS-SFU4.js.map → input-chip-CkM2aYmO.js.map} +1 -1
- package/dist/{input-chip-CKVtjInb.cjs → input-chip-MjOwX5EY.cjs} +1 -1
- package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-MjOwX5EY.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/{layout-CQdd8UCr.cjs → layout-BV0EeyUS.cjs} +1 -1
- package/dist/{layout-CQdd8UCr.cjs.map → layout-BV0EeyUS.cjs.map} +1 -1
- package/dist/{layout-DxLjlDfr.js → layout-CJSlZlFL.js} +2 -2
- package/dist/{layout-DxLjlDfr.js.map → layout-CJSlZlFL.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-C_863_XU.cjs → lightbox-CpNMZHZW.cjs} +1 -1
- package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CpNMZHZW.cjs.map} +1 -1
- package/dist/{lightbox-Bjc55lHH.js → lightbox-groqGmJH.js} +2 -2
- package/dist/{lightbox-Bjc55lHH.js.map → lightbox-groqGmJH.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CaXzdN9_.cjs → list-CyHd0Zc2.cjs} +1 -1
- package/dist/{list-CaXzdN9_.cjs.map → list-CyHd0Zc2.cjs.map} +1 -1
- package/dist/{list-BAqhlzZd.js → list-DzkqT_r-.js} +2 -2
- package/dist/{list-BAqhlzZd.js.map → list-DzkqT_r-.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-BG6_-nYX.cjs} +1 -1
- package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-BG6_-nYX.cjs.map} +1 -1
- package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-Dm-4L8zL.js} +1 -1
- package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-Dm-4L8zL.js.map} +1 -1
- package/dist/{mailbox-DuMUH4f3.js → mailbox-BcqnXYVP.js} +4 -4
- package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BcqnXYVP.js.map} +1 -1
- package/dist/{mailbox-BvsLXpvy.cjs → mailbox-C5eYTd7p.cjs} +1 -1
- package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-C5eYTd7p.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-C2Msv9TQ.cjs → map-BncheFt5.cjs} +1 -1
- package/dist/{map-C2Msv9TQ.cjs.map → map-BncheFt5.cjs.map} +1 -1
- package/dist/{map-DkIy1ph7.js → map-C0o1PgLE.js} +1 -1
- package/dist/{map-DkIy1ph7.js.map → map-C0o1PgLE.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-DEeDKW5U.js → menu-uwqlQbLd.js} +2 -2
- package/dist/{menu-DEeDKW5U.js.map → menu-uwqlQbLd.js.map} +1 -1
- package/dist/{menu-Mm71lv9k.cjs → menu-yXzwJZFf.cjs} +1 -1
- package/dist/{menu-Mm71lv9k.cjs.map → menu-yXzwJZFf.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-cTgXEDZ0.cjs → notification-BjwTfLAl.cjs} +1 -1
- package/dist/{notification-cTgXEDZ0.cjs.map → notification-BjwTfLAl.cjs.map} +1 -1
- package/dist/{notification-K-ug8cKk.js → notification-DzYT4deA.js} +3 -3
- package/dist/{notification-K-ug8cKk.js.map → notification-DzYT4deA.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-5rEOmtAm.cjs → option-BJsD3u2D.cjs} +1 -1
- package/dist/{option-5rEOmtAm.cjs.map → option-BJsD3u2D.cjs.map} +1 -1
- package/dist/{option-TFSKvSjT.js → option-JFHxgiYl.js} +1 -1
- package/dist/{option-TFSKvSjT.js.map → option-JFHxgiYl.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +3 -3
- package/dist/{progress-Cta3nM-f.js → progress-BUh5WBqx.js} +2 -2
- package/dist/{progress-Cta3nM-f.js.map → progress-BUh5WBqx.js.map} +1 -1
- package/dist/{progress-iu0AMbSg.cjs → progress-BoRmyGAa.cjs} +1 -1
- package/dist/{progress-iu0AMbSg.cjs.map → progress-BoRmyGAa.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-D69zybs5.js → provide-8MrDz_qX.js} +1 -1
- package/dist/{provide-D69zybs5.js.map → provide-8MrDz_qX.js.map} +1 -1
- package/dist/{provide-BEyyKlDM.cjs → provide-CDkxgjHb.cjs} +1 -1
- package/dist/{provide-BEyyKlDM.cjs.map → provide-CDkxgjHb.cjs.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/{radio-group-BjSWmYJC.js → radio-group-DbOWUPhi.js} +1 -1
- package/dist/{radio-group-BjSWmYJC.js.map → radio-group-DbOWUPhi.js.map} +1 -1
- package/dist/{radio-group-DKPN0T50.cjs → radio-group-rhrvhB5X.cjs} +1 -1
- package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-rhrvhB5X.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{scroll-mayaGGpE.cjs → scroll-BE9W9PF2.cjs} +1 -1
- package/dist/{scroll-mayaGGpE.cjs.map → scroll-BE9W9PF2.cjs.map} +1 -1
- package/dist/{scroll-tG1vaRFO.js → scroll-qGks1R0k.js} +1 -1
- package/dist/{scroll-tG1vaRFO.js.map → scroll-qGks1R0k.js.map} +1 -1
- package/dist/{select-CepryGGP.js → select-D9sgBRjU.js} +2 -2
- package/dist/{select-CepryGGP.js.map → select-D9sgBRjU.js.map} +1 -1
- package/dist/{select-C4YK5Arj.cjs → select-DXU2kzg4.cjs} +1 -1
- package/dist/{select-C4YK5Arj.cjs.map → select-DXU2kzg4.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-D2uT95S1.js → sheet-CIxCCJ3H.js} +4 -4
- package/dist/{sheet-D2uT95S1.js.map → sheet-CIxCCJ3H.js.map} +1 -1
- package/dist/{sheet-Cy4C2-kG.cjs → sheet-CeX6BbNp.cjs} +1 -1
- package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CeX6BbNp.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Os8KJGSE.js → sheet.service-CAB7weBc.js} +1 -1
- package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-CAB7weBc.js.map} +1 -1
- package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-DPAp7E3x.cjs} +1 -1
- package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-DPAp7E3x.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{src-BLcmKlCH.js → src-CbO5kJ2O.js} +42 -42
- package/dist/{src-BLcmKlCH.js.map → src-CbO5kJ2O.js.map} +1 -1
- package/dist/{src-tfU0akqI.cjs → src-SraDxEeg.cjs} +1 -1
- package/dist/{src-tfU0akqI.cjs.map → src-SraDxEeg.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{surface-CiiIYeJN.cjs → surface-DuH0pm2v.cjs} +1 -1
- package/dist/{surface-CiiIYeJN.cjs.map → surface-DuH0pm2v.cjs.map} +1 -1
- package/dist/{surface-fXvRpS6s.js → surface-eN_Jy2MJ.js} +3 -3
- package/dist/{surface-fXvRpS6s.js.map → surface-eN_Jy2MJ.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-CIXgN6iw.cjs} +1 -1
- package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-CIXgN6iw.cjs.map} +1 -1
- package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-D9jv1sKG.js} +1 -1
- package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-D9jv1sKG.js.map} +1 -1
- package/dist/{table-BRVKlNjl.cjs → table-C9rRQJEB.cjs} +1 -1
- package/dist/{table-BRVKlNjl.cjs.map → table-C9rRQJEB.cjs.map} +1 -1
- package/dist/{table-BeXnwSsq.js → table-Dg_tUGB_.js} +2 -2
- package/dist/{table-BeXnwSsq.js.map → table-Dg_tUGB_.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-y708NWQ2.js → tabs-BbFC9omR.js} +2 -2
- package/dist/{tabs-y708NWQ2.js.map → tabs-BbFC9omR.js.map} +1 -1
- package/dist/{tabs-CBU9Ctqm.cjs → tabs-soTL-x4G.cjs} +1 -1
- package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-soTL-x4G.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BIVhjNvD.js +225 -0
- package/dist/{tailwind.mixin-C4cx3IOr.js.map → tailwind.mixin-BIVhjNvD.js.map} +1 -1
- package/dist/tailwind.mixin-DSuEu-y3.cjs +2 -0
- package/dist/{tailwind.mixin-DGiyLbEi.cjs.map → tailwind.mixin-DSuEu-y3.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-BhAoJg8c.cjs → textarea-DaRUJ0ri.cjs} +1 -1
- package/dist/{textarea-BhAoJg8c.cjs.map → textarea-DaRUJ0ri.cjs.map} +1 -1
- package/dist/{textarea-Bl8-gQEJ.js → textarea-hChvHbNM.js} +1 -1
- package/dist/{textarea-Bl8-gQEJ.js.map → textarea-hChvHbNM.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-DZUpYJn-.js → theme-B0M8Hlyo.js} +3 -3
- package/dist/{theme-DZUpYJn-.js.map → theme-B0M8Hlyo.js.map} +1 -1
- package/dist/{theme-C-vdR-Ic.cjs → theme-ZYH2MqX9.cjs} +1 -1
- package/dist/{theme-C-vdR-Ic.cjs.map → theme-ZYH2MqX9.cjs.map} +1 -1
- package/dist/{theme-button-CwrvpOMK.js → theme-button-BtlX_Zgd.js} +1 -1
- package/dist/{theme-button-CwrvpOMK.js.map → theme-button-BtlX_Zgd.js.map} +1 -1
- package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Dvqg-rE_.cjs} +1 -1
- package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Dvqg-rE_.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-mxVw5dFn.js → typewriter-CCel8Nta.js} +3 -3
- package/dist/{typewriter-mxVw5dFn.js.map → typewriter-CCel8Nta.js.map} +1 -1
- package/dist/{typewriter-CXQIzqPV.cjs → typewriter-Cf9f2bdx.cjs} +1 -1
- package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-Cf9f2bdx.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{window-DFMlB1Tq.cjs → window-B9_14c12.cjs} +1 -1
- package/dist/{window-DFMlB1Tq.cjs.map → window-B9_14c12.cjs.map} +1 -1
- package/dist/{window-EWYJJC_H.js → window-CbgdwOZD.js} +2 -2
- package/dist/{window-EWYJJC_H.js.map → window-CbgdwOZD.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
- package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
package/ai/utils.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Schmancy Utils
|
|
2
|
+
|
|
3
|
+
> Non-component utilities exported from `@mhmo91/schmancy` (or `@mhmo91/schmancy/utils`). Animation presets, similarity search, number formatting, intersection observer wrapper, overlay z-index manager, and content hashing.
|
|
4
|
+
|
|
5
|
+
## Animation
|
|
6
|
+
|
|
7
|
+
See [animation.md](./animation.md) for the full Blackbird spring system. In brief:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import {
|
|
11
|
+
SPRING_SMOOTH, SPRING_SNAPPY, SPRING_BOUNCY, SPRING_GENTLE,
|
|
12
|
+
createAnimation, createRevealAnimation, createDismissAnimation, createScaleAnimation,
|
|
13
|
+
getEasing, prefersReducedMotion,
|
|
14
|
+
ANIMATION_CSS_VARS, tailwindAnimations, GRID_ANIMATION_CSS,
|
|
15
|
+
} from '@mhmo91/schmancy'
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Number Formatting — `numbers` / `Numbers`
|
|
19
|
+
Locale-aware number formatting + currency + rounding.
|
|
20
|
+
```typescript
|
|
21
|
+
import numbers from '@mhmo91/schmancy'
|
|
22
|
+
|
|
23
|
+
numbers.roundNumber(3.14159, 2) // 3.14
|
|
24
|
+
numbers.format(1234567.89) // "1,234,567.89" (system locale)
|
|
25
|
+
numbers.format(1234.5, 'de-DE') // "1.234,5"
|
|
26
|
+
numbers.formatCurrency(99.95, 'EUR') // "€99.95"
|
|
27
|
+
numbers.systemLocale // "en-US" / "de-DE" / etc.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Fuzzy Search — `similarity(query, target, options?)`
|
|
31
|
+
Autocomplete-tuned similarity scoring. Prioritizes start-matches and word boundaries.
|
|
32
|
+
```typescript
|
|
33
|
+
import { similarity } from '@mhmo91/schmancy'
|
|
34
|
+
|
|
35
|
+
similarity('john', 'John Doe') // ~0.975 (starts-with)
|
|
36
|
+
similarity('doe', 'John Doe') // ~0.765 (word-boundary)
|
|
37
|
+
similarity('jhn', 'John Doe') // ~0.3–0.5 (fuzzy)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Tiers:
|
|
41
|
+
- `1.00` exact
|
|
42
|
+
- `0.95–1.00` target starts with query
|
|
43
|
+
- `0.765–0.85` word-boundary match
|
|
44
|
+
- `0.56–0.70` substring
|
|
45
|
+
- `0.50` subsequence
|
|
46
|
+
- `0.00–0.50` fuzzy (Dice + Levenshtein + Jaccard + anagram)
|
|
47
|
+
|
|
48
|
+
Options:
|
|
49
|
+
| Key | Default | Effect |
|
|
50
|
+
|-----|---------|--------|
|
|
51
|
+
| `normalizeAccents` | `true` | Strip diacritics before compare |
|
|
52
|
+
| `includeWordJaccard` | `true` | Add word-set overlap to fuzzy score |
|
|
53
|
+
| `maxLevenshteinDistance` | `0` | Early-terminate above this distance (`0` = off) |
|
|
54
|
+
|
|
55
|
+
## Intersection Observer — `intersection$(element, options?)`
|
|
56
|
+
RxJS wrapper around `IntersectionObserver`.
|
|
57
|
+
```typescript
|
|
58
|
+
import { intersection$ } from '@mhmo91/schmancy'
|
|
59
|
+
|
|
60
|
+
intersection$(this.card, { threshold: 0.5 })
|
|
61
|
+
.pipe(takeUntil(this.disconnecting))
|
|
62
|
+
.subscribe(entries => {
|
|
63
|
+
if (entries[0].isIntersecting) this.loadContent()
|
|
64
|
+
})
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Overlay Stack — `overlayStack`
|
|
68
|
+
Singleton z-index coordinator used internally by dialogs, sheets, and windows. Ensures overlays stack in open order.
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { overlayStack } from '@mhmo91/schmancy'
|
|
72
|
+
|
|
73
|
+
// Anonymous (fire-and-forget) — dialogs/sheets
|
|
74
|
+
const z = overlayStack.getNextZIndex()
|
|
75
|
+
// …on close:
|
|
76
|
+
overlayStack.release()
|
|
77
|
+
|
|
78
|
+
// ID-tracked — windows (supports bringToFront)
|
|
79
|
+
overlayStack.assignZIndex('my-window')
|
|
80
|
+
overlayStack.bringToFront('my-window')
|
|
81
|
+
overlayStack.releaseId('my-window')
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Base z-index: `10000`. Counter resets when all overlays close.
|
|
85
|
+
|
|
86
|
+
## Content Hashing — `hashContent(string)`
|
|
87
|
+
Fast 32-bit FNV-1a style hash, returns a hex string. Used by [`schmancy-delay`](./delay.md) and [`schmancy-typewriter`](./typewriter.md) for session-scoped caching.
|
|
88
|
+
```typescript
|
|
89
|
+
import hashContent from '@mhmo91/schmancy/utils/hashContent'
|
|
90
|
+
const key = hashContent(element.outerHTML) // stable across renders for identical content
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## See Also
|
|
94
|
+
- [rxjs-utils](./rxjs-utils.md) — DOM observation helpers (`waitForElement`, `waitUntil`, etc.)
|
|
95
|
+
- [discovery](./discovery.md) — cross-shadow component discovery
|
package/ai/window.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# schmancy-window
|
|
2
|
+
|
|
3
|
+
> Floating draggable window with corner snapping, resize, and minimize/maximize states. Replaces deprecated `schmancy-float`.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-window id="chat" corner="bottom-right">
|
|
8
|
+
<span slot="header">Chat</span>
|
|
9
|
+
<schmancy-icon slot="icon">chat</schmancy-icon>
|
|
10
|
+
<div>Window body content…</div>
|
|
11
|
+
</schmancy-window>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Properties
|
|
15
|
+
| Property | Type | Default | Description |
|
|
16
|
+
|----------|------|---------|-------------|
|
|
17
|
+
| `id` | string | `'default'` | Unique window identifier (used by `windowManager` registry) |
|
|
18
|
+
| `open` | boolean | `false` | Body expanded state |
|
|
19
|
+
| `corner` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | `'bottom-right'` | Anchor corner |
|
|
20
|
+
| `freePosition` | boolean | `false` | Keep dragged position instead of snapping to corner |
|
|
21
|
+
| `resizable` | boolean | `false` | Allow user resizing from edges |
|
|
22
|
+
| `visualState` | `'minimized' \| 'normal' \| 'maximized'` | `'normal'` | Reflected state attribute |
|
|
23
|
+
| `expandedWidth` | string | responsive | e.g. `'320px'`, `'24rem'` |
|
|
24
|
+
| `expandedHeight` | string | auto | e.g. `'400px'`, `'50vh'` |
|
|
25
|
+
| `minWidth` | number | `280` | Minimum width px during resize |
|
|
26
|
+
| `minHeight` | number | `200` | Minimum height px during resize |
|
|
27
|
+
| `lowered` | boolean | `false` | Lower elevation shadow in collapsed state |
|
|
28
|
+
|
|
29
|
+
## Slots
|
|
30
|
+
| Slot | Purpose |
|
|
31
|
+
|------|---------|
|
|
32
|
+
| `icon` | Leading icon in the head (minimized FAB state) |
|
|
33
|
+
| `header` | Header label (visible when expanded) |
|
|
34
|
+
| (default) | Window body content (lazy rendered — not in DOM until first open) |
|
|
35
|
+
|
|
36
|
+
## Behavior
|
|
37
|
+
- Drag from head to reposition. Release snaps to the nearest corner unless `freePosition`.
|
|
38
|
+
- `windowManager` tracks focused window and resolves overlap between multiple windows.
|
|
39
|
+
- `cursorGlow` applied to head while expanded.
|
|
40
|
+
- Collapsed state uses a clip-path reveal animation; expand uses `SPRING_SMOOTH` physics.
|
|
41
|
+
- Body content mounts lazily on first expand (`_hasOpened`).
|
|
42
|
+
- All animations respect `prefers-reduced-motion` via `reducedMotion$`.
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
```html
|
|
46
|
+
<!-- Chat-style window docked bottom-right -->
|
|
47
|
+
<schmancy-window id="support" corner="bottom-right">
|
|
48
|
+
<schmancy-icon slot="icon">support_agent</schmancy-icon>
|
|
49
|
+
<span slot="header">Support</span>
|
|
50
|
+
<div class="p-4">How can we help?</div>
|
|
51
|
+
</schmancy-window>
|
|
52
|
+
|
|
53
|
+
<!-- Resizable, free-position floating panel -->
|
|
54
|
+
<schmancy-window id="inspector" resizable free-position expanded-width="420px" expanded-height="60vh">
|
|
55
|
+
<span slot="header">Inspector</span>
|
|
56
|
+
<div>…</div>
|
|
57
|
+
</schmancy-window>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## windowManager
|
|
61
|
+
```typescript
|
|
62
|
+
import { windowManager } from '@mhmo91/schmancy/window'
|
|
63
|
+
|
|
64
|
+
windowManager.focus('support') // Bring window to front
|
|
65
|
+
windowManager.getBounds('inspector') // Read tracked bounds
|
|
66
|
+
windowManager.all$ .subscribe(...) // Observable of registered windows
|
|
67
|
+
```
|
package/dist/ai/INDEX.md
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# Schmancy AI Index
|
|
2
|
+
|
|
3
|
+
> Single-file navigation for AI agents. Foundations first, then components sorted by **what job they do**.
|
|
4
|
+
|
|
5
|
+
Schmancy is not just a component library. It's four concentric layers:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌─ FOUNDATIONS ──────────────────────────────────────┐
|
|
9
|
+
│ Routing · State · Base class · Theme · Directives │
|
|
10
|
+
│ (Not components. The framework your app runs on.) │
|
|
11
|
+
├─ ATOMS ────────────────────────────────────────────┤
|
|
12
|
+
│ Typography · Icons · Surfaces · Buttons · Scroll │
|
|
13
|
+
│ (The vocabulary every screen repeats.) │
|
|
14
|
+
├─ COMPOSITES ───────────────────────────────────────┤
|
|
15
|
+
│ Forms · Navigation · Overlays · Feedback · Data │
|
|
16
|
+
│ (Job-specific components.) │
|
|
17
|
+
└─ UTILITIES ────────────────────────────────────────┘
|
|
18
|
+
Discovery · RxJS helpers · Search · Numbers · etc.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Most of a Schmancy app is foundations + atoms + services.** Composites are reached for when a real user-facing job needs them. Start in that order.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Layer 1 — Foundations
|
|
26
|
+
|
|
27
|
+
These are the load-bearing pieces. Touch them wrong and everything above breaks.
|
|
28
|
+
|
|
29
|
+
## 1.1 Routing — `area` + `schmancy-area` + `schmancy-route`
|
|
30
|
+
**Job:** Control which component occupies a region of the screen, with browser history, guards, params, and lazy loading.
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import { area, lazy } from '@mhmo91/schmancy'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<schmancy-area name="root" .default=${lazy(() => import('./home.page'))}>
|
|
38
|
+
<schmancy-route when="home-page" .component=${lazy(() => import('./home.page'))} />
|
|
39
|
+
<schmancy-route when="dashboard"
|
|
40
|
+
.component=${lazy(() => import('./dashboard.page'))}
|
|
41
|
+
.guard=${firebaseAuth$.pipe(map(u => !!u), takeUntil(this.disconnecting))}
|
|
42
|
+
@redirect=${() => area.push({ area: 'root', component: 'home-page', historyStrategy: 'replace' })}
|
|
43
|
+
/>
|
|
44
|
+
</schmancy-area>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- **Named areas**: multiple independent regions, 2-level nesting common (`name="root"` + `name="aria"` inside the outer shell).
|
|
48
|
+
- **Guards are Observables**: subscribe, emit `boolean`; when `false` a `redirect` event fires.
|
|
49
|
+
- **Lazy is mandatory** for route components — `lazy(() => import('...'))` returns a preloadable reference.
|
|
50
|
+
- **`when="tag-name"` must exactly match** `@customElement('tag-name')`.
|
|
51
|
+
- **Programmatic navigation**: `area.push({ area, component, params?, historyStrategy? })`.
|
|
52
|
+
- **Subscribe to route state**: `area.on('root').pipe(takeUntil(this.disconnecting)).subscribe(...)`.
|
|
53
|
+
|
|
54
|
+
→ Full doc: [area.md](./area.md)
|
|
55
|
+
|
|
56
|
+
## 1.2 State — `createContext` + `@select`
|
|
57
|
+
**Job:** App-wide reactive state with storage, without Redux boilerplate.
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { createContext, select } from '@mhmo91/schmancy'
|
|
61
|
+
|
|
62
|
+
// Declare once at module scope
|
|
63
|
+
export const userContext = createContext<User>(new User(), 'local', 'user')
|
|
64
|
+
export const sessionContext = createContext<Session>({}, 'session', 'session')
|
|
65
|
+
export const cacheContext = createContext<Map<string, Item>>(new Map(), 'memory', 'cache')
|
|
66
|
+
|
|
67
|
+
// Consume in a component — auto-subscribes and re-renders
|
|
68
|
+
@customElement('my-component')
|
|
69
|
+
class MyComponent extends $LitElement() {
|
|
70
|
+
@select(userContext) user!: User
|
|
71
|
+
|
|
72
|
+
firstUpdated() {
|
|
73
|
+
// Gate on readiness; chain with RxJS; clean up on disconnect
|
|
74
|
+
userContext.$.pipe(
|
|
75
|
+
filter(() => userContext.ready),
|
|
76
|
+
distinctUntilChanged((a, b) => a.id === b.id),
|
|
77
|
+
switchMap(u => this.loadForUser(u)),
|
|
78
|
+
takeUntil(this.disconnecting),
|
|
79
|
+
).subscribe()
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
- **Storage modes**: `'memory'` · `'local'` · `'session'` · `'indexeddb'`.
|
|
85
|
+
- **Collection-aware**: `Map` and `Array` contexts get `.set(k,v)`, `.delete(k)`, `.push(v)`, `.replace(...)` helpers.
|
|
86
|
+
- **`.ready`** is a boolean — gate async work behind `filter(() => ctx.ready)`.
|
|
87
|
+
- **`.$`** is a BehaviorSubject — compose with RxJS.
|
|
88
|
+
- **`.value`** is the synchronous snapshot.
|
|
89
|
+
- **`@selectItem`** for picking one entry from a collection context.
|
|
90
|
+
|
|
91
|
+
**Real architectures use many small contexts** (aria runs 9: user, organization, app state, templates, contacts, agents, compose, draft, strict) — not one monolith.
|
|
92
|
+
|
|
93
|
+
→ Full doc: [store.md](./store.md)
|
|
94
|
+
|
|
95
|
+
## 1.3 Base class — `$LitElement`
|
|
96
|
+
**Job:** Every Schmancy component extends this. It wires RxJS cleanup, Tailwind, and cross-shadow discovery into every element.
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { $LitElement } from '@mhmo91/schmancy/mixins'
|
|
100
|
+
|
|
101
|
+
@customElement('my-component')
|
|
102
|
+
class MyComponent extends $LitElement(css`:host { display: block }`) {
|
|
103
|
+
connectedCallback() {
|
|
104
|
+
super.connectedCallback()
|
|
105
|
+
// The `disconnecting` Subject emits once on disconnect
|
|
106
|
+
myObservable$.pipe(takeUntil(this.disconnecting)).subscribe()
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Provides: `disconnecting` (RxJS Subject) · `classMap()` (space-splitting) · `styleMap()` · `discover<T>(tag)` · Tailwind support · auto-response to discovery events.
|
|
112
|
+
|
|
113
|
+
**Rule of thumb:** if you're writing a Lit component inside a Schmancy app, extend `$LitElement`. No exceptions.
|
|
114
|
+
|
|
115
|
+
→ Full doc: [mixins.md](./mixins.md)
|
|
116
|
+
|
|
117
|
+
## 1.4 Theme — `schmancy-theme` + `theme` service
|
|
118
|
+
**Job:** Provide color scheme (dark/light), brand color, and CSS custom properties to everything below it.
|
|
119
|
+
|
|
120
|
+
```html
|
|
121
|
+
<schmancy-theme root scheme="dark" color="#6366F1">
|
|
122
|
+
<!-- entire app -->
|
|
123
|
+
</schmancy-theme>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
- One `root` theme per app, typically wrapping `schmancy-surface type="solid" fill="all"`.
|
|
127
|
+
- Nested `<schmancy-theme>` can re-scope color/scheme for a subtree.
|
|
128
|
+
- CSS vars auto-generated: `--schmancy-sys-color-{role}-{variant}`.
|
|
129
|
+
- `theme.fullscreen$` — observable of viewport fullscreen state.
|
|
130
|
+
|
|
131
|
+
→ Full doc: [theme.md](./theme.md)
|
|
132
|
+
|
|
133
|
+
## 1.5 Directives — behavior without components
|
|
134
|
+
**Job:** Attach physics, effects, visibility, and interactions to *any* element via Lit directive syntax. 19 directives, modular imports.
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { magnetic, cursorGlow, gravity, reveal, animateText, tooltip, drag, drop } from '@mhmo91/schmancy/directives'
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
```html
|
|
141
|
+
<schmancy-card ${cursorGlow()} ${gravity({ stagger: 100 })}>...</schmancy-card>
|
|
142
|
+
<div ${reveal(this.expanded, { preset: 'smooth' })}>expandable content</div>
|
|
143
|
+
<span ${animateText({ animation: 'blur-reveal' })}>Hello</span>
|
|
144
|
+
<button ${tooltip('Save your changes')}>Save</button>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Categories:
|
|
148
|
+
- **Physics**: `magnetic`, `cursorGlow`, `livingBorder`, `gravity`, `depthOfField`, `longPress`
|
|
149
|
+
- **Effects**: `nebula`, `liquid`, `ripple`
|
|
150
|
+
- **Text**: `animateText`, `cycleText`, `typewriter`
|
|
151
|
+
- **Visibility**: `reveal`, `intersect`
|
|
152
|
+
- **Interaction**: `drag`, `drop`, `color`, `tooltip`
|
|
153
|
+
|
|
154
|
+
→ Full doc: [directives.md](./directives.md)
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
# Layer 2 — Atoms
|
|
159
|
+
|
|
160
|
+
The display vocabulary. You'll use these on nearly every screen.
|
|
161
|
+
|
|
162
|
+
| Job | Tag | Doc |
|
|
163
|
+
|-----|-----|-----|
|
|
164
|
+
| **Text** | `schmancy-typography` | [typography](./typography.md) |
|
|
165
|
+
| **Iconography** | `schmancy-icon`, `schmancy-icon-button` | [icons](./icons.md), [button](./button.md) |
|
|
166
|
+
| **Primary actions** | `schmancy-button` | [button](./button.md) |
|
|
167
|
+
| **Glass depth container** | `schmancy-surface` | [surface](./surface.md) |
|
|
168
|
+
| **Scroll region** | `schmancy-scroll` | [layout](./layout.md) |
|
|
169
|
+
| **Visual separation** | `schmancy-divider` | [divider](./divider.md) |
|
|
170
|
+
| **Profile image** | `schmancy-avatar` | [avatar](./avatar.md) |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
# Layer 3 — Composites (sorted by job)
|
|
175
|
+
|
|
176
|
+
## Forms — collect input
|
|
177
|
+
| Job | Tag | Doc |
|
|
178
|
+
|-----|-----|-----|
|
|
179
|
+
| Validation container | `schmancy-form` | [form](./form.md) |
|
|
180
|
+
| Single-line text | `schmancy-input` | [input](./input.md) |
|
|
181
|
+
| Multi-line text | `schmancy-textarea` | [textarea](./textarea.md) |
|
|
182
|
+
| Single-choice dropdown | `schmancy-select` + `schmancy-option` | [select](./select.md), [option](./option.md) |
|
|
183
|
+
| Searchable dropdown | `schmancy-autocomplete` | [autocomplete](./autocomplete.md) |
|
|
184
|
+
| Boolean | `schmancy-checkbox` | [checkbox](./checkbox.md) |
|
|
185
|
+
| One-of-many | `schmancy-radio-group` | [radio-group](./radio-group.md) |
|
|
186
|
+
| Multi-select tags / filters | `schmancy-chips` | [chips](./chips.md) |
|
|
187
|
+
| Date / date range | `schmancy-date-range`, `schmancy-date-range-inline` | [date-range](./date-range.md), [date-range-inline](./date-range-inline.md) |
|
|
188
|
+
| Numeric slider | `schmancy-range` | [range](./range.md) |
|
|
189
|
+
| Country / timezone | `schmancy-select-countries`, `schmancy-select-timezones` | [extra](./extra.md) |
|
|
190
|
+
|
|
191
|
+
## Navigation — structural layout
|
|
192
|
+
| Job | Tag | Doc |
|
|
193
|
+
|-----|-----|-----|
|
|
194
|
+
| App shell with side drawer | `schmancy-nav-drawer` (+ navbar, content) | [nav-drawer](./nav-drawer.md) |
|
|
195
|
+
| Tabbed sub-views | `schmancy-tabs` | [tabs](./tabs.md) |
|
|
196
|
+
| Mobile bottom nav | `schmancy-navigation-bar` | [navigation-bar](./navigation-bar.md) |
|
|
197
|
+
| Desktop side rail | `schmancy-navigation-rail` | [navigation-rail](./navigation-rail.md) |
|
|
198
|
+
| Multi-step flow | `schmancy-steps` | [steps](./steps.md) |
|
|
199
|
+
| Master-detail split | `schmancy-content-drawer` | [content-drawer](./content-drawer.md) |
|
|
200
|
+
| Viewport-aware page root | `schmancy-page` | [page](./page.md) |
|
|
201
|
+
| Floating draggable panel | `schmancy-window`, `schmancy-boat`, `schmancy-float` | [window](./window.md), [boat](./boat.md), [float](./float.md) |
|
|
202
|
+
| FLIP transition between views | `schmancy-teleport` | [teleport](./teleport.md) |
|
|
203
|
+
|
|
204
|
+
## Overlays — temporarily above everything (services preferred)
|
|
205
|
+
| Job | API | Fallback tag | Doc |
|
|
206
|
+
|-----|-----|--------------|-----|
|
|
207
|
+
| Modal / confirm | **`$dialog()` service** | `schmancy-dialog` | [dialog](./dialog.md) |
|
|
208
|
+
| Toast / banner | **`$notify()` service** | `schmancy-notification` | [notification](./notification.md) |
|
|
209
|
+
| Side/bottom panel | **`schmancyContentDrawer.open()`** | `schmancy-sheet` | [sheet](./sheet.md) |
|
|
210
|
+
| Context menu | `schmancy-menu` | — | [menu](./menu.md) |
|
|
211
|
+
| Floating panel | `schmancy-dropdown` | — | [dropdown](./dropdown.md) |
|
|
212
|
+
| Hover hint | `tooltip` directive | `schmancy-tooltip` | [tooltip](./tooltip.md), [directives](./directives.md) |
|
|
213
|
+
| Image gallery | `schmancy-lightbox` | — | [lightbox](./lightbox.md) |
|
|
214
|
+
| Accordion | `schmancy-expand` | `schmancy-details` | [expand](./expand.md), [details](./details.md) |
|
|
215
|
+
|
|
216
|
+
**Service > component for overlays.** Real apps call `$dialog()` / `$notify()` / `schmancyContentDrawer.open()` hundreds of times — managing overlay lifecycle imperatively keeps templates clean.
|
|
217
|
+
|
|
218
|
+
## Interaction — actionable content
|
|
219
|
+
| Job | Tag | Doc |
|
|
220
|
+
|-----|-----|-----|
|
|
221
|
+
| Clickable container | `schmancy-card` | [card](./card.md) |
|
|
222
|
+
| Selectable list | `schmancy-list` + `schmancy-list-item` | [list](./list.md) |
|
|
223
|
+
| Expandable row | `schmancy-details` | [details](./details.md) |
|
|
224
|
+
| Tabular data | `schmancy-table` | [table](./table.md) |
|
|
225
|
+
| Hierarchical data | `schmancy-tree` | [tree](./tree.md) |
|
|
226
|
+
| Carousel | `schmancy-slider` + `schmancy-slide` | [slider](./slider.md) |
|
|
227
|
+
| Camera QR scan | `schmancy-qr-scanner` | [qr-scanner](./qr-scanner.md) |
|
|
228
|
+
|
|
229
|
+
## Feedback — status / progress
|
|
230
|
+
| Job | Tag | Doc |
|
|
231
|
+
|-----|-----|-----|
|
|
232
|
+
| Linear progress | `schmancy-progress` | [progress](./progress.md) |
|
|
233
|
+
| Spinner / skeleton overlay | `schmancy-busy` | [busy](./busy.md) |
|
|
234
|
+
| Status indicator | `schmancy-badge` | [badge](./badge.md) |
|
|
235
|
+
| Online/offline banner | `schmancy-connectivity-status` | [connectivity](./connectivity.md) |
|
|
236
|
+
| Deferred render with stagger | `schmancy-delay` | [delay](./delay.md) |
|
|
237
|
+
|
|
238
|
+
## Rich display — specialized rendering
|
|
239
|
+
| Job | Tag | Doc |
|
|
240
|
+
|-----|-----|-----|
|
|
241
|
+
| Syntax-highlighted code | `schmancy-code-highlight` | [code-highlight](./code-highlight.md) |
|
|
242
|
+
| Typewriter reveal | `schmancy-typewriter` | [typewriter](./typewriter.md) |
|
|
243
|
+
| JSON viewer (debug) | `schmancy-json` | [json](./json.md) |
|
|
244
|
+
| Sandboxed iframe | `schmancy-iframe` | [iframe](./iframe.md) |
|
|
245
|
+
| Google Maps | `schmancy-map` | [map](./map.md) |
|
|
246
|
+
| Area chart | `schmancy-area-chart` | [charts](./charts.md) |
|
|
247
|
+
| Horizontal pills chart | `schmancy-pills` | [charts](./charts.md) |
|
|
248
|
+
| Theme toggle button | `schmancy-theme-button` | [theme-button](./theme-button.md) |
|
|
249
|
+
|
|
250
|
+
## Domain — specific to a workflow
|
|
251
|
+
| Job | Tag | Doc |
|
|
252
|
+
|-----|-----|-----|
|
|
253
|
+
| Email composition | `schmancy-mailbox` (+ 5 sub-tags) | [mailbox](./mailbox.md) |
|
|
254
|
+
|
|
255
|
+
## Layout primitives (prefer Tailwind for new code)
|
|
256
|
+
| Job | Tag | Doc |
|
|
257
|
+
|-----|-----|-----|
|
|
258
|
+
| Grid / flex / scroll | `schmancy-grid`, `schmancy-flex`, `schmancy-scroll`, `sch-grid`, `sch-flex` | [layout](./layout.md) |
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
# Layer 4 — Utilities (non-component)
|
|
263
|
+
|
|
264
|
+
| Module | Purpose | Doc |
|
|
265
|
+
|--------|---------|-----|
|
|
266
|
+
| Audio | Synthesized emotional sounds (`sound.play('joyful')`) | [audio](./audio.md) |
|
|
267
|
+
| Discovery | Cross-shadow-DOM component lookup | [discovery](./discovery.md) |
|
|
268
|
+
| RxJS utils | `waitForElement`, `waitUntil`, `mutationObserver` | [rxjs-utils](./rxjs-utils.md) |
|
|
269
|
+
| Utils | `similarity`, `numbers`, `overlayStack`, `intersection$`, `hashContent` | [utils](./utils.md) |
|
|
270
|
+
| Animation | Spring presets, `createAnimation`, Tailwind integration | [animation](./animation.md) |
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
# The 80/20 cheat sheet
|
|
275
|
+
|
|
276
|
+
If you're new to Schmancy and shipping a screen today, reach for these in this order:
|
|
277
|
+
|
|
278
|
+
1. **Wrap the app** in `<schmancy-theme root>` + `<schmancy-surface type="solid" fill="all">` + `<schmancy-scroll>`.
|
|
279
|
+
2. **Route** with `<schmancy-area name="root">` + `<schmancy-route>` + `lazy()`.
|
|
280
|
+
3. **Store** state in `createContext(..., 'local')` + `@select` in components.
|
|
281
|
+
4. **Extend** `$LitElement` in every component. Use `takeUntil(this.disconnecting)` for every subscription.
|
|
282
|
+
5. **Compose screens** from atoms: `schmancy-typography`, `schmancy-icon`, `schmancy-button`, `schmancy-surface`, `schmancy-divider`.
|
|
283
|
+
6. **Forms**: `schmancy-input` + `schmancy-chips` + `schmancy-checkbox` + `schmancy-form`. Reach for `schmancy-select` / `schmancy-autocomplete` only when needed.
|
|
284
|
+
7. **Overlays**: `$dialog()` + `$notify()` + `schmancyContentDrawer.open()` — service APIs, not template tags.
|
|
285
|
+
8. **Effects**: reach for `cursorGlow`, `magnetic`, `reveal`, `animateText` directives before writing CSS animations.
|
|
286
|
+
|
|
287
|
+
Everything else is demand-driven.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
# Conventions (enforce these)
|
|
292
|
+
|
|
293
|
+
- **Lists use `repeat(items, item => item.id, tpl)`** — never `.map()` in templates.
|
|
294
|
+
- **View switching uses `cache(...)`** — preserves DOM and state.
|
|
295
|
+
- **Expensive work uses `guard([deps], fn)`** — memoizes against identity changes.
|
|
296
|
+
- **DOM access uses `ref(createRef())`** — never `querySelector` for own shadow tree if a ref will do.
|
|
297
|
+
- **Conditionals use `when(...)` / `choose(...)` / `ifDefined(...)`** — cleaner than ternaries.
|
|
298
|
+
- **All subscriptions use `.pipe(takeUntil(this.disconnecting))`** — no manual unsubscribe.
|
|
299
|
+
- **No `setTimeout` / `setInterval` / `addEventListener`** — use RxJS (`timer`, `interval`, `fromEvent`).
|
|
300
|
+
- **No hardcoded colors** — use `--schmancy-sys-color-*` CSS vars or Tailwind theme classes.
|
|
301
|
+
- **No mixing `classMap` with string interpolation** — it must be the sole expression in `class=`.
|
|
302
|
+
- **ARIA wiring on combobox forms**: `role="combobox"` + `aria-haspopup="listbox"` + `aria-expanded` + `aria-controls` + a `#live-status` live region.
|
|
303
|
+
- **Overlay z-index**: always go through `overlayStack` (dialogs/sheets/windows already do).
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
# Services reference (import these by name)
|
|
308
|
+
|
|
309
|
+
| Service | From | Purpose |
|
|
310
|
+
|---------|------|---------|
|
|
311
|
+
| `area` | `@mhmo91/schmancy` | Router imperative API |
|
|
312
|
+
| `$dialog` | `@mhmo91/schmancy` | Modal/confirm dialogs |
|
|
313
|
+
| `$notify` | `@mhmo91/schmancy` | Toast notifications |
|
|
314
|
+
| `schmancyContentDrawer` | `@mhmo91/schmancy` | Side panel |
|
|
315
|
+
| `theme` | `@mhmo91/schmancy` | Theme state + fullscreen$ |
|
|
316
|
+
| `sound` | `@mhmo91/schmancy` | Emotional sounds |
|
|
317
|
+
| `overlayStack` | `@mhmo91/schmancy` | Z-index coordinator |
|
|
318
|
+
| `windowManager` | `@mhmo91/schmancy/window` | Window registry |
|
|
319
|
+
| `teleportationService` | `@mhmo91/schmancy/teleport` | Teleport coordination |
|
|
320
|
+
| `reducedMotion$` | `@mhmo91/schmancy/directives` | Reactive reduced-motion preference |
|
|
321
|
+
| `fromResizeObserver` | `@mhmo91/schmancy/directives` | RxJS ResizeObserver |
|