@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/README.md
CHANGED
|
@@ -16,17 +16,17 @@ import { magnetic, cursorGlow, gravity } from '@mhmo91/schmancy/directives'
|
|
|
16
16
|
## Quick Start
|
|
17
17
|
|
|
18
18
|
```html
|
|
19
|
-
<schmancy-theme
|
|
20
|
-
<schmancy-surface type="
|
|
21
|
-
<schmancy-
|
|
19
|
+
<schmancy-theme root scheme="dark">
|
|
20
|
+
<schmancy-surface type="solid" fill="all">
|
|
21
|
+
<schmancy-area name="root" .default=${lazy(() => import('./home.page'))}>
|
|
22
|
+
<schmancy-route when="home-page" .component=${lazy(() => import('./home.page'))} />
|
|
23
|
+
</schmancy-area>
|
|
22
24
|
</schmancy-surface>
|
|
23
25
|
</schmancy-theme>
|
|
24
26
|
```
|
|
25
27
|
|
|
26
28
|
## Design: Luminous Glass
|
|
27
29
|
|
|
28
|
-
Every surface is translucent glass. Depth = blur intensity. Elevation = colored glow. Interactions = spring physics.
|
|
29
|
-
|
|
30
30
|
| Surface | Opacity | Blur | Purpose |
|
|
31
31
|
|---------|---------|------|---------|
|
|
32
32
|
| `solid` | 92% | — | Dense glass, high readability |
|
|
@@ -34,77 +34,21 @@ Every surface is translucent glass. Depth = blur intensity. Elevation = colored
|
|
|
34
34
|
| `glass` | 55% | 16px | Overlays, dialogs, dropdowns |
|
|
35
35
|
| `luminous` | 42% | 20px | Hero panels with glow halo |
|
|
36
36
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
- [
|
|
42
|
-
- [
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- [Navigation Bar](./ai/navigation-bar.md) — Bottom navigation (mobile)
|
|
48
|
-
- [Navigation Rail](./ai/navigation-rail.md) — Side navigation (desktop)
|
|
49
|
-
- [Nav Drawer](./ai/nav-drawer.md) — Slide-out navigation drawer
|
|
50
|
-
- [Steps](./ai/steps.md) — Multi-step process indicator
|
|
51
|
-
- [Area](./ai/area.md) — Client-side routing
|
|
52
|
-
|
|
53
|
-
### Overlays
|
|
54
|
-
- [Dialog](./ai/dialog.md) — Glass modal dialogs with cursorGlow
|
|
55
|
-
- [Sheet](./ai/sheet.md) — Side/bottom panels with glass backdrop
|
|
56
|
-
- [Notification](./ai/notification.md) — Toast notifications with type-colored glow
|
|
57
|
-
- [Menu](./ai/menu.md) — Context menus
|
|
58
|
-
- [Dropdown](./ai/dropdown.md) — Floating dropdown panels
|
|
59
|
-
- [Tooltip](./ai/tooltip.md) — Hover tooltips
|
|
60
|
-
- [Lightbox](./ai/lightbox.md) — Image gallery with FLIP animations
|
|
61
|
-
|
|
62
|
-
### Form Elements
|
|
63
|
-
- [Input](./ai/input.md) — Text input with luminous focus glow
|
|
64
|
-
- [Textarea](./ai/textarea.md) — Multi-line text input
|
|
65
|
-
- [Select](./ai/select.md) — Dropdown select
|
|
66
|
-
- [Autocomplete](./ai/autocomplete.md) — Searchable dropdown
|
|
67
|
-
- [Checkbox](./ai/checkbox.md) — Checkboxes
|
|
68
|
-
- [Radio Group](./ai/radio-group.md) — Radio buttons
|
|
69
|
-
- [Chips](./ai/chips.md) — Filter/input/suggestion chips with magnetic
|
|
70
|
-
- [Form](./ai/form.md) — Form container with validation
|
|
71
|
-
- [Date Range](./ai/date-range.md) — Date pickers
|
|
72
|
-
|
|
73
|
-
### Interactive Elements
|
|
74
|
-
- [Button](./ai/button.md) — Buttons with magnetic + glow hover
|
|
75
|
-
- [List](./ai/list.md) — Interactive lists with glass hover
|
|
76
|
-
- [Details](./ai/details.md) — Expandable sections with magnetic summary
|
|
77
|
-
- [Table](./ai/table.md) — Data tables
|
|
78
|
-
- [Tree](./ai/tree.md) — Hierarchical tree view
|
|
79
|
-
|
|
80
|
-
### Feedback
|
|
81
|
-
- [Progress](./ai/progress.md) — Linear progress bar
|
|
82
|
-
- [Busy](./ai/busy.md) — Loading overlays
|
|
83
|
-
- [Badge](./ai/badge.md) — Status indicators
|
|
84
|
-
|
|
85
|
-
### Display
|
|
86
|
-
- [Typography](./ai/typography.md) — Text styling system
|
|
87
|
-
- [Icons](./ai/icons.md) — Material Symbols
|
|
88
|
-
- [Avatar](./ai/avatar.md) — Profile images with fallback initials
|
|
89
|
-
- [Code Highlight](./ai/code-highlight.md) — Syntax highlighting
|
|
90
|
-
|
|
91
|
-
## Directives
|
|
92
|
-
|
|
93
|
-
19 Lit directives that snap onto any element. [Full reference →](./ai/directives.md)
|
|
94
|
-
|
|
95
|
-
**Physics:** `magnetic`, `cursorGlow`, `livingBorder`, `gravity`, `depthOfField`, `longPress`
|
|
96
|
-
**Effects:** `nebula`, `liquid`, `ripple`
|
|
97
|
-
**Text:** `animateText`, `cycleText`, `typewriter`
|
|
98
|
-
**Visibility:** `reveal`, `intersect`
|
|
99
|
-
**Interaction:** `drag`, `drop`, `color`
|
|
100
|
-
|
|
101
|
-
## System
|
|
102
|
-
|
|
103
|
-
- [Theme](./ai/theme.md) — Color theming + dark/light mode
|
|
104
|
-
- [Store](./ai/store.md) — Reactive state management with persistence
|
|
105
|
-
- [Mixins](./ai/mixins.md) — $LitElement base mixin with RxJS lifecycle
|
|
106
|
-
- [Animation](./ai/animation.md) — Blackbird spring physics system
|
|
37
|
+
## Docs
|
|
38
|
+
|
|
39
|
+
Schmancy is organized in four layers:
|
|
40
|
+
|
|
41
|
+
- **Foundations** — [Area](./ai/area.md) · [Store](./ai/store.md) · [Mixins ($LitElement)](./ai/mixins.md) · [Theme](./ai/theme.md) · [Directives](./ai/directives.md)
|
|
42
|
+
- **Atoms** — [Typography](./ai/typography.md) · [Icons](./ai/icons.md) · [Button](./ai/button.md) · [Surface](./ai/surface.md) · [Divider](./ai/divider.md) · [Avatar](./ai/avatar.md)
|
|
43
|
+
- **Composites (by job)** — Forms, Navigation, Overlays, Interaction, Feedback, Display
|
|
44
|
+
- **Utilities** — [Animation](./ai/animation.md) · [Audio](./ai/audio.md) · [Discovery](./ai/discovery.md) · [RxJS Utils](./ai/rxjs-utils.md) · [Utils](./ai/utils.md)
|
|
45
|
+
|
|
46
|
+
**Full component index:** [ai/INDEX.md](./ai/INDEX.md) — the single-file map with every tag, service, and convention. Written primarily for AI agents; humans welcome.
|
|
107
47
|
|
|
108
48
|
## Tech Stack
|
|
109
49
|
|
|
110
50
|
[Lit](https://lit.dev) · [RxJS](https://rxjs.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Blackbird](./src/utils/animation.ts)
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
Apache-2.0
|
package/ai/INDEX.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Schmancy — Documentation Index
|
|
2
|
+
|
|
3
|
+
A Web Component UI library on Lit + RxJS + Tailwind CSS.
|
|
4
|
+
|
|
5
|
+
## Foundations
|
|
6
|
+
|
|
7
|
+
The framework pieces — touch before components.
|
|
8
|
+
|
|
9
|
+
- [Area](./area.md) — `<schmancy-area>`, `<schmancy-route>`, `area.push()`, `lazy()` for routing.
|
|
10
|
+
- [Store](./store.md) — `createContext`, `@select`, `@selectItem`, storage backends.
|
|
11
|
+
- [Mixins](./mixins.md) — `$LitElement` base class.
|
|
12
|
+
- [Theme](./theme.md) — `<schmancy-theme>`, color scheme, CSS variables.
|
|
13
|
+
- [Directives](./directives.md) — Lit directives for physics, effects, text, visibility, interaction.
|
|
14
|
+
- [Animation](./animation.md) — Spring presets (`SPRING_SMOOTH`, etc.), `createAnimation`.
|
|
15
|
+
|
|
16
|
+
## Components by job
|
|
17
|
+
|
|
18
|
+
### Display
|
|
19
|
+
[Typography](./typography.md) · [Icons](./icons.md) · [Avatar](./avatar.md) · [Divider](./divider.md) · [Badge](./badge.md) · [Code Highlight](./code-highlight.md) · [Typewriter](./typewriter.md) · [JSON](./json.md) · [Iframe](./iframe.md) · [Map](./map.md) · [Charts](./charts.md)
|
|
20
|
+
|
|
21
|
+
### Surfaces & layout
|
|
22
|
+
[Surface](./surface.md) · [Card](./card.md) · [Scroll / Grid / Flex](./layout.md) · [Page](./page.md) · [Content Drawer](./content-drawer.md) · [Window](./window.md) · [Boat](./boat.md) · [Float](./float.md)
|
|
23
|
+
|
|
24
|
+
### Forms
|
|
25
|
+
[Form](./form.md) · [Input](./input.md) · [Textarea](./textarea.md) · [Select](./select.md) · [Autocomplete](./autocomplete.md) · [Option](./option.md) · [Checkbox](./checkbox.md) · [Radio Group](./radio-group.md) · [Chips](./chips.md) · [Date Range](./date-range.md) · [Date Range Inline](./date-range-inline.md) · [Range](./range.md) · [Extra (Country/Timezone)](./extra.md)
|
|
26
|
+
|
|
27
|
+
### Navigation
|
|
28
|
+
[Nav Drawer](./nav-drawer.md) · [Tabs](./tabs.md) · [Navigation Bar](./navigation-bar.md) · [Navigation Rail](./navigation-rail.md) · [Steps](./steps.md) · [Teleport](./teleport.md) · [Theme Button](./theme-button.md)
|
|
29
|
+
|
|
30
|
+
### Overlays
|
|
31
|
+
[Dialog](./dialog.md) · [Sheet](./sheet.md) · [Notification](./notification.md) · [Menu](./menu.md) · [Dropdown](./dropdown.md) · [Tooltip](./tooltip.md) · [Lightbox](./lightbox.md) · [Expand](./expand.md)
|
|
32
|
+
|
|
33
|
+
### Interactive
|
|
34
|
+
[Button](./button.md) · [List](./list.md) · [Details](./details.md) · [Table](./table.md) · [Tree](./tree.md) · [Slider](./slider.md) · [QR Scanner](./qr-scanner.md)
|
|
35
|
+
|
|
36
|
+
### Feedback
|
|
37
|
+
[Progress](./progress.md) · [Busy](./busy.md) · [Connectivity](./connectivity.md) · [Delay](./delay.md)
|
|
38
|
+
|
|
39
|
+
### Domain
|
|
40
|
+
[Mailbox](./mailbox.md)
|
|
41
|
+
|
|
42
|
+
## Services (imperative APIs)
|
|
43
|
+
|
|
44
|
+
| Service | Purpose |
|
|
45
|
+
|---------|---------|
|
|
46
|
+
| `area` | Route navigation (see [area](./area.md)) |
|
|
47
|
+
| `$dialog` | Open dialogs (see [dialog](./dialog.md)) |
|
|
48
|
+
| `$notify` | Toast notifications (see [notification](./notification.md)) |
|
|
49
|
+
| `schmancyContentDrawer` | Side panel (see [content-drawer](./content-drawer.md)) |
|
|
50
|
+
| `theme` | Theme state, `fullscreen$` (see [theme](./theme.md)) |
|
|
51
|
+
| `sound` | Audio feedback (see [audio](./audio.md)) |
|
|
52
|
+
| `overlayStack` | Z-index coordinator (see [utils](./utils.md)) |
|
|
53
|
+
| `windowManager` | Window registry (see [window](./window.md)) |
|
|
54
|
+
|
|
55
|
+
## Utilities
|
|
56
|
+
|
|
57
|
+
[Discovery](./discovery.md) — cross-shadow component lookup.
|
|
58
|
+
[RxJS Utils](./rxjs-utils.md) — `waitForElement`, `waitUntil`, `mutationObserver`.
|
|
59
|
+
[Utils](./utils.md) — `similarity`, `numbers`, `overlayStack`, `intersection$`, `hashContent`.
|
|
60
|
+
[Audio](./audio.md) — synthesized feedback sounds.
|
|
61
|
+
|
|
62
|
+
## Conventions
|
|
63
|
+
|
|
64
|
+
- Lists use `repeat(items, item => item.id, tpl)`.
|
|
65
|
+
- View switching uses `cache(...)`.
|
|
66
|
+
- Expensive work uses `guard([deps], fn)`.
|
|
67
|
+
- DOM access uses `ref(createRef())`.
|
|
68
|
+
- Conditionals use `when(...)`, `choose(...)`, `ifDefined(...)`.
|
|
69
|
+
- All RxJS subscriptions end with `.pipe(takeUntil(this.disconnecting))`.
|
|
70
|
+
- Don't use `setTimeout` / `setInterval` / `addEventListener` — use RxJS (`timer`, `interval`, `fromEvent`).
|
|
71
|
+
- Colors come from `--schmancy-sys-color-*` CSS vars or Tailwind theme classes.
|
|
72
|
+
- `classMap(...)` must be the sole expression in `class=`; never mix with string interpolation.
|
package/ai/area.md
CHANGED
|
@@ -1,61 +1,141 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Area — Routing
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Schmancy's client-side router. Three pieces:
|
|
4
|
+
|
|
5
|
+
| Piece | Role |
|
|
6
|
+
|-------|------|
|
|
7
|
+
| `<schmancy-area name="...">` | Named region that renders one route at a time |
|
|
8
|
+
| `<schmancy-route when="tag">` | Declares which component can render in an area |
|
|
9
|
+
| `area.push(...)` | Imperative navigation |
|
|
10
|
+
|
|
11
|
+
Areas can be nested to compose shell-plus-sub-view layouts.
|
|
12
|
+
|
|
13
|
+
## Example
|
|
4
14
|
|
|
5
|
-
## Usage
|
|
6
15
|
```html
|
|
7
|
-
<schmancy-area name="
|
|
8
|
-
<schmancy-route when="home-page"
|
|
9
|
-
|
|
16
|
+
<schmancy-area name="root" .default=${lazy(() => import('./pages/home.page'))}>
|
|
17
|
+
<schmancy-route when="home-page"
|
|
18
|
+
.component=${lazy(() => import('./pages/home.page'))}></schmancy-route>
|
|
19
|
+
|
|
20
|
+
<schmancy-route when="app-index"
|
|
21
|
+
.component=${lazy(() => import('./app/app.page'))}
|
|
22
|
+
.guard=${authState$.pipe(
|
|
23
|
+
map(u => !!u && !u.isAnonymous),
|
|
24
|
+
takeUntil(this.disconnecting),
|
|
25
|
+
)}
|
|
26
|
+
@redirect=${() => area.push({
|
|
27
|
+
component: 'home-page',
|
|
28
|
+
area: 'root',
|
|
29
|
+
historyStrategy: 'replace',
|
|
30
|
+
})}></schmancy-route>
|
|
10
31
|
</schmancy-area>
|
|
11
32
|
```
|
|
12
33
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
|
23
|
-
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
27
|
-
|
|
34
|
+
## `schmancy-area` properties
|
|
35
|
+
|
|
36
|
+
| Property | Type | Description |
|
|
37
|
+
|----------|------|-------------|
|
|
38
|
+
| `name` | string (required) | Area identifier used in `area.push({ area })` |
|
|
39
|
+
| `default` | `RouteComponent \| string` | Fallback when no route matches |
|
|
40
|
+
|
|
41
|
+
## `schmancy-route` properties
|
|
42
|
+
|
|
43
|
+
| Property | Type | Description |
|
|
44
|
+
|----------|------|-------------|
|
|
45
|
+
| `when` | string (required) | Must match a `@customElement('tag')` tag name |
|
|
46
|
+
| `component` | `RouteComponent` (required) | Class, tag name, or `lazy()` wrapper |
|
|
47
|
+
| `guard` | `Observable<boolean>` | When emits `false`, blocks and dispatches `redirect` event |
|
|
48
|
+
| `exact` | boolean | Strict-equality matching |
|
|
49
|
+
|
|
50
|
+
## `area` service
|
|
51
|
+
|
|
28
52
|
```typescript
|
|
29
53
|
import { area } from '@mhmo91/schmancy'
|
|
30
54
|
|
|
31
|
-
|
|
32
|
-
area
|
|
55
|
+
area.push({
|
|
56
|
+
area: 'root',
|
|
57
|
+
component: 'app-index',
|
|
58
|
+
params?: { id: '123' },
|
|
59
|
+
historyStrategy?: 'push' | 'replace' | 'silent',
|
|
60
|
+
})
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`historyStrategy`:
|
|
64
|
+
- `'push'` (default) — adds a browser-history entry
|
|
65
|
+
- `'replace'` — overwrites the current entry (use after guards or redirects)
|
|
66
|
+
- `'silent'` — changes the area without touching history
|
|
33
67
|
|
|
34
|
-
|
|
35
|
-
area.on('main').pipe(takeUntil(this.disconnecting)).subscribe(route => { ... })
|
|
68
|
+
### Subscribe to route state
|
|
36
69
|
|
|
37
|
-
|
|
38
|
-
area.
|
|
70
|
+
```typescript
|
|
71
|
+
area.on('root').pipe(
|
|
72
|
+
takeUntil(this.disconnecting),
|
|
73
|
+
).subscribe(route => { /* route.component, route.params */ })
|
|
74
|
+
|
|
75
|
+
area.params<{ id: string }>('detail').pipe(
|
|
76
|
+
takeUntil(this.disconnecting),
|
|
77
|
+
).subscribe(params => this.loadItem(params.id))
|
|
39
78
|
```
|
|
40
79
|
|
|
41
|
-
## Lazy
|
|
80
|
+
## Lazy loading
|
|
81
|
+
|
|
42
82
|
```typescript
|
|
43
83
|
import { lazy } from '@mhmo91/schmancy'
|
|
44
|
-
const
|
|
84
|
+
const HomePage = lazy(() => import('./home.page'))
|
|
85
|
+
|
|
86
|
+
// Optional preload
|
|
87
|
+
html`<button @mouseenter=${() => HomePage.preload()}>Home</button>`
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Guards
|
|
91
|
+
|
|
92
|
+
`guard` is an Observable<boolean>.
|
|
93
|
+
|
|
94
|
+
- Emits `true` → route renders.
|
|
95
|
+
- Emits `false` → route dispatches a `redirect` event. Handle it with `area.push(...)`.
|
|
45
96
|
|
|
46
|
-
|
|
47
|
-
|
|
97
|
+
Auth guard:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
<schmancy-route when="app-index"
|
|
101
|
+
.component=${lazy(() => import('./app'))}
|
|
102
|
+
.guard=${authState$.pipe(
|
|
103
|
+
map(u => !!u),
|
|
104
|
+
takeUntil(this.disconnecting),
|
|
105
|
+
)}
|
|
106
|
+
@redirect=${() => area.push({
|
|
107
|
+
component: 'home-page', area: 'root', historyStrategy: 'replace',
|
|
108
|
+
})}></schmancy-route>
|
|
48
109
|
```
|
|
49
110
|
|
|
50
|
-
|
|
111
|
+
Compound guard (multiple streams):
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
.guard=${combineLatest([permissions$, orgContext.$]).pipe(
|
|
115
|
+
takeUntil(this.disconnecting),
|
|
116
|
+
map(([perms, org]) => perms.includes('billing.view') && org?.billing?.configured),
|
|
117
|
+
)}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Nested areas
|
|
121
|
+
|
|
122
|
+
Areas nest by rendering an inner `<schmancy-area>` inside a route component. A common shape is an outer area for "signed-in vs. not" and an inner area for sub-views of the signed-in shell.
|
|
123
|
+
|
|
51
124
|
```html
|
|
52
|
-
<!--
|
|
53
|
-
<schmancy-area name="
|
|
54
|
-
<schmancy-route when="
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
125
|
+
<!-- outer -->
|
|
126
|
+
<schmancy-area name="root">
|
|
127
|
+
<schmancy-route when="app-index" .component=${AppShell}></schmancy-route>
|
|
128
|
+
</schmancy-area>
|
|
129
|
+
|
|
130
|
+
<!-- inner (inside AppShell.render()) -->
|
|
131
|
+
<schmancy-area name="app" default="home-page">
|
|
132
|
+
<schmancy-route when="home-page" .component=${...}></schmancy-route>
|
|
133
|
+
<schmancy-route when="settings-page" .component=${...}></schmancy-route>
|
|
58
134
|
</schmancy-area>
|
|
59
135
|
```
|
|
60
136
|
|
|
61
|
-
|
|
137
|
+
## Rules
|
|
138
|
+
|
|
139
|
+
- `when="tag-name"` must match `@customElement('tag-name')` exactly.
|
|
140
|
+
- Guards emit `false` → always use `historyStrategy: 'replace'` in the `@redirect` handler.
|
|
141
|
+
- Every subscription in guards / route state uses `takeUntil(this.disconnecting)`.
|
package/ai/audio.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Schmancy Audio
|
|
2
|
+
|
|
3
|
+
> Emotional sound service — synthesizes short, empathetic sounds via Web Audio API keyed on feelings (joyful, tense, calm, etc.). No assets. No external players. Just tones + puffs generated on demand.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```typescript
|
|
7
|
+
import { sound } from '@mhmo91/schmancy'
|
|
8
|
+
|
|
9
|
+
sound.play('joyful') // trigger a feeling sound
|
|
10
|
+
sound.setVolume(0.2) // 0..1
|
|
11
|
+
sound.setMuted(true)
|
|
12
|
+
sound.resetTheme() // back to defaults
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Feelings
|
|
16
|
+
Organized by emotional category:
|
|
17
|
+
|
|
18
|
+
| Category | Feelings |
|
|
19
|
+
|----------|----------|
|
|
20
|
+
| Happy | `joyful`, `content`, `excited`, `grateful`, `proud`, `loved` |
|
|
21
|
+
| Sad | `sad`, `disappointed`, `hurt`, `lonely`, `melancholy` |
|
|
22
|
+
| Anxious | `worried`, `nervous`, `overwhelmed`, `tense` |
|
|
23
|
+
| Angry | `frustrated`, `angry`, `annoyed` |
|
|
24
|
+
| Tired | `tired`, `drained`, `bored` |
|
|
25
|
+
| Calm | `calm`, `peaceful`, `relaxed`, `focused` |
|
|
26
|
+
| Connected | `connected`, `supported`, `welcomed` |
|
|
27
|
+
| Mixed | `confused`, `nostalgic`, `bittersweet` |
|
|
28
|
+
|
|
29
|
+
(See `mood-audio.types.ts` for the authoritative list.)
|
|
30
|
+
|
|
31
|
+
## Observable API
|
|
32
|
+
```typescript
|
|
33
|
+
sound.theme$.subscribe(theme => console.log(theme?.name ?? 'default'))
|
|
34
|
+
sound.volume$.subscribe(v => {})
|
|
35
|
+
sound.muted$.subscribe(m => {})
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Settings Persistence
|
|
39
|
+
Volume, mute, and custom theme persist to `localStorage` under key `schmancy-sound-settings` (via `createContext`).
|
|
40
|
+
|
|
41
|
+
## AI-Generated Themes
|
|
42
|
+
```typescript
|
|
43
|
+
import type { SoundTheme } from '@mhmo91/schmancy'
|
|
44
|
+
|
|
45
|
+
const customTheme: SoundTheme = {
|
|
46
|
+
name: 'ocean',
|
|
47
|
+
sounds: {
|
|
48
|
+
joyful: { puffs: [...], tones: [...] },
|
|
49
|
+
// partial override — falls through to defaults for anything omitted
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
sound.setTheme(customTheme)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Each `FeelingSound` consists of:
|
|
57
|
+
- **puffs** — short bursts (air/noise, e.g. `{ startTime, duration, frequency, volume }`)
|
|
58
|
+
- **tones** — oscillators (`sine`/`triangle`/`square`/`sawtooth` with envelope)
|
|
59
|
+
|
|
60
|
+
## Built-in Feedback Hooks
|
|
61
|
+
Other Schmancy components play these automatically:
|
|
62
|
+
- [`schmancy-connectivity-status`](./connectivity.md) on offline/online.
|
|
63
|
+
- Some success/error paths in notifications and dialogs via the `$sounds` legacy helper.
|
|
64
|
+
|
|
65
|
+
## Legacy API
|
|
66
|
+
- `$sounds` — older generator exported for compatibility.
|
|
67
|
+
- `EmotionalSoundGenerator` — underlying class.
|
|
68
|
+
|
|
69
|
+
Prefer `sound` for new code.
|
package/ai/boat.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# schmancy-boat
|
|
2
|
+
|
|
3
|
+
> Draggable floating FAB that expands into a panel. Great for persistent assistant/chat panels.
|
|
4
|
+
|
|
5
|
+
> **Note:** `schmancy-window` is the evolved successor with more capabilities (resize, maximize, multi-window registry). Prefer `schmancy-window` for new code unless you want the simpler FAB-to-panel model.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
```html
|
|
9
|
+
<schmancy-boat id="assistant" icon="smart_toy" label="Assistant">
|
|
10
|
+
<div slot="header">Assistant</div>
|
|
11
|
+
<div class="p-4">Panel body content</div>
|
|
12
|
+
</schmancy-boat>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Properties
|
|
16
|
+
| Property | Type | Default | Description |
|
|
17
|
+
|----------|------|---------|-------------|
|
|
18
|
+
| `id` | string | `'default'` | Unique identifier (persists drag position in localStorage) |
|
|
19
|
+
| `icon` | string | — | Material icon for the FAB state |
|
|
20
|
+
| `label` | string | — | Label text in FAB state |
|
|
21
|
+
| `open` | boolean | `false` | Panel open/closed (reflected) |
|
|
22
|
+
| `corner` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | `'bottom-right'` | Anchor corner |
|
|
23
|
+
| `expandedWidth` | string | responsive | e.g. `'320px'` |
|
|
24
|
+
| `lowered` | boolean | `false` | Lower shadow in FAB state |
|
|
25
|
+
|
|
26
|
+
## Getter / Setter
|
|
27
|
+
```typescript
|
|
28
|
+
boat.state = 'expanded' | 'collapsed' // equivalent to open = true/false
|
|
29
|
+
boat.state // current state
|
|
30
|
+
boat.expand() / boat.close()
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Behavior
|
|
34
|
+
- Drag to reposition. Releases snap to the nearest corner.
|
|
35
|
+
- Open/close uses clip-path + `SPRING_SMOOTH` for elegant reveal.
|
|
36
|
+
- Position persists in `localStorage` under `schmancy-boat-{id}`.
|
|
37
|
+
- Respects `prefers-reduced-motion`.
|
|
38
|
+
|
|
39
|
+
## Example
|
|
40
|
+
```html
|
|
41
|
+
<schmancy-boat id="chat" icon="chat" label="Chat" corner="bottom-right">
|
|
42
|
+
<span slot="header">Messages</span>
|
|
43
|
+
<schmancy-list class="p-2">
|
|
44
|
+
<!-- messages -->
|
|
45
|
+
</schmancy-list>
|
|
46
|
+
</schmancy-boat>
|
|
47
|
+
```
|
package/ai/charts.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Schmancy Charts
|
|
2
|
+
|
|
3
|
+
> Canvas-rendered area chart and horizontal pill chart. Theme-aware, lazy-animated, with auto peak highlighting.
|
|
4
|
+
|
|
5
|
+
## schmancy-area-chart
|
|
6
|
+
|
|
7
|
+
> Smooth Catmull-Rom spline area chart with peak markers and hover tooltips.
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<schmancy-area-chart
|
|
11
|
+
.data=${[
|
|
12
|
+
{ label: '9 AM', value: 12.4 },
|
|
13
|
+
{ label: '10 AM', value: 18.9 },
|
|
14
|
+
{ label: '11 AM', value: 42.1, metadata: { users: 320 } },
|
|
15
|
+
{ label: '12 PM', value: 56.7 },
|
|
16
|
+
]}
|
|
17
|
+
value-prefix="EUR "
|
|
18
|
+
value-decimals="2"
|
|
19
|
+
peak-count="2"
|
|
20
|
+
height="240"
|
|
21
|
+
></schmancy-area-chart>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Properties
|
|
25
|
+
| Property | Type | Default | Description |
|
|
26
|
+
|----------|------|---------|-------------|
|
|
27
|
+
| `data` | `ChartDataPoint[]` | `[]` | `{ label, value, metadata? }[]` |
|
|
28
|
+
| `height` | number | `200` | Chart height in px |
|
|
29
|
+
| `showGrid` | boolean | `true` | Background grid lines |
|
|
30
|
+
| `showLabels` | boolean | `true` | X-axis labels |
|
|
31
|
+
| `showTooltip` | boolean | `true` | Hover tooltip |
|
|
32
|
+
| `peakCount` | number | `3` | Top-N points highlighted larger |
|
|
33
|
+
| `animationDuration` | number | `800` | Entrance animation ms |
|
|
34
|
+
| `animated` | boolean | `true` | Animate on first visible |
|
|
35
|
+
| `valuePrefix` | string | `''` | Display prefix (e.g. `"EUR "`) |
|
|
36
|
+
| `valueSuffix` | string | `''` | Display suffix (e.g. `"%"`) |
|
|
37
|
+
| `valueDecimals` | number | `2` | Decimal places |
|
|
38
|
+
| `theme` | `Partial<ChartTheme>` | `{}` | Override colors, stroke, radii |
|
|
39
|
+
|
|
40
|
+
### ChartTheme
|
|
41
|
+
| Key | Default | Description |
|
|
42
|
+
|-----|---------|-------------|
|
|
43
|
+
| `primaryColor` | `--schmancy-sys-color-primary` | Line + fill gradient color |
|
|
44
|
+
| `gradientOpacity` | `[0.4, 0.05]` | Top/bottom fill opacity |
|
|
45
|
+
| `strokeWidth` | `2` | Line thickness |
|
|
46
|
+
| `pointRadius` | `4` | Normal point radius |
|
|
47
|
+
| `peakRadius` | `6` | Peak point radius |
|
|
48
|
+
|
|
49
|
+
## schmancy-pills
|
|
50
|
+
|
|
51
|
+
> Horizontal bar chart with optional stacked segments, medal ranks, and peak/low styling.
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
<schmancy-pills
|
|
55
|
+
.data=${[
|
|
56
|
+
{ label: 'Mon', value: 1240, rank: 1 },
|
|
57
|
+
{ label: 'Tue', value: 980 },
|
|
58
|
+
{ label: 'Wed', value: 1830, rank: 2, segments: [
|
|
59
|
+
{ label: 'Pizza', value: 1200 },
|
|
60
|
+
{ label: 'Drinks', value: 630 }
|
|
61
|
+
]},
|
|
62
|
+
]}
|
|
63
|
+
></schmancy-pills>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Properties
|
|
67
|
+
| Property | Type | Default | Description |
|
|
68
|
+
|----------|------|---------|-------------|
|
|
69
|
+
| `data` | `PillDataPoint[]` | `[]` | Rows with optional stacked `segments` |
|
|
70
|
+
| `valuePrefix` / `valueSuffix` / `valueDecimals` | — | — | Value formatting (same as area chart) |
|
|
71
|
+
| `showMedals` | boolean | `true` | Show 🥇🥈🥉 for rank 1/2/3 |
|
|
72
|
+
|
|
73
|
+
### PillDataPoint
|
|
74
|
+
```typescript
|
|
75
|
+
{
|
|
76
|
+
label: string
|
|
77
|
+
value: number
|
|
78
|
+
segments?: { label, value, color }[] // stacked
|
|
79
|
+
isPeak?: boolean // highlighted
|
|
80
|
+
isLow?: boolean // muted
|
|
81
|
+
rank?: 1 | 2 | 3 // medal
|
|
82
|
+
metadata?: Record<string, unknown>
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Behavior
|
|
87
|
+
- Both charts use an IntersectionObserver to defer animation until visible.
|
|
88
|
+
- Responsive — resize triggers a re-render.
|
|
89
|
+
- Dark/light aware via theme CSS variables.
|
|
90
|
+
|
|
91
|
+
## When to Use
|
|
92
|
+
- Area chart: time-series or comparative trends.
|
|
93
|
+
- Pills: ranked categorical data (leaderboards, top days, distribution).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# schmancy-connectivity-status
|
|
2
|
+
|
|
3
|
+
> App-wide online/offline banner. Mount once near the root and forget it.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<!-- In your app shell -->
|
|
8
|
+
<schmancy-connectivity-status></schmancy-connectivity-status>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Properties
|
|
12
|
+
None — it's entirely self-driven from `window` online/offline events.
|
|
13
|
+
|
|
14
|
+
## Behavior
|
|
15
|
+
- Listens to `window` `online` / `offline` events via RxJS `merge`.
|
|
16
|
+
- `distinctUntilChanged` prevents duplicate banners.
|
|
17
|
+
- Animated slide-down banner with spring-style easing when state changes.
|
|
18
|
+
- Offline: error-colored banner with pulsing icon.
|
|
19
|
+
- Online (after offline): success-colored banner with bouncing icon, auto-dismisses after a short timer.
|
|
20
|
+
- Plays matching sounds from the `$sounds` audio service (skipped on initial load).
|
|
21
|
+
- Respects `prefers-reduced-motion` implicitly via CSS.
|
|
22
|
+
|
|
23
|
+
## Setup
|
|
24
|
+
Place it once at the root — typically just inside your main `schmancy-theme` or app shell:
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<schmancy-theme>
|
|
28
|
+
<schmancy-connectivity-status></schmancy-connectivity-status>
|
|
29
|
+
<schmancy-page>
|
|
30
|
+
<!-- rest of app -->
|
|
31
|
+
</schmancy-page>
|
|
32
|
+
</schmancy-theme>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## See Also
|
|
36
|
+
- [audio.md](./audio.md) — the `$sounds` service used for feedback tones.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# schmancy-date-range-inline
|
|
2
|
+
|
|
3
|
+
> Smart inline from/to date picker with validation, auto-correction, and gap constraints. Simpler surface than the full `schmancy-date-range` popover.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-date-range-inline
|
|
8
|
+
.dateFrom=${{ label: 'Check-in', value: '2026-05-01' }}
|
|
9
|
+
.dateTo=${{ label: 'Check-out', value: '2026-05-05' }}
|
|
10
|
+
min-date="2026-01-01"
|
|
11
|
+
max-date="2026-12-31"
|
|
12
|
+
.minGap=${1}
|
|
13
|
+
.maxGap=${30}
|
|
14
|
+
@change=${e => this.handleRange(e.detail)}
|
|
15
|
+
></schmancy-date-range-inline>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Properties
|
|
19
|
+
| Property | Type | Default | Description |
|
|
20
|
+
|----------|------|---------|-------------|
|
|
21
|
+
| `type` | `'date' \| 'datetime-local'` | `'date'` | Underlying input type |
|
|
22
|
+
| `dateFrom` | `{ label, value }` | `{ label: 'From', value: '' }` | From-date configuration |
|
|
23
|
+
| `dateTo` | `{ label, value }` | `{ label: 'To', value: '' }` | To-date configuration |
|
|
24
|
+
| `minDate` | string | — | Minimum selectable date (ISO string) |
|
|
25
|
+
| `maxDate` | string | — | Maximum selectable date (ISO string) |
|
|
26
|
+
| `compact` | boolean | `false` | Tighter UI spacing |
|
|
27
|
+
| `autoCorrect` | boolean | `true` | Auto-fix invalid ranges (e.g. swap if from > to) |
|
|
28
|
+
| `minGap` | number | `0` | Minimum days between from and to |
|
|
29
|
+
| `maxGap` | number | — | Maximum days between from and to |
|
|
30
|
+
| `defaultGap` | number | `1` | Default gap when seeding the second date |
|
|
31
|
+
| `allowSameDate` | boolean | `false` | Permit from === to |
|
|
32
|
+
|
|
33
|
+
## Events
|
|
34
|
+
| Event | Detail | When |
|
|
35
|
+
|-------|--------|------|
|
|
36
|
+
| `change` | `{ dateFrom, dateTo, isValid }` | Either input changes |
|
|
37
|
+
|
|
38
|
+
## Behavior
|
|
39
|
+
- Extends `SchmancyFormField()` — integrates with `schmancy-form` validation.
|
|
40
|
+
- Auto-correction: invalid ranges flip, or the second date shifts to respect `minGap`/`maxGap`.
|
|
41
|
+
- Inline (not a popover) — always visible, good for filters and trip-planning UIs.
|
|
42
|
+
|
|
43
|
+
## Prefer full picker
|
|
44
|
+
For a popup calendar with presets and visual selection, use [`schmancy-date-range`](./date-range.md).
|