@mhmo91/schmancy 0.9.2 → 0.9.4
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 +72 -0
- package/ai/area.md +119 -39
- 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 +64 -35
- 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 +92 -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 +72 -0
- package/dist/ai/area.md +119 -39
- 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 +64 -35
- 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 +92 -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-CRoGqD_u.js} +2 -2
- package/dist/area-CRoGqD_u.js.map +1 -0
- package/dist/{area-1h9xEpTc.cjs → area-JPykB7A9.cjs} +1 -1
- package/dist/area-JPykB7A9.cjs.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-5rVhbieU.cjs} +1 -1
- package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
- package/dist/{autocomplete-DDVsegep.js → autocomplete-BllPQwr8.js} +3 -3
- package/dist/{autocomplete-DDVsegep.js.map → autocomplete-BllPQwr8.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-T8Ov4-yA.js → boat-BDTQ-du9.js} +2 -2
- package/dist/{boat-T8Ov4-yA.js.map → boat-BDTQ-du9.js.map} +1 -1
- package/dist/{boat-Cf1oJ0ka.cjs → boat-DYEAZ8Qj.cjs} +1 -1
- package/dist/{boat-Cf1oJ0ka.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/{busy-BD6D5P-l.js → busy-ChDAeaKF.js} +1 -1
- package/dist/{busy-BD6D5P-l.js.map → busy-ChDAeaKF.js.map} +1 -1
- package/dist/{busy-DF9wztWL.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
- package/dist/{busy-DF9wztWL.cjs.map → busy-Dj7Xn0Z0.cjs.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-BvPWVEJX.cjs} +1 -1
- package/dist/{card-Csvu8UJ9.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
- package/dist/{card-DM_miKMd.js → card-DZFPRPqs.js} +1 -1
- package/dist/{card-DM_miKMd.js.map → card-DZFPRPqs.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-BC_37rsG.cjs} +1 -1
- package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
- package/dist/{checkbox-BgGtMaMR.js → checkbox-GSSjqo6w.js} +1 -1
- package/dist/{checkbox-BgGtMaMR.js.map → checkbox-GSSjqo6w.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-D_e6wijp.cjs → chips-B19XS8Xc.cjs} +1 -1
- package/dist/{chips-D_e6wijp.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
- package/dist/{chips-BZaH4wez.js → chips-B9oAEfE_.js} +3 -3
- package/dist/{chips-BZaH4wez.js.map → chips-B9oAEfE_.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-Q3cc6ukq.js → code-highlight-DCk5lJY-.js} +1 -1
- package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
- package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
- package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-CRhkB3V2.js → components-COsM6sJZ.js} +2 -2
- package/dist/{components-CRhkB3V2.js.map → components-COsM6sJZ.js.map} +1 -1
- package/dist/{components-DnlEYYDs.cjs → components-CyD6a7gQ.cjs} +1 -1
- package/dist/{components-DnlEYYDs.cjs.map → components-CyD6a7gQ.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-C0IYnvHF.js → date-range-Sfyco9-n.js} +3 -3
- package/dist/{date-range-C0IYnvHF.js.map → date-range-Sfyco9-n.js.map} +1 -1
- package/dist/{date-range-cymbTDnl.cjs → date-range-ZAaQB22I.cjs} +1 -1
- package/dist/{date-range-cymbTDnl.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
- package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Bl8qbiQF.js} +1 -1
- package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
- package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
- package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-m7nLjOMI.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-D6mQLUp-.cjs → delay-7boauN6N.cjs} +1 -1
- package/dist/{delay-D6mQLUp-.cjs.map → delay-7boauN6N.cjs.map} +1 -1
- package/dist/{delay-D1dVP93u.js → delay-CgX6m0HN.js} +3 -3
- package/dist/{delay-D1dVP93u.js.map → delay-CgX6m0HN.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-CPT_Mi4e.cjs → details-BHnk8l4q.cjs} +1 -1
- package/dist/{details-CPT_Mi4e.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
- package/dist/{details-Cv4OOrVW.js → details-BPkUg8Cq.js} +2 -2
- package/dist/{details-Cv4OOrVW.js.map → details-BPkUg8Cq.js.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/directives.cjs.map +1 -1
- package/dist/directives.js.map +1 -1
- package/dist/discovery.cjs.map +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/{divider-DDC-kND3.js → divider-CW9a7MMj.js} +2 -2
- package/dist/{divider-DDC-kND3.js.map → divider-CW9a7MMj.js.map} +1 -1
- package/dist/{divider-nZ_2to2N.cjs → divider-_khrhrZo.cjs} +1 -1
- package/dist/{divider-nZ_2to2N.cjs.map → divider-_khrhrZo.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-Crdts9q_.cjs → expand-Cp7-PH8b.cjs} +1 -1
- package/dist/{expand-Crdts9q_.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
- package/dist/{expand-Bp3N8CcL.js → expand-iQ7EOMP7.js} +3 -3
- package/dist/{expand-Bp3N8CcL.js.map → expand-iQ7EOMP7.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-B0IZCg0t.cjs → extra-IKAiJJhv.cjs} +1 -1
- package/dist/{extra-B0IZCg0t.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
- package/dist/{extra-DupwhQhC.js → extra-wEpvEFbK.js} +2 -2
- package/dist/{extra-DupwhQhC.js.map → extra-wEpvEFbK.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-Dqdc1_S5.js → float-BQ_urmMs.js} +2 -2
- package/dist/{float-Dqdc1_S5.js.map → float-BQ_urmMs.js.map} +1 -1
- package/dist/{float-CQoJ_oSB.cjs → float-D5rNC82i.cjs} +1 -1
- package/dist/{float-CQoJ_oSB.cjs.map → float-D5rNC82i.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-CvoLqMY7.cjs → form-BqN1AGFj.cjs} +1 -1
- package/dist/{form-CvoLqMY7.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
- package/dist/{form-CW5XNuTg.js → form-CajC5HnO.js} +1 -1
- package/dist/{form-CW5XNuTg.js.map → form-CajC5HnO.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icons-BLQHEbIk.cjs → icons-B57_93VV.cjs} +1 -1
- package/dist/{icons-BLQHEbIk.cjs.map → icons-B57_93VV.cjs.map} +1 -1
- package/dist/{icons-Cpfdb7sA.js → icons-BDqiGXrO.js} +1 -1
- package/dist/{icons-Cpfdb7sA.js.map → icons-BDqiGXrO.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-sJGXBbxT.cjs → iframe-DNHL3GIk.cjs} +1 -1
- package/dist/{iframe-sJGXBbxT.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
- package/dist/{iframe-DG6HVYdy.js → iframe-WnWPIrBG.js} +1 -1
- package/dist/{iframe-DG6HVYdy.js.map → iframe-WnWPIrBG.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-DGTdmp1Q.cjs → input-BiSrTcrR.cjs} +1 -1
- package/dist/{input-DGTdmp1Q.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
- package/dist/{input-BevxycIt.js → input-VaXHFrRn.js} +1 -1
- package/dist/{input-BevxycIt.js.map → input-VaXHFrRn.js.map} +1 -1
- package/dist/{input-chip-CKVtjInb.cjs → input-chip-Dy-AiP55.cjs} +1 -1
- package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
- package/dist/{input-chip-BWS-SFU4.js → input-chip-QejNcRnS.js} +1 -1
- package/dist/{input-chip-BWS-SFU4.js.map → input-chip-QejNcRnS.js.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-DxLjlDfr.js → layout-CnsXeCAy.js} +2 -2
- package/dist/{layout-DxLjlDfr.js.map → layout-CnsXeCAy.js.map} +1 -1
- package/dist/{layout-CQdd8UCr.cjs → layout-DNYG3phx.cjs} +1 -1
- package/dist/{layout-CQdd8UCr.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-Bjc55lHH.js → lightbox-BrI1Z31s.js} +2 -2
- package/dist/{lightbox-Bjc55lHH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
- package/dist/{lightbox-C_863_XU.cjs → lightbox-CmACf0t5.cjs} +1 -1
- package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-BAqhlzZd.js → list-Cm-jjXxM.js} +2 -2
- package/dist/{list-BAqhlzZd.js.map → list-Cm-jjXxM.js.map} +1 -1
- package/dist/{list-CaXzdN9_.cjs → list-swIL9VDv.cjs} +1 -1
- package/dist/{list-CaXzdN9_.cjs.map → list-swIL9VDv.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
- package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
- package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-6jJYHCrZ.js} +1 -1
- package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
- package/dist/{mailbox-DuMUH4f3.js → mailbox-BuvsVaAQ.js} +4 -4
- package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
- package/dist/{mailbox-BvsLXpvy.cjs → mailbox-D6LkQcN5.cjs} +1 -1
- package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-DkIy1ph7.js → map-CQiKAxC3.js} +1 -1
- package/dist/{map-DkIy1ph7.js.map → map-CQiKAxC3.js.map} +1 -1
- package/dist/{map-C2Msv9TQ.cjs → map-D5NN4VET.cjs} +1 -1
- package/dist/{map-C2Msv9TQ.cjs.map → map-D5NN4VET.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-DEeDKW5U.js → menu-C1x04YZw.js} +2 -2
- package/dist/{menu-DEeDKW5U.js.map → menu-C1x04YZw.js.map} +1 -1
- package/dist/{menu-Mm71lv9k.cjs → menu-CkgMO9K5.cjs} +1 -1
- package/dist/{menu-Mm71lv9k.cjs.map → menu-CkgMO9K5.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-K-ug8cKk.js → notification-BnBgxjF-.js} +3 -3
- package/dist/{notification-K-ug8cKk.js.map → notification-BnBgxjF-.js.map} +1 -1
- package/dist/{notification-cTgXEDZ0.cjs → notification-CZFEhWxc.cjs} +1 -1
- package/dist/{notification-cTgXEDZ0.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-5rEOmtAm.cjs → option-BrxCVwSx.cjs} +1 -1
- package/dist/{option-5rEOmtAm.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
- package/dist/{option-TFSKvSjT.js → option-DBO8xZwd.js} +1 -1
- package/dist/{option-TFSKvSjT.js.map → option-DBO8xZwd.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-iu0AMbSg.cjs → progress-Db2e4_Zd.cjs} +1 -1
- package/dist/{progress-iu0AMbSg.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
- package/dist/{progress-Cta3nM-f.js → progress-DeiHxXo7.js} +2 -2
- package/dist/{progress-Cta3nM-f.js.map → progress-DeiHxXo7.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-D69zybs5.js → provide-C1aQhxYo.js} +1 -1
- package/dist/{provide-D69zybs5.js.map → provide-C1aQhxYo.js.map} +1 -1
- package/dist/{provide-BEyyKlDM.cjs → provide-DHnhQtCH.cjs} +1 -1
- package/dist/{provide-BEyyKlDM.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/{radio-group-DKPN0T50.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
- package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
- package/dist/{radio-group-BjSWmYJC.js → radio-group-zSO0AkJf.js} +1 -1
- package/dist/{radio-group-BjSWmYJC.js.map → radio-group-zSO0AkJf.js.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-QMCmbbDv.cjs} +1 -1
- package/dist/{scroll-mayaGGpE.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
- package/dist/{scroll-tG1vaRFO.js → scroll-cBDzye64.js} +1 -1
- package/dist/{scroll-tG1vaRFO.js.map → scroll-cBDzye64.js.map} +1 -1
- package/dist/{select-C4YK5Arj.cjs → select-Ct37l3lg.cjs} +1 -1
- package/dist/{select-C4YK5Arj.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
- package/dist/{select-CepryGGP.js → select-c6HbWvKP.js} +2 -2
- package/dist/{select-CepryGGP.js.map → select-c6HbWvKP.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-D2uT95S1.js → sheet-BMXcUiIm.js} +4 -4
- package/dist/{sheet-D2uT95S1.js.map → sheet-BMXcUiIm.js.map} +1 -1
- package/dist/{sheet-Cy4C2-kG.cjs → sheet-CQec-bCV.cjs} +1 -1
- package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Os8KJGSE.js → sheet.service-BcPV3Du4.js} +1 -1
- package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
- package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
- package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{src-BLcmKlCH.js → src-BLngW2bl.js} +42 -42
- package/dist/{src-BLcmKlCH.js.map → src-BLngW2bl.js.map} +1 -1
- package/dist/{src-tfU0akqI.cjs → src-BtQVyqMy.cjs} +1 -1
- package/dist/{src-tfU0akqI.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{surface-CiiIYeJN.cjs → surface-BjKZoJxK.cjs} +1 -1
- package/dist/{surface-CiiIYeJN.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
- package/dist/{surface-fXvRpS6s.js → surface-pK8hME5c.js} +3 -3
- package/dist/{surface-fXvRpS6s.js.map → surface-pK8hME5c.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
- package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
- package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-CBNRpJum.js} +1 -1
- package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
- package/dist/{table-BeXnwSsq.js → table-BXIHX9h4.js} +2 -2
- package/dist/{table-BeXnwSsq.js.map → table-BXIHX9h4.js.map} +1 -1
- package/dist/{table-BRVKlNjl.cjs → table-CiqgZzSd.cjs} +1 -1
- package/dist/{table-BRVKlNjl.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-CBU9Ctqm.cjs → tabs-CKa-W4qA.cjs} +1 -1
- package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
- package/dist/{tabs-y708NWQ2.js → tabs-nbV5eblZ.js} +2 -2
- package/dist/{tabs-y708NWQ2.js.map → tabs-nbV5eblZ.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
- package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
- package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
- package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-BhAoJg8c.cjs → textarea-Cp1ZE60O.cjs} +1 -1
- package/dist/{textarea-BhAoJg8c.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
- package/dist/{textarea-Bl8-gQEJ.js → textarea-D7q8exMg.js} +1 -1
- package/dist/{textarea-Bl8-gQEJ.js.map → textarea-D7q8exMg.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-C-vdR-Ic.cjs → theme-Da4SPq9X.cjs} +1 -1
- package/dist/{theme-C-vdR-Ic.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
- package/dist/{theme-DZUpYJn-.js → theme-_VPV6Bxh.js} +3 -3
- package/dist/{theme-DZUpYJn-.js.map → theme-_VPV6Bxh.js.map} +1 -1
- package/dist/{theme-button-CwrvpOMK.js → theme-button--sX8A-m1.js} +1 -1
- package/dist/{theme-button-CwrvpOMK.js.map → theme-button--sX8A-m1.js.map} +1 -1
- package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
- package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Ci8VQ7KW.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-CXQIzqPV.cjs → typewriter-B2TnHPjw.cjs} +1 -1
- package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
- package/dist/{typewriter-mxVw5dFn.js → typewriter-BrZNa8T-.js} +3 -3
- package/dist/{typewriter-mxVw5dFn.js.map → typewriter-BrZNa8T-.js.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-EWYJJC_H.js → window-CM1ycigo.js} +2 -2
- package/dist/{window-EWYJJC_H.js.map → window-CM1ycigo.js.map} +1 -1
- package/dist/{window-DFMlB1Tq.cjs → window-Uii13x_r.cjs} +1 -1
- package/dist/{window-DFMlB1Tq.cjs.map → window-Uii13x_r.cjs.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/mixins/baseElement.ts +1 -1
- package/mixins/discovery.service.ts +1 -1
- package/package.json +1 -2
- package/src/area/area.service.ts +1 -1
- package/src/area/router.types.ts +1 -1
- package/src/directives/animate-text.ts +1 -1
- package/src/discovery/discovery.service.ts +1 -1
- package/src/input/input.ts +1 -1
- package/src/mailbox/README.md +7 -10
- package/src/mailbox/types.ts +0 -1
- package/types/mixins/discovery.service.d.ts +1 -1
- package/types/src/discovery/discovery.service.d.ts +1 -1
- package/types/src/mailbox/types.d.ts +0 -1
- package/dist/area-1h9xEpTc.cjs.map +0 -1
- package/dist/area-DbBcfm5p.js.map +0 -1
- package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
- package/dist/tailwind.mixin-C4cx3IOr.js.map +0 -1
- package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
- package/dist/tailwind.mixin-DGiyLbEi.cjs.map +0 -1
- package/src/area/readme.md +0 -338
- package/src/area/router-guide.md +0 -360
- package/src/autocomplete/README.md +0 -485
- package/src/content-drawer/readme.md +0 -709
- package/src/icons/readme.md +0 -37
- package/src/list/readme.md +0 -62
- package/src/radio-group/readme.md +0 -315
- package/src/select/README.md +0 -405
- package/src/tabs/Readme.md +0 -397
- package/src/teleport/readme.md +0 -91
- package/src/tree/README.md +0 -59
- package/src/typewriter/IMPROVEMENTS.md +0 -174
- package/src/typewriter/QUICK_REFERENCE.md +0 -166
- package/src/typewriter/test-typewriter.html +0 -97
package/ai/mixins.md
CHANGED
|
@@ -1,70 +1,99 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `$LitElement`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Base class for Schmancy components. Extends `LitElement` with RxJS cleanup, Tailwind support, and cross-shadow discovery.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
The base class for all Schmancy components. Extends LitElement with Tailwind support and RxJS cleanup.
|
|
5
|
+
## Usage
|
|
8
6
|
|
|
9
7
|
```typescript
|
|
10
|
-
import { $LitElement } from '@mhmo91/schmancy/
|
|
11
|
-
import {
|
|
8
|
+
import { $LitElement } from '@mhmo91/schmancy/mixins'
|
|
9
|
+
import { customElement } from 'lit/decorators.js'
|
|
10
|
+
import { css, html } from 'lit'
|
|
12
11
|
|
|
13
12
|
@customElement('my-component')
|
|
14
|
-
class MyComponent extends $LitElement(css
|
|
15
|
-
|
|
13
|
+
class MyComponent extends $LitElement(css`
|
|
14
|
+
:host { display: block; }
|
|
15
|
+
`) {
|
|
16
|
+
render() {
|
|
17
|
+
return html`<slot></slot>`
|
|
18
|
+
}
|
|
16
19
|
}
|
|
17
20
|
```
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
`$LitElement(style?)` accepts either a Lit `css` tagged literal or a string (e.g. SCSS imported with `?inline`).
|
|
23
|
+
|
|
24
|
+
## Provided members
|
|
20
25
|
|
|
21
|
-
### disconnecting
|
|
22
|
-
|
|
26
|
+
### `disconnecting: Subject<void>`
|
|
27
|
+
Emits once when the element disconnects. Pair with `takeUntil` for cleanup:
|
|
23
28
|
|
|
24
29
|
```typescript
|
|
25
30
|
connectedCallback() {
|
|
26
31
|
super.connectedCallback()
|
|
27
32
|
someObservable$.pipe(
|
|
28
|
-
takeUntil(this.disconnecting)
|
|
33
|
+
takeUntil(this.disconnecting),
|
|
29
34
|
).subscribe()
|
|
30
35
|
}
|
|
31
36
|
```
|
|
32
37
|
|
|
33
|
-
### classMap(
|
|
34
|
-
|
|
38
|
+
### `classMap(obj)`
|
|
39
|
+
Wraps Lit's `classMap` so keys can be space-separated:
|
|
35
40
|
|
|
36
41
|
```typescript
|
|
37
|
-
|
|
38
|
-
class=${this.classMap({
|
|
42
|
+
html`<div class=${this.classMap({
|
|
39
43
|
'flex items-center gap-2': true,
|
|
40
|
-
'
|
|
41
|
-
})}
|
|
44
|
+
'opacity-50': this.disabled,
|
|
45
|
+
})}></div>`
|
|
42
46
|
```
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
Must be the only expression in `class=` — don't mix with string interpolation.
|
|
45
49
|
|
|
46
|
-
### styleMap(
|
|
47
|
-
|
|
50
|
+
### `styleMap(obj)`
|
|
51
|
+
Passthrough to Lit's `styleMap`.
|
|
48
52
|
|
|
49
53
|
```typescript
|
|
50
|
-
style=${this.styleMap({ width:
|
|
54
|
+
html`<div style=${this.styleMap({ width: `${w}px` })}></div>`
|
|
51
55
|
```
|
|
52
56
|
|
|
53
|
-
### discover(tag)
|
|
54
|
-
Find
|
|
57
|
+
### `discover<T>(tag): Observable<T | null>`
|
|
58
|
+
Find another Schmancy component by tag via event-based handshake. Works across shadow DOM.
|
|
55
59
|
|
|
56
60
|
```typescript
|
|
57
|
-
this.discover<
|
|
58
|
-
takeUntil(this.disconnecting)
|
|
59
|
-
).subscribe(
|
|
61
|
+
this.discover<SchmancyDialog>('schmancy-dialog').pipe(
|
|
62
|
+
takeUntil(this.disconnecting),
|
|
63
|
+
).subscribe(dialog => dialog?.setDefaultAction('confirm'))
|
|
60
64
|
```
|
|
61
65
|
|
|
62
|
-
###
|
|
63
|
-
- `
|
|
64
|
-
|
|
66
|
+
### Auto-response to discovery
|
|
67
|
+
Every `$LitElement` responds to `{its-tag}-where-are-you` events with `{its-tag}-here-i-am` carrying `{ detail: { component: this } }`.
|
|
68
|
+
|
|
69
|
+
## Component skeleton
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
@customElement('my-component')
|
|
73
|
+
export class MyComponent extends $LitElement(css`:host { display: block }`) {
|
|
74
|
+
@property({ type: String, reflect: true }) variant: 'a' | 'b' = 'a'
|
|
75
|
+
@state() private _open = false
|
|
76
|
+
|
|
77
|
+
connectedCallback() {
|
|
78
|
+
super.connectedCallback()
|
|
79
|
+
// subscriptions here, with takeUntil(this.disconnecting)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
render() {
|
|
83
|
+
return html`<slot></slot>`
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
declare global {
|
|
88
|
+
interface HTMLElementTagNameMap {
|
|
89
|
+
'my-component': MyComponent
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
65
93
|
|
|
66
|
-
|
|
67
|
-
Dispatches both a scoped event (`name::uid`) and generic event for backward compatibility.
|
|
94
|
+
## Rules
|
|
68
95
|
|
|
69
|
-
|
|
70
|
-
|
|
96
|
+
- Call `super.connectedCallback()` / `super.disconnectedCallback()` when overriding.
|
|
97
|
+
- All RxJS subscriptions end with `.pipe(takeUntil(this.disconnecting))`.
|
|
98
|
+
- Register the tag in `HTMLElementTagNameMap` for TypeScript.
|
|
99
|
+
- Don't mix `classMap` with string interpolation in the same attribute.
|
package/ai/option.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# schmancy-option
|
|
2
|
+
|
|
3
|
+
> Selectable item for `schmancy-select`, `schmancy-autocomplete`, and `schmancy-menu`. Lightweight and a11y-ready.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-select label="Country">
|
|
8
|
+
<schmancy-option value="us">United States</schmancy-option>
|
|
9
|
+
<schmancy-option value="de">Germany</schmancy-option>
|
|
10
|
+
<schmancy-option value="jp" disabled>Japan</schmancy-option>
|
|
11
|
+
</schmancy-select>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Properties
|
|
15
|
+
| Property | Type | Default | Description |
|
|
16
|
+
|----------|------|---------|-------------|
|
|
17
|
+
| `value` | string | `''` | Value reported when this option is selected |
|
|
18
|
+
| `label` | string | auto | Display label (falls back to text content) |
|
|
19
|
+
| `selected` | boolean | `false` | Reflects selected state |
|
|
20
|
+
| `disabled` | boolean | `false` | Disables interaction |
|
|
21
|
+
| `group` | string | `''` | Grouping identifier for grouped lists |
|
|
22
|
+
| `icon` | string | `''` | Material icon name before the label |
|
|
23
|
+
|
|
24
|
+
## Events
|
|
25
|
+
| Event | Payload | When |
|
|
26
|
+
|-------|---------|------|
|
|
27
|
+
| `click` | — | Standard click event |
|
|
28
|
+
| `option-select` | `CustomEvent<{ value, label }>` | Dispatched on activation |
|
|
29
|
+
|
|
30
|
+
## Behavior
|
|
31
|
+
- Auto-generates `id` for ARIA wiring if not set.
|
|
32
|
+
- Infers `label` from text content when omitted.
|
|
33
|
+
- Keyboard focusable with a visible focus ring via `:focus-visible`.
|
|
34
|
+
- Parent select/autocomplete coordinates selection state via slot query.
|
|
35
|
+
|
|
36
|
+
## Example — grouped options
|
|
37
|
+
```html
|
|
38
|
+
<schmancy-select label="Framework">
|
|
39
|
+
<schmancy-option value="lit" group="web" icon="bolt">Lit</schmancy-option>
|
|
40
|
+
<schmancy-option value="react" group="web">React</schmancy-option>
|
|
41
|
+
<schmancy-option value="swift" group="mobile">Swift</schmancy-option>
|
|
42
|
+
</schmancy-select>
|
|
43
|
+
```
|
package/ai/page.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# schmancy-page
|
|
2
|
+
|
|
3
|
+
> Native mobile-like page container. Fills remaining viewport height, prevents rubber-banding, pull-to-refresh, and double-tap zoom.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-page rows="auto_1fr_auto">
|
|
8
|
+
<header>App bar</header>
|
|
9
|
+
<main>Scrollable content</main>
|
|
10
|
+
<footer>Bottom nav</footer>
|
|
11
|
+
</schmancy-page>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Properties
|
|
15
|
+
| Property | Type | Default | Description |
|
|
16
|
+
|----------|------|---------|-------------|
|
|
17
|
+
| `rows` | string | `'auto_1fr_auto'` | Grid template rows — underscores become spaces (e.g. `'1fr_2fr_auto'`) |
|
|
18
|
+
| `show-scrollbar` | boolean | `false` | Display scrollbar on scrollable area |
|
|
19
|
+
| `no-select` | boolean | `false` | Disable text selection |
|
|
20
|
+
|
|
21
|
+
## Behavior
|
|
22
|
+
- Listens to `visualViewport` resize/scroll + `orientationchange` + keyboard focus events to recompute height.
|
|
23
|
+
- Accounts for theme bottom offset (iOS safe area, home indicator).
|
|
24
|
+
- Auto-assigns semantic elements (`header`, `main`, `footer`) to slots.
|
|
25
|
+
- Inner scroll area uses `schmancy-scroll` for momentum-preserving scroll.
|
|
26
|
+
|
|
27
|
+
## When to Use
|
|
28
|
+
- Root of a mobile view or panel that should feel like a native page.
|
|
29
|
+
- Any container where viewport-aware height + scroll containment matters.
|
|
30
|
+
|
|
31
|
+
## Example — 3-row app shell
|
|
32
|
+
```html
|
|
33
|
+
<schmancy-page rows="auto_1fr_auto">
|
|
34
|
+
<schmancy-surface type="solid" rounded="none">
|
|
35
|
+
<schmancy-typography type="title">My App</schmancy-typography>
|
|
36
|
+
</schmancy-surface>
|
|
37
|
+
|
|
38
|
+
<div class="p-4">…scrollable content…</div>
|
|
39
|
+
|
|
40
|
+
<schmancy-navigation-bar></schmancy-navigation-bar>
|
|
41
|
+
</schmancy-page>
|
|
42
|
+
```
|
package/ai/qr-scanner.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# schmancy-qr-scanner
|
|
2
|
+
|
|
3
|
+
> Camera-based QR code scanner using `jsQR`. Requests rear-camera access, decodes frames in real time, deduplicates reads.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-qr-scanner
|
|
8
|
+
continuous
|
|
9
|
+
@scan-result=${e => this.handleScan(e.detail.data)}
|
|
10
|
+
></schmancy-qr-scanner>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
handleScan(data: string) {
|
|
15
|
+
console.log('QR decoded:', data)
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Properties
|
|
20
|
+
| Property | Type | Default | Description |
|
|
21
|
+
|----------|------|---------|-------------|
|
|
22
|
+
| `continuous` | boolean | `true` | Keep scanning after a successful read (dedupe repeated reads) |
|
|
23
|
+
|
|
24
|
+
## Events
|
|
25
|
+
| Event | Detail | When |
|
|
26
|
+
|-------|--------|------|
|
|
27
|
+
| `scan-result` | `{ data: string, timestamp: number }` | QR code successfully decoded |
|
|
28
|
+
|
|
29
|
+
## Behavior
|
|
30
|
+
- Requests `getUserMedia` with `facingMode: 'environment'` (rear camera) at 1280×720.
|
|
31
|
+
- Decodes via `jsQR` on `animationFrames` stream with `throttleTime` to avoid CPU thrashing.
|
|
32
|
+
- `distinctUntilChanged` prevents duplicate emissions for the same code.
|
|
33
|
+
- Brief success flash on each valid read.
|
|
34
|
+
- Stops camera + tears down subscriptions on disconnect.
|
|
35
|
+
- Displays an error state if camera permission is denied.
|
|
36
|
+
|
|
37
|
+
## Requires
|
|
38
|
+
- HTTPS (or `localhost`) for camera access.
|
|
39
|
+
- User permission to the camera.
|
|
40
|
+
|
|
41
|
+
## Example
|
|
42
|
+
```html
|
|
43
|
+
<schmancy-surface type="glass" rounded="all">
|
|
44
|
+
<schmancy-qr-scanner
|
|
45
|
+
@scan-result=${(e: CustomEvent<{ data: string }>) => {
|
|
46
|
+
$notify.success(`Scanned: ${e.detail.data}`)
|
|
47
|
+
this.scannedCode = e.detail.data
|
|
48
|
+
}}
|
|
49
|
+
></schmancy-qr-scanner>
|
|
50
|
+
</schmancy-surface>
|
|
51
|
+
```
|
package/ai/range.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# schmancy-range
|
|
2
|
+
|
|
3
|
+
> Numeric slider input with theme-driven track gradient and focus halo.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-range
|
|
8
|
+
label="Volume"
|
|
9
|
+
min="0"
|
|
10
|
+
max="100"
|
|
11
|
+
step="1"
|
|
12
|
+
.value=${50}
|
|
13
|
+
@change=${e => this.volume = e.detail.value}
|
|
14
|
+
></schmancy-range>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Properties
|
|
18
|
+
| Property | Type | Default | Description |
|
|
19
|
+
|----------|------|---------|-------------|
|
|
20
|
+
| `min` | number | `0` | Minimum value |
|
|
21
|
+
| `max` | number | `1` | Maximum value |
|
|
22
|
+
| `step` | number | `0.01` | Increment per tick |
|
|
23
|
+
| `value` | number | `0` | Current value |
|
|
24
|
+
| `label` | string | — | Optional label (current value displays on the right) |
|
|
25
|
+
| `disabled` | boolean | `false` | Disabled state (38% opacity) |
|
|
26
|
+
|
|
27
|
+
## Events
|
|
28
|
+
| Event | Payload | When |
|
|
29
|
+
|-------|---------|------|
|
|
30
|
+
| `change` | `{ value: number }` | On input change |
|
|
31
|
+
|
|
32
|
+
## Visual
|
|
33
|
+
- Primary-colored track gradient (filled portion = primary, empty = 30% primary).
|
|
34
|
+
- Circular thumb with hover halo (8px primary glow at 12% opacity).
|
|
35
|
+
- Disabled state: 38% opacity, not-allowed cursor.
|
|
36
|
+
|
|
37
|
+
## Example — precise float control
|
|
38
|
+
```html
|
|
39
|
+
<schmancy-range
|
|
40
|
+
label="Mass"
|
|
41
|
+
min="0.5"
|
|
42
|
+
max="2.0"
|
|
43
|
+
step="0.05"
|
|
44
|
+
.value=${this.mass}
|
|
45
|
+
@change=${(e: CustomEvent<{ value: number }>) => this.mass = e.detail.value}
|
|
46
|
+
></schmancy-range>
|
|
47
|
+
```
|
package/ai/rxjs-utils.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Schmancy RxJS Utils
|
|
2
|
+
|
|
3
|
+
> RxJS-wrapped DOM observation helpers. Use when you need to react to elements appearing, disappearing, or changing across the document.
|
|
4
|
+
|
|
5
|
+
## Imports
|
|
6
|
+
```typescript
|
|
7
|
+
import {
|
|
8
|
+
mutationObserver,
|
|
9
|
+
waitForElement,
|
|
10
|
+
waitForElementAll,
|
|
11
|
+
waitForElements,
|
|
12
|
+
waitForElementsAll,
|
|
13
|
+
waitUntil,
|
|
14
|
+
} from '@mhmo91/schmancy'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## `mutationObserver(target, options?)`
|
|
18
|
+
RxJS wrapper around `MutationObserver`.
|
|
19
|
+
```typescript
|
|
20
|
+
mutationObserver(document.body, { childList: true, subtree: true })
|
|
21
|
+
.pipe(takeUntil(this.disconnecting))
|
|
22
|
+
.subscribe(mutations => { /* react */ })
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## `waitForElement(selector, timeout = 5000)`
|
|
26
|
+
Emits the first matching element once it exists in the DOM. Throws on timeout. Pass `undefined` to wait forever.
|
|
27
|
+
```typescript
|
|
28
|
+
waitForElement('#auth-banner').subscribe(el => el.focus())
|
|
29
|
+
waitForElement('.lazy-panel', 10000).subscribe(el => el.click())
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## `waitForElementAll(selector, timeout?)`
|
|
33
|
+
Emits whenever the matching set changes (all current matches).
|
|
34
|
+
```typescript
|
|
35
|
+
waitForElementAll('.live-tile').subscribe(tiles => {
|
|
36
|
+
tiles.forEach(t => observe(t))
|
|
37
|
+
})
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## `waitForElements([sel1, sel2, ...], timeout?)` / `waitForElementsAll`
|
|
41
|
+
Multi-selector variants — resolve once *any*/`every` selector is present.
|
|
42
|
+
|
|
43
|
+
## `waitUntil([selectors], timeout = 5000)`
|
|
44
|
+
Emits once when **all** selectors have matches. Throws on timeout.
|
|
45
|
+
```typescript
|
|
46
|
+
waitUntil(['header', 'main', 'footer'])
|
|
47
|
+
.subscribe(() => console.log('Page shell ready'))
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## How It Works
|
|
51
|
+
All helpers share `mutationObserver(document.body)` with `childList: true, subtree: true` and `.startWith(document.body)` so they check once immediately and re-check on every DOM mutation.
|
|
52
|
+
|
|
53
|
+
## When to Use
|
|
54
|
+
- Integrating third-party scripts that inject DOM late.
|
|
55
|
+
- Coordinating with slot-projected children that may mount asynchronously.
|
|
56
|
+
- Awaiting app-shell elements before attaching shortcuts.
|
|
57
|
+
|
|
58
|
+
## When NOT to Use
|
|
59
|
+
- Inside your own component — use `firstUpdated()` or `queryAssignedElements`.
|
|
60
|
+
- For cross-shadow discovery — use [discovery](./discovery.md) instead.
|
package/ai/slider.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# schmancy-slider / schmancy-slide
|
|
2
|
+
|
|
3
|
+
> Horizontal snap-scrolling carousel with optional arrow controls.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-slider show-arrows>
|
|
8
|
+
<schmancy-slide>
|
|
9
|
+
<img src="a.jpg" />
|
|
10
|
+
</schmancy-slide>
|
|
11
|
+
<schmancy-slide>
|
|
12
|
+
<div class="p-8">Second slide</div>
|
|
13
|
+
</schmancy-slide>
|
|
14
|
+
<schmancy-slide>
|
|
15
|
+
<div class="p-8">Third slide</div>
|
|
16
|
+
</schmancy-slide>
|
|
17
|
+
</schmancy-slider>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## schmancy-slider Properties
|
|
21
|
+
| Property | Type | Default | Description |
|
|
22
|
+
|----------|------|---------|-------------|
|
|
23
|
+
| `showArrows` | boolean | `true` | Render prev/next navigation buttons |
|
|
24
|
+
|
|
25
|
+
## Events
|
|
26
|
+
| Event | Payload | When |
|
|
27
|
+
|-------|---------|------|
|
|
28
|
+
| `slide-changed` | `{ index: number }` | Centered slide changes after scroll settles |
|
|
29
|
+
|
|
30
|
+
## Behavior
|
|
31
|
+
- Each `schmancy-slide` is sized to `flex: 0 0 100%` of the slider.
|
|
32
|
+
- `scroll-snap-type: x mandatory` — scroll always lands on a slide.
|
|
33
|
+
- Scrollbars hidden across browsers.
|
|
34
|
+
- Scroll events throttled to 100ms for stable index tracking.
|
|
35
|
+
- Arrow buttons scroll to previous/next slide when `show-arrows` is true.
|
|
36
|
+
|
|
37
|
+
## Example — programmatic control
|
|
38
|
+
```typescript
|
|
39
|
+
const slider = this.renderRoot.querySelector('schmancy-slider')
|
|
40
|
+
slider?.addEventListener('slide-changed', (e: CustomEvent<{ index: number }>) => {
|
|
41
|
+
this.activeIndex = e.detail.index
|
|
42
|
+
})
|
|
43
|
+
```
|
package/ai/store.md
CHANGED
|
@@ -1,83 +1,126 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Store — Context System
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Reactive state management: `createContext`, `@select`, `@selectItem`.
|
|
4
|
+
|
|
5
|
+
## Creating a context
|
|
4
6
|
|
|
5
|
-
## Creating a Context
|
|
6
7
|
```typescript
|
|
7
8
|
import { createContext } from '@mhmo91/schmancy'
|
|
8
9
|
|
|
9
|
-
// Object
|
|
10
|
-
const userContext = createContext(
|
|
10
|
+
// Object
|
|
11
|
+
const userContext = createContext<User>(new User(), 'local', 'user')
|
|
11
12
|
|
|
12
|
-
//
|
|
13
|
-
const itemsContext = createContext
|
|
13
|
+
// Map (collection)
|
|
14
|
+
const itemsContext = createContext<Map<string, Item>>(new Map(), 'indexeddb', 'items')
|
|
14
15
|
|
|
15
|
-
// Array
|
|
16
|
-
const tagsContext = createContext<string>([], 'memory', 'tags')
|
|
16
|
+
// Array
|
|
17
|
+
const tagsContext = createContext<string[]>([], 'memory', 'tags')
|
|
17
18
|
```
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
|
24
|
-
|
|
25
|
-
| `'
|
|
20
|
+
Signature: `createContext(initial, storage, key)`.
|
|
21
|
+
|
|
22
|
+
## Storage backends
|
|
23
|
+
|
|
24
|
+
| Mode | Backing | Survives refresh | Survives tab close | Capacity |
|
|
25
|
+
|------|---------|------------------|--------------------|----------|
|
|
26
|
+
| `'memory'` | JS heap | ❌ | ❌ | RAM |
|
|
27
|
+
| `'session'` | `sessionStorage` | ✅ | ❌ (per-tab) | ~5 MB |
|
|
28
|
+
| `'local'` | `localStorage` | ✅ | ✅ | ~5 MB |
|
|
29
|
+
| `'indexeddb'` | IndexedDB | ✅ | ✅ | GB |
|
|
30
|
+
|
|
31
|
+
Pick by data size and lifetime:
|
|
32
|
+
- User prefs, long-lived drafts → `'local'`
|
|
33
|
+
- Per-tab ephemeral (cart, wizard) → `'session'`
|
|
34
|
+
- Fetched from API, regenerable → `'memory'`
|
|
35
|
+
- Collections with >100 entries you want cached → `'indexeddb'`
|
|
36
|
+
|
|
37
|
+
## Reading with `@select`
|
|
26
38
|
|
|
27
|
-
## Reading State with @select
|
|
28
39
|
```typescript
|
|
29
40
|
import { select } from '@mhmo91/schmancy'
|
|
30
41
|
|
|
31
42
|
@customElement('my-component')
|
|
32
43
|
class MyComponent extends $LitElement() {
|
|
33
|
-
|
|
34
|
-
@select(userContext)
|
|
35
|
-
user!: { name: string; email: string }
|
|
44
|
+
@select(userContext) user!: User
|
|
36
45
|
|
|
37
|
-
//
|
|
38
|
-
@select(itemsContext,
|
|
39
|
-
itemCount!: number
|
|
46
|
+
// Selector narrows the dependency
|
|
47
|
+
@select(itemsContext, m => m.size) count!: number
|
|
40
48
|
|
|
41
|
-
|
|
42
|
-
@select(itemsContext)
|
|
43
|
-
items!: Map<string, Item>
|
|
49
|
+
@select(itemsContext) items!: Map<string, Item>
|
|
44
50
|
}
|
|
45
51
|
```
|
|
46
52
|
|
|
47
|
-
|
|
53
|
+
`@select` options:
|
|
54
|
+
- `required` (default `true`) — wait for `.ready` before `connectedCallback` completes.
|
|
55
|
+
- `updateOnly` — call `requestUpdate` without assigning.
|
|
56
|
+
- `deepClone` — `structuredClone` the value.
|
|
57
|
+
- `debug` — log every emission.
|
|
58
|
+
|
|
59
|
+
## `@selectItem`
|
|
60
|
+
|
|
61
|
+
Pick one entry from a collection context, keyed off a component property:
|
|
62
|
+
|
|
48
63
|
```typescript
|
|
49
|
-
|
|
50
|
-
|
|
64
|
+
@selectItem(itemsContext, component => component.itemId)
|
|
65
|
+
item!: Item | undefined
|
|
66
|
+
```
|
|
51
67
|
|
|
52
|
-
|
|
53
|
-
itemsContext.set('item-1', { name: 'Widget' })
|
|
54
|
-
itemsContext.delete('item-1')
|
|
55
|
-
itemsContext.replace(new Map([...]))
|
|
68
|
+
## Writing
|
|
56
69
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
```typescript
|
|
71
|
+
// Object
|
|
72
|
+
userContext.set({ name: 'Alice' })
|
|
73
|
+
userContext.set({ ...userContext.value, name: 'Bob' })
|
|
74
|
+
|
|
75
|
+
// Map
|
|
76
|
+
itemsContext.set('id-1', item)
|
|
77
|
+
itemsContext.delete('id-1')
|
|
78
|
+
itemsContext.replace(newMap)
|
|
79
|
+
|
|
80
|
+
// Array
|
|
81
|
+
tagsContext.push('new')
|
|
82
|
+
tagsContext.replace(['a', 'b'])
|
|
60
83
|
```
|
|
61
84
|
|
|
62
85
|
## Observable API
|
|
86
|
+
|
|
63
87
|
```typescript
|
|
64
|
-
// Subscribe to changes
|
|
65
88
|
userContext.$.pipe(
|
|
66
|
-
|
|
67
|
-
|
|
89
|
+
filter(() => userContext.ready),
|
|
90
|
+
takeUntil(this.disconnecting),
|
|
91
|
+
).subscribe(user => { /* ... */ })
|
|
68
92
|
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// Ready state
|
|
73
|
-
if (userContext.ready) { ... }
|
|
93
|
+
userContext.value // synchronous snapshot
|
|
94
|
+
userContext.ready // true once the backing store has loaded
|
|
74
95
|
```
|
|
75
96
|
|
|
76
|
-
|
|
77
|
-
|
|
97
|
+
Gate subscriptions on `.ready` — `'local'` / `'session'` / `'indexeddb'` contexts emit their default value before the real stored value hydrates.
|
|
98
|
+
|
|
99
|
+
## Dynamic contexts
|
|
100
|
+
|
|
101
|
+
For per-instance state with persistence, create the context inside `connectedCallback` with an instance-scoped key:
|
|
78
102
|
|
|
79
|
-
## selectItem (Collection Helper)
|
|
80
103
|
```typescript
|
|
81
|
-
|
|
82
|
-
|
|
104
|
+
private draftCtx: IStore<{ text: string }> | null = null
|
|
105
|
+
|
|
106
|
+
connectedCallback() {
|
|
107
|
+
super.connectedCallback()
|
|
108
|
+
if (this.draftKey) {
|
|
109
|
+
this.draftCtx = createContext<{ text: string }>(
|
|
110
|
+
{ text: '' },
|
|
111
|
+
'session',
|
|
112
|
+
this.draftKey,
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
83
116
|
```
|
|
117
|
+
|
|
118
|
+
## Rules
|
|
119
|
+
|
|
120
|
+
- Declare contexts at module scope (except dynamic per-instance ones).
|
|
121
|
+
- Name the storage key even for `'memory'` contexts — it helps debugging.
|
|
122
|
+
- Keep each context single-purpose. One write shouldn't invalidate unrelated readers.
|
|
123
|
+
- Only the owning component writes. Others read via `@select`.
|
|
124
|
+
- Every subscription uses `takeUntil(this.disconnecting)`.
|
|
125
|
+
- Gate on `.ready` before async cascading work.
|
|
126
|
+
- Don't store Promises, Observables, functions, or class instances in persistent contexts.
|
package/ai/teleport.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# schmancy-teleport
|
|
2
|
+
|
|
3
|
+
> Move DOM between locations with a FLIP-animated transition. Two instances sharing an `id` handshake via broadcast events — when one mounts, it finds the other and flies the content between them.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<!-- Start position -->
|
|
8
|
+
<schmancy-teleport id="hero-image">
|
|
9
|
+
<img src="portrait.jpg" alt="" />
|
|
10
|
+
</schmancy-teleport>
|
|
11
|
+
|
|
12
|
+
<!-- Later, in a different view -->
|
|
13
|
+
<schmancy-teleport id="hero-image"></schmancy-teleport>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
When the second instance mounts, the image smoothly animates from its old bounding rect to the new one.
|
|
17
|
+
|
|
18
|
+
## Properties
|
|
19
|
+
| Property | Type | Default | Description |
|
|
20
|
+
|----------|------|---------|-------------|
|
|
21
|
+
| `id` | string | **required** | Shared identifier between source and target |
|
|
22
|
+
| `uuid` | number | auto | Instance UUID for disambiguation (read-only) |
|
|
23
|
+
| `delay` | number | `0` | Delay before teleporting (ms) |
|
|
24
|
+
|
|
25
|
+
## Discovery Events
|
|
26
|
+
The service broadcasts on `window`:
|
|
27
|
+
- `FINDING_MORTIES` — "is anyone mounted with id X?"
|
|
28
|
+
- `HERE_RICKY` — instances reply with self reference
|
|
29
|
+
- `WhereAreYouRicky` / `HereMorty` — instance-to-instance handshake
|
|
30
|
+
|
|
31
|
+
Uses RxJS with a race/throwIfEmpty pattern to handle missing counterparts gracefully.
|
|
32
|
+
|
|
33
|
+
## Typical Pattern — route transitions
|
|
34
|
+
```html
|
|
35
|
+
<!-- List view -->
|
|
36
|
+
${repeat(items, item => item.id, item => html`
|
|
37
|
+
<schmancy-teleport id=${`card-${item.id}`}>
|
|
38
|
+
<schmancy-card @click=${() => router.push(`/item/${item.id}`)}>
|
|
39
|
+
<img src=${item.thumbnail} />
|
|
40
|
+
</schmancy-card>
|
|
41
|
+
</schmancy-teleport>
|
|
42
|
+
`)}
|
|
43
|
+
|
|
44
|
+
<!-- Detail view -->
|
|
45
|
+
<schmancy-teleport id=${`card-${this.params.id}`}></schmancy-teleport>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Notes
|
|
49
|
+
- Uses `watchElementRect` (ResizeObserver + scroll tracking) to keep source/target in sync.
|
|
50
|
+
- Animation uses the FLIP technique: capture first rect, invert on mount, play to final.
|
|
51
|
+
- All subscriptions clean up via `takeUntil(this.disconnecting)`.
|
|
52
|
+
- Each teleport pair must share a unique `id` string.
|
|
53
|
+
|
|
54
|
+
## See Also
|
|
55
|
+
- For programmatic teleportation from JS: import `teleportationService` from `@mhmo91/schmancy/teleport`.
|