@mhmo91/schmancy 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -75
- package/ai/INDEX.md +321 -0
- package/ai/area.md +194 -40
- package/ai/audio.md +69 -0
- package/ai/boat.md +47 -0
- package/ai/charts.md +93 -0
- package/ai/connectivity.md +36 -0
- package/ai/date-range-inline.md +44 -0
- package/ai/delay.md +50 -0
- package/ai/discovery.md +67 -0
- package/ai/expand.md +63 -0
- package/ai/extra.md +59 -0
- package/ai/float.md +14 -0
- package/ai/iframe.md +44 -0
- package/ai/json.md +33 -0
- package/ai/layout.md +63 -0
- package/ai/mailbox.md +102 -0
- package/ai/map.md +55 -0
- package/ai/mixins.md +169 -38
- package/ai/option.md +43 -0
- package/ai/page.md +42 -0
- package/ai/qr-scanner.md +51 -0
- package/ai/range.md +47 -0
- package/ai/rxjs-utils.md +60 -0
- package/ai/slider.md +43 -0
- package/ai/store.md +158 -49
- package/ai/teleport.md +55 -0
- package/ai/theme-button.md +26 -0
- package/ai/typewriter.md +46 -0
- package/ai/utils.md +95 -0
- package/ai/window.md +67 -0
- package/dist/ai/INDEX.md +321 -0
- package/dist/ai/area.md +194 -40
- package/dist/ai/audio.md +69 -0
- package/dist/ai/boat.md +47 -0
- package/dist/ai/charts.md +93 -0
- package/dist/ai/connectivity.md +36 -0
- package/dist/ai/date-range-inline.md +44 -0
- package/dist/ai/delay.md +50 -0
- package/dist/ai/discovery.md +67 -0
- package/dist/ai/expand.md +63 -0
- package/dist/ai/extra.md +59 -0
- package/dist/ai/float.md +14 -0
- package/dist/ai/iframe.md +44 -0
- package/dist/ai/json.md +33 -0
- package/dist/ai/layout.md +63 -0
- package/dist/ai/mailbox.md +102 -0
- package/dist/ai/map.md +55 -0
- package/dist/ai/mixins.md +169 -38
- package/dist/ai/option.md +43 -0
- package/dist/ai/page.md +42 -0
- package/dist/ai/qr-scanner.md +51 -0
- package/dist/ai/range.md +47 -0
- package/dist/ai/rxjs-utils.md +60 -0
- package/dist/ai/slider.md +43 -0
- package/dist/ai/store.md +158 -49
- package/dist/ai/teleport.md +55 -0
- package/dist/ai/theme-button.md +26 -0
- package/dist/ai/typewriter.md +46 -0
- package/dist/ai/utils.md +95 -0
- package/dist/ai/window.md +67 -0
- package/dist/{area-DbBcfm5p.js → area-CC8fUnra.js} +2 -2
- package/dist/{area-DbBcfm5p.js.map → area-CC8fUnra.js.map} +1 -1
- package/dist/{area-1h9xEpTc.cjs → area-wnWUAHEn.cjs} +1 -1
- package/dist/{area-1h9xEpTc.cjs.map → area-wnWUAHEn.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-B2Z3WK_7.cjs} +1 -1
- package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-B2Z3WK_7.cjs.map} +1 -1
- package/dist/{autocomplete-DDVsegep.js → autocomplete-CJ7YgtKN.js} +3 -3
- package/dist/{autocomplete-DDVsegep.js.map → autocomplete-CJ7YgtKN.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-Cf1oJ0ka.cjs → boat-B57_4TzJ.cjs} +1 -1
- package/dist/{boat-Cf1oJ0ka.cjs.map → boat-B57_4TzJ.cjs.map} +1 -1
- package/dist/{boat-T8Ov4-yA.js → boat-C9eU6NO-.js} +2 -2
- package/dist/{boat-T8Ov4-yA.js.map → boat-C9eU6NO-.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/{busy-DF9wztWL.cjs → busy--6oimtop.cjs} +1 -1
- package/dist/{busy-DF9wztWL.cjs.map → busy--6oimtop.cjs.map} +1 -1
- package/dist/{busy-BD6D5P-l.js → busy-CGZXy0h-.js} +1 -1
- package/dist/{busy-BD6D5P-l.js.map → busy-CGZXy0h-.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +2 -2
- package/dist/{card-Csvu8UJ9.cjs → card-BGJ0Hb1O.cjs} +1 -1
- package/dist/{card-Csvu8UJ9.cjs.map → card-BGJ0Hb1O.cjs.map} +1 -1
- package/dist/{card-DM_miKMd.js → card-C-ee-l5O.js} +1 -1
- package/dist/{card-DM_miKMd.js.map → card-C-ee-l5O.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.js +2 -2
- package/dist/{checkbox-sJujc_ga.cjs → checkbox-DuYaKoDZ.cjs} +1 -1
- package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-DuYaKoDZ.cjs.map} +1 -1
- package/dist/{checkbox-BgGtMaMR.js → checkbox-FRcorDrD.js} +1 -1
- package/dist/{checkbox-BgGtMaMR.js.map → checkbox-FRcorDrD.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-D_e6wijp.cjs → chips-BpA0A-qr.cjs} +1 -1
- package/dist/{chips-D_e6wijp.cjs.map → chips-BpA0A-qr.cjs.map} +1 -1
- package/dist/{chips-BZaH4wez.js → chips-CyzNbKJD.js} +3 -3
- package/dist/{chips-BZaH4wez.js.map → chips-CyzNbKJD.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-Q3cc6ukq.js → code-highlight-C7O9ltXm.js} +1 -1
- package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-C7O9ltXm.js.map} +1 -1
- package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-DsBdSQBG.cjs} +1 -1
- package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-DsBdSQBG.cjs.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-CRhkB3V2.js → components-CkMvOiTR.js} +2 -2
- package/dist/{components-CRhkB3V2.js.map → components-CkMvOiTR.js.map} +1 -1
- package/dist/{components-DnlEYYDs.cjs → components-dDI3xeIf.cjs} +1 -1
- package/dist/{components-DnlEYYDs.cjs.map → components-dDI3xeIf.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-cymbTDnl.cjs → date-range-70zhLUKE.cjs} +1 -1
- package/dist/{date-range-cymbTDnl.cjs.map → date-range-70zhLUKE.cjs.map} +1 -1
- package/dist/{date-range-C0IYnvHF.js → date-range-BrN_Bs6_.js} +3 -3
- package/dist/{date-range-C0IYnvHF.js.map → date-range-BrN_Bs6_.js.map} +1 -1
- package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-CPzD-tIv.cjs} +1 -1
- package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-CPzD-tIv.cjs.map} +1 -1
- package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Cp294DxR.js} +1 -1
- package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Cp294DxR.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-D6mQLUp-.cjs → delay-COcAkBqB.cjs} +1 -1
- package/dist/{delay-D6mQLUp-.cjs.map → delay-COcAkBqB.cjs.map} +1 -1
- package/dist/{delay-D1dVP93u.js → delay-IV0Swce2.js} +3 -3
- package/dist/{delay-D1dVP93u.js.map → delay-IV0Swce2.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Cv4OOrVW.js → details-CuKmr3Qw.js} +2 -2
- package/dist/{details-Cv4OOrVW.js.map → details-CuKmr3Qw.js.map} +1 -1
- package/dist/{details-CPT_Mi4e.cjs → details-DgWkPqmt.cjs} +1 -1
- package/dist/{details-CPT_Mi4e.cjs.map → details-DgWkPqmt.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/{divider-DDC-kND3.js → divider-BWoUbfgZ.js} +2 -2
- package/dist/{divider-DDC-kND3.js.map → divider-BWoUbfgZ.js.map} +1 -1
- package/dist/{divider-nZ_2to2N.cjs → divider-BghtrMbn.cjs} +1 -1
- package/dist/{divider-nZ_2to2N.cjs.map → divider-BghtrMbn.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-Bp3N8CcL.js → expand-CJU9m4ga.js} +3 -3
- package/dist/{expand-Bp3N8CcL.js.map → expand-CJU9m4ga.js.map} +1 -1
- package/dist/{expand-Crdts9q_.cjs → expand-XyDE5SsO.cjs} +1 -1
- package/dist/{expand-Crdts9q_.cjs.map → expand-XyDE5SsO.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-DupwhQhC.js → extra-BxXFmW1w.js} +2 -2
- package/dist/{extra-DupwhQhC.js.map → extra-BxXFmW1w.js.map} +1 -1
- package/dist/{extra-B0IZCg0t.cjs → extra-CsrRKKqE.cjs} +1 -1
- package/dist/{extra-B0IZCg0t.cjs.map → extra-CsrRKKqE.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-Dqdc1_S5.js → float-BD86t_NU.js} +2 -2
- package/dist/{float-Dqdc1_S5.js.map → float-BD86t_NU.js.map} +1 -1
- package/dist/{float-CQoJ_oSB.cjs → float-DBv1FINW.cjs} +1 -1
- package/dist/{float-CQoJ_oSB.cjs.map → float-DBv1FINW.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-CW5XNuTg.js → form-Cp5-I_ZV.js} +1 -1
- package/dist/{form-CW5XNuTg.js.map → form-Cp5-I_ZV.js.map} +1 -1
- package/dist/{form-CvoLqMY7.cjs → form-D0bIeDWT.cjs} +1 -1
- package/dist/{form-CvoLqMY7.cjs.map → form-D0bIeDWT.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icons-Cpfdb7sA.js → icons-BpU0_l92.js} +1 -1
- package/dist/{icons-Cpfdb7sA.js.map → icons-BpU0_l92.js.map} +1 -1
- package/dist/{icons-BLQHEbIk.cjs → icons-D8w_20mO.cjs} +1 -1
- package/dist/{icons-BLQHEbIk.cjs.map → icons-D8w_20mO.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-sJGXBbxT.cjs → iframe-BjwxA2Pg.cjs} +1 -1
- package/dist/{iframe-sJGXBbxT.cjs.map → iframe-BjwxA2Pg.cjs.map} +1 -1
- package/dist/{iframe-DG6HVYdy.js → iframe-tY1GY5g1.js} +1 -1
- package/dist/{iframe-DG6HVYdy.js.map → iframe-tY1GY5g1.js.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +33 -33
- package/dist/{input-BevxycIt.js → input-BnfTpRN9.js} +1 -1
- package/dist/{input-BevxycIt.js.map → input-BnfTpRN9.js.map} +1 -1
- package/dist/{input-DGTdmp1Q.cjs → input-BwxwognS.cjs} +1 -1
- package/dist/{input-DGTdmp1Q.cjs.map → input-BwxwognS.cjs.map} +1 -1
- package/dist/{input-chip-BWS-SFU4.js → input-chip-CkM2aYmO.js} +1 -1
- package/dist/{input-chip-BWS-SFU4.js.map → input-chip-CkM2aYmO.js.map} +1 -1
- package/dist/{input-chip-CKVtjInb.cjs → input-chip-MjOwX5EY.cjs} +1 -1
- package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-MjOwX5EY.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/{layout-CQdd8UCr.cjs → layout-BV0EeyUS.cjs} +1 -1
- package/dist/{layout-CQdd8UCr.cjs.map → layout-BV0EeyUS.cjs.map} +1 -1
- package/dist/{layout-DxLjlDfr.js → layout-CJSlZlFL.js} +2 -2
- package/dist/{layout-DxLjlDfr.js.map → layout-CJSlZlFL.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-C_863_XU.cjs → lightbox-CpNMZHZW.cjs} +1 -1
- package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CpNMZHZW.cjs.map} +1 -1
- package/dist/{lightbox-Bjc55lHH.js → lightbox-groqGmJH.js} +2 -2
- package/dist/{lightbox-Bjc55lHH.js.map → lightbox-groqGmJH.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CaXzdN9_.cjs → list-CyHd0Zc2.cjs} +1 -1
- package/dist/{list-CaXzdN9_.cjs.map → list-CyHd0Zc2.cjs.map} +1 -1
- package/dist/{list-BAqhlzZd.js → list-DzkqT_r-.js} +2 -2
- package/dist/{list-BAqhlzZd.js.map → list-DzkqT_r-.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-BG6_-nYX.cjs} +1 -1
- package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-BG6_-nYX.cjs.map} +1 -1
- package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-Dm-4L8zL.js} +1 -1
- package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-Dm-4L8zL.js.map} +1 -1
- package/dist/{mailbox-DuMUH4f3.js → mailbox-BcqnXYVP.js} +4 -4
- package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BcqnXYVP.js.map} +1 -1
- package/dist/{mailbox-BvsLXpvy.cjs → mailbox-C5eYTd7p.cjs} +1 -1
- package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-C5eYTd7p.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-C2Msv9TQ.cjs → map-BncheFt5.cjs} +1 -1
- package/dist/{map-C2Msv9TQ.cjs.map → map-BncheFt5.cjs.map} +1 -1
- package/dist/{map-DkIy1ph7.js → map-C0o1PgLE.js} +1 -1
- package/dist/{map-DkIy1ph7.js.map → map-C0o1PgLE.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-DEeDKW5U.js → menu-uwqlQbLd.js} +2 -2
- package/dist/{menu-DEeDKW5U.js.map → menu-uwqlQbLd.js.map} +1 -1
- package/dist/{menu-Mm71lv9k.cjs → menu-yXzwJZFf.cjs} +1 -1
- package/dist/{menu-Mm71lv9k.cjs.map → menu-yXzwJZFf.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-cTgXEDZ0.cjs → notification-BjwTfLAl.cjs} +1 -1
- package/dist/{notification-cTgXEDZ0.cjs.map → notification-BjwTfLAl.cjs.map} +1 -1
- package/dist/{notification-K-ug8cKk.js → notification-DzYT4deA.js} +3 -3
- package/dist/{notification-K-ug8cKk.js.map → notification-DzYT4deA.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-5rEOmtAm.cjs → option-BJsD3u2D.cjs} +1 -1
- package/dist/{option-5rEOmtAm.cjs.map → option-BJsD3u2D.cjs.map} +1 -1
- package/dist/{option-TFSKvSjT.js → option-JFHxgiYl.js} +1 -1
- package/dist/{option-TFSKvSjT.js.map → option-JFHxgiYl.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +3 -3
- package/dist/{progress-Cta3nM-f.js → progress-BUh5WBqx.js} +2 -2
- package/dist/{progress-Cta3nM-f.js.map → progress-BUh5WBqx.js.map} +1 -1
- package/dist/{progress-iu0AMbSg.cjs → progress-BoRmyGAa.cjs} +1 -1
- package/dist/{progress-iu0AMbSg.cjs.map → progress-BoRmyGAa.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-D69zybs5.js → provide-8MrDz_qX.js} +1 -1
- package/dist/{provide-D69zybs5.js.map → provide-8MrDz_qX.js.map} +1 -1
- package/dist/{provide-BEyyKlDM.cjs → provide-CDkxgjHb.cjs} +1 -1
- package/dist/{provide-BEyyKlDM.cjs.map → provide-CDkxgjHb.cjs.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/{radio-group-BjSWmYJC.js → radio-group-DbOWUPhi.js} +1 -1
- package/dist/{radio-group-BjSWmYJC.js.map → radio-group-DbOWUPhi.js.map} +1 -1
- package/dist/{radio-group-DKPN0T50.cjs → radio-group-rhrvhB5X.cjs} +1 -1
- package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-rhrvhB5X.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{scroll-mayaGGpE.cjs → scroll-BE9W9PF2.cjs} +1 -1
- package/dist/{scroll-mayaGGpE.cjs.map → scroll-BE9W9PF2.cjs.map} +1 -1
- package/dist/{scroll-tG1vaRFO.js → scroll-qGks1R0k.js} +1 -1
- package/dist/{scroll-tG1vaRFO.js.map → scroll-qGks1R0k.js.map} +1 -1
- package/dist/{select-CepryGGP.js → select-D9sgBRjU.js} +2 -2
- package/dist/{select-CepryGGP.js.map → select-D9sgBRjU.js.map} +1 -1
- package/dist/{select-C4YK5Arj.cjs → select-DXU2kzg4.cjs} +1 -1
- package/dist/{select-C4YK5Arj.cjs.map → select-DXU2kzg4.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-D2uT95S1.js → sheet-CIxCCJ3H.js} +4 -4
- package/dist/{sheet-D2uT95S1.js.map → sheet-CIxCCJ3H.js.map} +1 -1
- package/dist/{sheet-Cy4C2-kG.cjs → sheet-CeX6BbNp.cjs} +1 -1
- package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CeX6BbNp.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Os8KJGSE.js → sheet.service-CAB7weBc.js} +1 -1
- package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-CAB7weBc.js.map} +1 -1
- package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-DPAp7E3x.cjs} +1 -1
- package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-DPAp7E3x.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{src-BLcmKlCH.js → src-CbO5kJ2O.js} +42 -42
- package/dist/{src-BLcmKlCH.js.map → src-CbO5kJ2O.js.map} +1 -1
- package/dist/{src-tfU0akqI.cjs → src-SraDxEeg.cjs} +1 -1
- package/dist/{src-tfU0akqI.cjs.map → src-SraDxEeg.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{surface-CiiIYeJN.cjs → surface-DuH0pm2v.cjs} +1 -1
- package/dist/{surface-CiiIYeJN.cjs.map → surface-DuH0pm2v.cjs.map} +1 -1
- package/dist/{surface-fXvRpS6s.js → surface-eN_Jy2MJ.js} +3 -3
- package/dist/{surface-fXvRpS6s.js.map → surface-eN_Jy2MJ.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-CIXgN6iw.cjs} +1 -1
- package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-CIXgN6iw.cjs.map} +1 -1
- package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-D9jv1sKG.js} +1 -1
- package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-D9jv1sKG.js.map} +1 -1
- package/dist/{table-BRVKlNjl.cjs → table-C9rRQJEB.cjs} +1 -1
- package/dist/{table-BRVKlNjl.cjs.map → table-C9rRQJEB.cjs.map} +1 -1
- package/dist/{table-BeXnwSsq.js → table-Dg_tUGB_.js} +2 -2
- package/dist/{table-BeXnwSsq.js.map → table-Dg_tUGB_.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-y708NWQ2.js → tabs-BbFC9omR.js} +2 -2
- package/dist/{tabs-y708NWQ2.js.map → tabs-BbFC9omR.js.map} +1 -1
- package/dist/{tabs-CBU9Ctqm.cjs → tabs-soTL-x4G.cjs} +1 -1
- package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-soTL-x4G.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BIVhjNvD.js +225 -0
- package/dist/{tailwind.mixin-C4cx3IOr.js.map → tailwind.mixin-BIVhjNvD.js.map} +1 -1
- package/dist/tailwind.mixin-DSuEu-y3.cjs +2 -0
- package/dist/{tailwind.mixin-DGiyLbEi.cjs.map → tailwind.mixin-DSuEu-y3.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-BhAoJg8c.cjs → textarea-DaRUJ0ri.cjs} +1 -1
- package/dist/{textarea-BhAoJg8c.cjs.map → textarea-DaRUJ0ri.cjs.map} +1 -1
- package/dist/{textarea-Bl8-gQEJ.js → textarea-hChvHbNM.js} +1 -1
- package/dist/{textarea-Bl8-gQEJ.js.map → textarea-hChvHbNM.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-DZUpYJn-.js → theme-B0M8Hlyo.js} +3 -3
- package/dist/{theme-DZUpYJn-.js.map → theme-B0M8Hlyo.js.map} +1 -1
- package/dist/{theme-C-vdR-Ic.cjs → theme-ZYH2MqX9.cjs} +1 -1
- package/dist/{theme-C-vdR-Ic.cjs.map → theme-ZYH2MqX9.cjs.map} +1 -1
- package/dist/{theme-button-CwrvpOMK.js → theme-button-BtlX_Zgd.js} +1 -1
- package/dist/{theme-button-CwrvpOMK.js.map → theme-button-BtlX_Zgd.js.map} +1 -1
- package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Dvqg-rE_.cjs} +1 -1
- package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Dvqg-rE_.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-mxVw5dFn.js → typewriter-CCel8Nta.js} +3 -3
- package/dist/{typewriter-mxVw5dFn.js.map → typewriter-CCel8Nta.js.map} +1 -1
- package/dist/{typewriter-CXQIzqPV.cjs → typewriter-Cf9f2bdx.cjs} +1 -1
- package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-Cf9f2bdx.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{window-DFMlB1Tq.cjs → window-B9_14c12.cjs} +1 -1
- package/dist/{window-DFMlB1Tq.cjs.map → window-B9_14c12.cjs.map} +1 -1
- package/dist/{window-EWYJJC_H.js → window-CbgdwOZD.js} +2 -2
- package/dist/{window-EWYJJC_H.js.map → window-CbgdwOZD.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
- package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
package/dist/ai/area.md
CHANGED
|
@@ -1,61 +1,215 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Area — Routing Foundation
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **Not just a component. The routing framework your app runs on.**
|
|
4
|
+
> `area` is the imperative API. `schmancy-area` is the region where a component lives. `schmancy-route` declares the options.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
Routing in Schmancy is four things working together:
|
|
7
|
+
|
|
8
|
+
| Piece | Role |
|
|
9
|
+
|-------|------|
|
|
10
|
+
| `<schmancy-area name="...">` | Declares a named region of the screen |
|
|
11
|
+
| `<schmancy-route when="tag">` | Declares which component can occupy it |
|
|
12
|
+
| `area.push(...)` | Imperative navigation (click handlers, guards, effects) |
|
|
13
|
+
| `lazy(() => import('...'))` | Code-split route components |
|
|
14
|
+
|
|
15
|
+
## The Shape of a Real App
|
|
16
|
+
|
|
17
|
+
Real apps nest areas. Outer `name="root"` handles public vs. authenticated. Inner `name="aria"` handles sub-views inside the authenticated shell.
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// app root — handles sign-in / public / authenticated
|
|
21
|
+
@customElement('my-app')
|
|
22
|
+
class MyApp extends $LitElement() {
|
|
23
|
+
render() {
|
|
24
|
+
return html`
|
|
25
|
+
<schmancy-theme root scheme="dark">
|
|
26
|
+
<schmancy-surface type="solid" fill="all">
|
|
27
|
+
<schmancy-scroll>
|
|
28
|
+
<schmancy-area
|
|
29
|
+
name="root"
|
|
30
|
+
.default=${lazy(() => import('./pages/landing.page'))}
|
|
31
|
+
>
|
|
32
|
+
<schmancy-route when="landing-page"
|
|
33
|
+
.component=${lazy(() => import('./pages/landing.page'))}
|
|
34
|
+
></schmancy-route>
|
|
35
|
+
|
|
36
|
+
<schmancy-route when="methodology-page"
|
|
37
|
+
.component=${lazy(() => import('./pages/methodology.page'))}
|
|
38
|
+
></schmancy-route>
|
|
39
|
+
|
|
40
|
+
<!-- Guarded route -->
|
|
41
|
+
<schmancy-route when="app-index"
|
|
42
|
+
.component=${lazy(() => import('./app/app.page'))}
|
|
43
|
+
.guard=${firebaseAuthState$.pipe(
|
|
44
|
+
map(u => !!u && !u.isAnonymous),
|
|
45
|
+
takeUntil(this.disconnecting),
|
|
46
|
+
)}
|
|
47
|
+
@redirect=${() => area.push({
|
|
48
|
+
component: 'landing-page',
|
|
49
|
+
area: 'root',
|
|
50
|
+
historyStrategy: 'replace',
|
|
51
|
+
})}
|
|
52
|
+
></schmancy-route>
|
|
53
|
+
</schmancy-area>
|
|
54
|
+
</schmancy-scroll>
|
|
55
|
+
</schmancy-surface>
|
|
56
|
+
</schmancy-theme>
|
|
57
|
+
`
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// nested area — inside the app shell
|
|
64
|
+
render() {
|
|
65
|
+
return html`
|
|
66
|
+
<schmancy-nav-drawer>
|
|
67
|
+
<schmancy-nav-drawer-navbar width="180px">
|
|
68
|
+
<schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
|
|
69
|
+
Agents
|
|
70
|
+
</schmancy-list-item>
|
|
71
|
+
<schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-knowledge-page' })}>
|
|
72
|
+
Knowledge
|
|
73
|
+
</schmancy-list-item>
|
|
74
|
+
</schmancy-nav-drawer-navbar>
|
|
75
|
+
|
|
76
|
+
<schmancy-nav-drawer-content>
|
|
77
|
+
<schmancy-area name="aria" default="aria-knowledge-page">
|
|
78
|
+
<schmancy-route when="aria-agents-page" .component=${lazy(() => import('./pages/agents'))}></schmancy-route>
|
|
79
|
+
<schmancy-route when="aria-knowledge-page" .component=${lazy(() => import('./pages/knowledge'))}></schmancy-route>
|
|
80
|
+
<schmancy-route when="aria-templates-page" .component=${lazy(() => import('./pages/templates'))}></schmancy-route>
|
|
81
|
+
</schmancy-area>
|
|
82
|
+
</schmancy-nav-drawer-content>
|
|
83
|
+
</schmancy-nav-drawer>
|
|
84
|
+
`
|
|
85
|
+
}
|
|
11
86
|
```
|
|
12
87
|
|
|
13
|
-
##
|
|
14
|
-
| Property | Type | Default | Description |
|
|
15
|
-
|----------|------|---------|-------------|
|
|
16
|
-
| name | string | required | Unique area name |
|
|
17
|
-
| default | RouteComponent | - | Default route component |
|
|
88
|
+
## `schmancy-area` Properties
|
|
18
89
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
90
|
+
| Property | Type | Required | Description |
|
|
91
|
+
|----------|------|----------|-------------|
|
|
92
|
+
| `name` | string | ✅ | Unique area identifier referenced in `area.push({ area: name })` |
|
|
93
|
+
| `default` | `RouteComponent \| string` | — | Fallback when no route matches — prefer `lazy()` |
|
|
94
|
+
|
|
95
|
+
## `schmancy-route` Properties
|
|
96
|
+
|
|
97
|
+
| Property | Type | Required | Description |
|
|
98
|
+
|----------|------|----------|-------------|
|
|
99
|
+
| `when` | string | ✅ | **Must exactly match** a `@customElement('tag')` tag name |
|
|
100
|
+
| `component` | `RouteComponent` | ✅ | Class, tag name, or `lazy()` wrapper |
|
|
101
|
+
| `guard` | `Observable<boolean>` | — | When emits `false`, route blocks and fires `@redirect` |
|
|
102
|
+
| `exact` | boolean | — | Strict-equality matching |
|
|
103
|
+
|
|
104
|
+
## `area` service (imperative API)
|
|
26
105
|
|
|
27
|
-
## Programmatic Navigation (area service)
|
|
28
106
|
```typescript
|
|
29
107
|
import { area } from '@mhmo91/schmancy'
|
|
30
108
|
|
|
31
|
-
|
|
32
|
-
area
|
|
109
|
+
area.push({
|
|
110
|
+
area: 'root', // target area name
|
|
111
|
+
component: 'app-index', // tag name (or class reference)
|
|
112
|
+
params?: { id: '123' }, // pushed onto area.params()
|
|
113
|
+
historyStrategy?: 'push' | 'replace' | 'silent',
|
|
114
|
+
})
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`historyStrategy`:
|
|
118
|
+
- `'push'` (default) — browser back button returns to previous route
|
|
119
|
+
- `'replace'` — overwrites current history entry (use after guards / redirects)
|
|
120
|
+
- `'silent'` — changes the area without adding any history (transient state)
|
|
33
121
|
|
|
34
|
-
|
|
35
|
-
|
|
122
|
+
### Subscribe to route state
|
|
123
|
+
```typescript
|
|
124
|
+
connectedCallback() {
|
|
125
|
+
super.connectedCallback()
|
|
126
|
+
|
|
127
|
+
area.on('root').pipe(
|
|
128
|
+
takeUntil(this.disconnecting),
|
|
129
|
+
).subscribe(route => {
|
|
130
|
+
console.log('root area is now:', route.component)
|
|
131
|
+
})
|
|
36
132
|
|
|
37
|
-
|
|
38
|
-
|
|
133
|
+
area.params<{ id: string }>('detail').pipe(
|
|
134
|
+
takeUntil(this.disconnecting),
|
|
135
|
+
).subscribe(params => this.loadItem(params.id))
|
|
136
|
+
}
|
|
39
137
|
```
|
|
40
138
|
|
|
41
139
|
## Lazy Loading
|
|
140
|
+
|
|
141
|
+
Code-split your routes. `lazy()` returns a preloadable reference.
|
|
142
|
+
|
|
42
143
|
```typescript
|
|
43
144
|
import { lazy } from '@mhmo91/schmancy'
|
|
44
|
-
const LazyPage = lazy(() => import('./my-page'))
|
|
45
145
|
|
|
46
|
-
|
|
47
|
-
|
|
146
|
+
const HomePage = lazy(() => import('./home.page'))
|
|
147
|
+
|
|
148
|
+
// Optional: preload on hover
|
|
149
|
+
<schmancy-button
|
|
150
|
+
@mouseenter=${() => HomePage.preload()}
|
|
151
|
+
@click=${() => area.push({ area: 'root', component: 'home-page' })}
|
|
152
|
+
>
|
|
153
|
+
Home
|
|
154
|
+
</schmancy-button>
|
|
48
155
|
```
|
|
49
156
|
|
|
50
|
-
##
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
157
|
+
## Guards — the production pattern
|
|
158
|
+
|
|
159
|
+
Guards are **RxJS Observables**, not booleans. This lets auth state flow through naturally.
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
import { firebaseAuthState$ } from './contexts/user.context'
|
|
163
|
+
|
|
164
|
+
<schmancy-route when="app-index"
|
|
165
|
+
.component=${lazy(() => import('./app/app.page'))}
|
|
166
|
+
.guard=${firebaseAuthState$.pipe(
|
|
167
|
+
map(user => !!user && !user.isAnonymous),
|
|
168
|
+
takeUntil(this.disconnecting),
|
|
169
|
+
)}
|
|
170
|
+
@redirect=${() => area.push({
|
|
171
|
+
component: 'landing-page',
|
|
172
|
+
area: 'root',
|
|
173
|
+
historyStrategy: 'replace',
|
|
174
|
+
})}
|
|
175
|
+
></schmancy-route>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
- `guard` emits `true` → route renders.
|
|
179
|
+
- `guard` emits `false` → Schmancy fires a `redirect` event on the route; handle it with `area.push(...)` using `historyStrategy: 'replace'` so the blocked route doesn't stay in history.
|
|
180
|
+
|
|
181
|
+
## Rules
|
|
182
|
+
|
|
183
|
+
1. `when="tag-name"` **must exactly match** `@customElement('tag-name')` on the component's class.
|
|
184
|
+
2. Every route component should extend `$LitElement` and use `takeUntil(this.disconnecting)` in subscriptions.
|
|
185
|
+
3. Route components are responsible for their own scroll/focus handling on mount.
|
|
186
|
+
4. When calling `area.push` after auth guards or side-effectful redirects, use `historyStrategy: 'replace'`.
|
|
187
|
+
5. Nested areas are not just allowed — they're the default for any app with a shell + sub-views.
|
|
188
|
+
|
|
189
|
+
## Common recipes
|
|
190
|
+
|
|
191
|
+
### Redirect after sign-in
|
|
192
|
+
```typescript
|
|
193
|
+
await signIn(email, password)
|
|
194
|
+
area.push({ component: 'app-index', area: 'root', historyStrategy: 'replace' })
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Silent state swap (no history pollution)
|
|
198
|
+
```typescript
|
|
199
|
+
// e.g. swapping between auth screens without adding history
|
|
200
|
+
area.push({ component: 'signup-form', area: 'sign', historyStrategy: 'silent' })
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Click-driven sub-nav
|
|
204
|
+
```typescript
|
|
205
|
+
<schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
|
|
206
|
+
Agents
|
|
207
|
+
</schmancy-list-item>
|
|
59
208
|
```
|
|
60
209
|
|
|
61
|
-
|
|
210
|
+
### Preload routes on hover
|
|
211
|
+
```typescript
|
|
212
|
+
const DashboardPage = lazy(() => import('./dashboard.page'))
|
|
213
|
+
|
|
214
|
+
html`<a @mouseenter=${() => DashboardPage.preload()} @click=${() => area.push({ area: 'root', component: 'dashboard-page' })}>Dashboard</a>`
|
|
215
|
+
```
|
package/dist/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/dist/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
|
+
```
|
|
@@ -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).
|
package/dist/ai/delay.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# schmancy-delay
|
|
2
|
+
|
|
3
|
+
> Defers rendering of children by a duration, with an entrance motion. Siblings auto-stagger without manual delay math.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-delay delay="200">
|
|
8
|
+
<h1>Appears after 200ms</h1>
|
|
9
|
+
</schmancy-delay>
|
|
10
|
+
|
|
11
|
+
<!-- Auto-staggered list: each child inherits + stacks its own delay -->
|
|
12
|
+
<schmancy-delay delay="100">
|
|
13
|
+
<schmancy-delay delay="100"><div>Step 1</div></schmancy-delay>
|
|
14
|
+
<schmancy-delay delay="100"><div>Step 2</div></schmancy-delay>
|
|
15
|
+
<schmancy-delay delay="100"><div>Step 3</div></schmancy-delay>
|
|
16
|
+
</schmancy-delay>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Properties
|
|
20
|
+
| Property | Type | Default | Description |
|
|
21
|
+
|----------|------|---------|-------------|
|
|
22
|
+
| `delay` | number | `0` | Ms to wait before rendering this node |
|
|
23
|
+
| `motion` | `'flyBelow' \| 'flyAbove' \| 'fadeIn'` | `'flyBelow'` | `@lit-labs/motion` entrance animation |
|
|
24
|
+
| `once` | boolean | `true` | Skip delay on subsequent renders within the same session (keyed on content hash) |
|
|
25
|
+
|
|
26
|
+
## Context
|
|
27
|
+
- Consumes parent `delayContext` and adds its own delay.
|
|
28
|
+
- Walks previous siblings that are also `schmancy-delay` and accumulates their delays.
|
|
29
|
+
- Provides the resulting `effectiveDelay` down to descendants via context.
|
|
30
|
+
|
|
31
|
+
Result: nested `schmancy-delay` nodes produce natural staggered entrances without manual math.
|
|
32
|
+
|
|
33
|
+
## Session Caching
|
|
34
|
+
- When `once=true`, the content is hashed on first render and cached in `sessionStorage`.
|
|
35
|
+
- On subsequent component mounts (route revisits), the delay is skipped — content appears instantly.
|
|
36
|
+
- Set `once=false` to always replay the delay.
|
|
37
|
+
|
|
38
|
+
## Example — hero reveal
|
|
39
|
+
```html
|
|
40
|
+
<schmancy-delay delay="0" motion="fadeIn">
|
|
41
|
+
<schmancy-delay delay="300"><h1>Welcome</h1></schmancy-delay>
|
|
42
|
+
<schmancy-delay delay="200"><p>Subtitle…</p></schmancy-delay>
|
|
43
|
+
<schmancy-delay delay="200">
|
|
44
|
+
<schmancy-button variant="filled">Get started</schmancy-button>
|
|
45
|
+
</schmancy-delay>
|
|
46
|
+
</schmancy-delay>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## See Also
|
|
50
|
+
- Use [`gravity`](./directives.md#gravity--elements-fall-into-place-with-mass-based-bounce) directive for mass-based staggered reveal on lists — often simpler than nested `schmancy-delay`.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Schmancy Discovery
|
|
2
|
+
|
|
3
|
+
> Event-based component and element discovery across shadow DOM boundaries. No DOM traversal — just broadcast and race.
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
Web components hide inside shadow DOM. Traversing with `querySelector` + `shadowRoot` everywhere is fragile. Discovery broadcasts a "where are you?" event; components respond with themselves.
|
|
7
|
+
|
|
8
|
+
## API
|
|
9
|
+
```typescript
|
|
10
|
+
import {
|
|
11
|
+
discover,
|
|
12
|
+
discoverComponent,
|
|
13
|
+
discoverAnyComponent,
|
|
14
|
+
discoverElement,
|
|
15
|
+
discoverAllElements,
|
|
16
|
+
} from '@mhmo91/schmancy'
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### `discover(query, timeout?)`
|
|
20
|
+
Smart auto-detect. Routes to `discoverElement` for CSS selectors (`#`, `.`, `[`) and `discoverComponent` for tag names.
|
|
21
|
+
```typescript
|
|
22
|
+
discover<SchmancyNavigationRail>('schmancy-navigation-rail').subscribe(el => el?.select('home'))
|
|
23
|
+
discover('#hero-card').subscribe(el => el?.focus())
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### `discoverComponent(tag, timeout = 100)`
|
|
27
|
+
Broadcasts `{tag}-where-are-you`; first responder wins.
|
|
28
|
+
```typescript
|
|
29
|
+
discoverComponent<SchmancyDialog>('schmancy-dialog')
|
|
30
|
+
.subscribe(dialog => dialog?.open())
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### `discoverAnyComponent(...tags)`
|
|
34
|
+
Race between multiple tags — first to respond wins.
|
|
35
|
+
```typescript
|
|
36
|
+
discoverAnyComponent('schmancy-navigation-rail', 'schmancy-navigation-bar')
|
|
37
|
+
.subscribe(nav => nav?.select(route))
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### `discoverElement(selector, timeout = 150)`
|
|
41
|
+
Finds any element by CSS selector across shadow DOM. Uses a request ID + universal `schmancy-discover` event. Every `$LitElement` responds if it finds a match in its shadow root.
|
|
42
|
+
```typescript
|
|
43
|
+
discoverElement('[data-section="pricing"]').subscribe(section => section?.scrollIntoView())
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### `discoverAllElements(selector, timeout = 150)`
|
|
47
|
+
Collects **all** matching responses within the timeout window.
|
|
48
|
+
```typescript
|
|
49
|
+
discoverAllElements('.flagged').subscribe(all => console.log(all.length))
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## How the Handshake Works
|
|
53
|
+
1. Caller creates a unique `requestId` and broadcasts `schmancy-discover` on `window` with `{ selector, requestId }`.
|
|
54
|
+
2. Every `$LitElement` listens for this event (wired up in the base class).
|
|
55
|
+
3. Any matching element dispatches `schmancy-discover-response` with `{ requestId, element }`.
|
|
56
|
+
4. Caller collects responses for the timeout window and emits via RxJS.
|
|
57
|
+
|
|
58
|
+
## Pattern in Base Class
|
|
59
|
+
Every `$LitElement` inherits auto-response: `discover<T>(tag)` (method on the component) and `{tagName}-where-are-you`/`{tagName}-here-i-am` events. See [mixins.md](./mixins.md).
|
|
60
|
+
|
|
61
|
+
## When to Use
|
|
62
|
+
- Cross-shadow coordination between unrelated components.
|
|
63
|
+
- Imperatively focusing or driving a far-away UI piece from a handler.
|
|
64
|
+
|
|
65
|
+
## When NOT to Use
|
|
66
|
+
- Same-tree data flow — use `@provide`/`@consume` (Lit context) or Schmancy [`store`](./store.md).
|
|
67
|
+
- Parent-to-child directly — just use `this.renderRoot.querySelector()`.
|