@mhmo91/schmancy 0.9.3 → 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/ai/INDEX.md +53 -302
- package/ai/area.md +91 -165
- package/ai/mailbox.md +1 -1
- package/ai/mixins.md +37 -139
- package/ai/store.md +70 -136
- package/dist/ai/INDEX.md +53 -302
- package/dist/ai/area.md +91 -165
- package/dist/ai/mailbox.md +1 -1
- package/dist/ai/mixins.md +37 -139
- package/dist/ai/store.md +70 -136
- package/dist/{area-CC8fUnra.js → area-CRoGqD_u.js} +2 -2
- package/dist/area-CRoGqD_u.js.map +1 -0
- package/dist/{area-wnWUAHEn.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-B2Z3WK_7.cjs → autocomplete-5rVhbieU.cjs} +1 -1
- package/dist/{autocomplete-B2Z3WK_7.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
- package/dist/{autocomplete-CJ7YgtKN.js → autocomplete-BllPQwr8.js} +3 -3
- package/dist/{autocomplete-CJ7YgtKN.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-C9eU6NO-.js → boat-BDTQ-du9.js} +2 -2
- package/dist/{boat-C9eU6NO-.js.map → boat-BDTQ-du9.js.map} +1 -1
- package/dist/{boat-B57_4TzJ.cjs → boat-DYEAZ8Qj.cjs} +1 -1
- package/dist/{boat-B57_4TzJ.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/{busy-CGZXy0h-.js → busy-ChDAeaKF.js} +1 -1
- package/dist/{busy-CGZXy0h-.js.map → busy-ChDAeaKF.js.map} +1 -1
- package/dist/{busy--6oimtop.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
- package/dist/{busy--6oimtop.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-BGJ0Hb1O.cjs → card-BvPWVEJX.cjs} +1 -1
- package/dist/{card-BGJ0Hb1O.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
- package/dist/{card-C-ee-l5O.js → card-DZFPRPqs.js} +1 -1
- package/dist/{card-C-ee-l5O.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-DuYaKoDZ.cjs → checkbox-BC_37rsG.cjs} +1 -1
- package/dist/{checkbox-DuYaKoDZ.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
- package/dist/{checkbox-FRcorDrD.js → checkbox-GSSjqo6w.js} +1 -1
- package/dist/{checkbox-FRcorDrD.js.map → checkbox-GSSjqo6w.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BpA0A-qr.cjs → chips-B19XS8Xc.cjs} +1 -1
- package/dist/{chips-BpA0A-qr.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
- package/dist/{chips-CyzNbKJD.js → chips-B9oAEfE_.js} +3 -3
- package/dist/{chips-CyzNbKJD.js.map → chips-B9oAEfE_.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-C7O9ltXm.js → code-highlight-DCk5lJY-.js} +1 -1
- package/dist/{code-highlight-C7O9ltXm.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
- package/dist/{code-highlight-DsBdSQBG.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
- package/dist/{code-highlight-DsBdSQBG.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-CkMvOiTR.js → components-COsM6sJZ.js} +2 -2
- package/dist/{components-CkMvOiTR.js.map → components-COsM6sJZ.js.map} +1 -1
- package/dist/{components-dDI3xeIf.cjs → components-CyD6a7gQ.cjs} +1 -1
- package/dist/{components-dDI3xeIf.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-BrN_Bs6_.js → date-range-Sfyco9-n.js} +3 -3
- package/dist/{date-range-BrN_Bs6_.js.map → date-range-Sfyco9-n.js.map} +1 -1
- package/dist/{date-range-70zhLUKE.cjs → date-range-ZAaQB22I.cjs} +1 -1
- package/dist/{date-range-70zhLUKE.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
- package/dist/{date-range-inline-Cp294DxR.js → date-range-inline-Bl8qbiQF.js} +1 -1
- package/dist/{date-range-inline-Cp294DxR.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
- package/dist/{date-range-inline-CPzD-tIv.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
- package/dist/{date-range-inline-CPzD-tIv.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-COcAkBqB.cjs → delay-7boauN6N.cjs} +1 -1
- package/dist/{delay-COcAkBqB.cjs.map → delay-7boauN6N.cjs.map} +1 -1
- package/dist/{delay-IV0Swce2.js → delay-CgX6m0HN.js} +3 -3
- package/dist/{delay-IV0Swce2.js.map → delay-CgX6m0HN.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-DgWkPqmt.cjs → details-BHnk8l4q.cjs} +1 -1
- package/dist/{details-DgWkPqmt.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
- package/dist/{details-CuKmr3Qw.js → details-BPkUg8Cq.js} +2 -2
- package/dist/{details-CuKmr3Qw.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-BWoUbfgZ.js → divider-CW9a7MMj.js} +2 -2
- package/dist/{divider-BWoUbfgZ.js.map → divider-CW9a7MMj.js.map} +1 -1
- package/dist/{divider-BghtrMbn.cjs → divider-_khrhrZo.cjs} +1 -1
- package/dist/{divider-BghtrMbn.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-XyDE5SsO.cjs → expand-Cp7-PH8b.cjs} +1 -1
- package/dist/{expand-XyDE5SsO.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
- package/dist/{expand-CJU9m4ga.js → expand-iQ7EOMP7.js} +3 -3
- package/dist/{expand-CJU9m4ga.js.map → expand-iQ7EOMP7.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-CsrRKKqE.cjs → extra-IKAiJJhv.cjs} +1 -1
- package/dist/{extra-CsrRKKqE.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
- package/dist/{extra-BxXFmW1w.js → extra-wEpvEFbK.js} +2 -2
- package/dist/{extra-BxXFmW1w.js.map → extra-wEpvEFbK.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-BD86t_NU.js → float-BQ_urmMs.js} +2 -2
- package/dist/{float-BD86t_NU.js.map → float-BQ_urmMs.js.map} +1 -1
- package/dist/{float-DBv1FINW.cjs → float-D5rNC82i.cjs} +1 -1
- package/dist/{float-DBv1FINW.cjs.map → float-D5rNC82i.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-D0bIeDWT.cjs → form-BqN1AGFj.cjs} +1 -1
- package/dist/{form-D0bIeDWT.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
- package/dist/{form-Cp5-I_ZV.js → form-CajC5HnO.js} +1 -1
- package/dist/{form-Cp5-I_ZV.js.map → form-CajC5HnO.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icons-D8w_20mO.cjs → icons-B57_93VV.cjs} +1 -1
- package/dist/{icons-D8w_20mO.cjs.map → icons-B57_93VV.cjs.map} +1 -1
- package/dist/{icons-BpU0_l92.js → icons-BDqiGXrO.js} +1 -1
- package/dist/{icons-BpU0_l92.js.map → icons-BDqiGXrO.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BjwxA2Pg.cjs → iframe-DNHL3GIk.cjs} +1 -1
- package/dist/{iframe-BjwxA2Pg.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
- package/dist/{iframe-tY1GY5g1.js → iframe-WnWPIrBG.js} +1 -1
- package/dist/{iframe-tY1GY5g1.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-BwxwognS.cjs → input-BiSrTcrR.cjs} +1 -1
- package/dist/{input-BwxwognS.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
- package/dist/{input-BnfTpRN9.js → input-VaXHFrRn.js} +1 -1
- package/dist/{input-BnfTpRN9.js.map → input-VaXHFrRn.js.map} +1 -1
- package/dist/{input-chip-MjOwX5EY.cjs → input-chip-Dy-AiP55.cjs} +1 -1
- package/dist/{input-chip-MjOwX5EY.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
- package/dist/{input-chip-CkM2aYmO.js → input-chip-QejNcRnS.js} +1 -1
- package/dist/{input-chip-CkM2aYmO.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-CJSlZlFL.js → layout-CnsXeCAy.js} +2 -2
- package/dist/{layout-CJSlZlFL.js.map → layout-CnsXeCAy.js.map} +1 -1
- package/dist/{layout-BV0EeyUS.cjs → layout-DNYG3phx.cjs} +1 -1
- package/dist/{layout-BV0EeyUS.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-groqGmJH.js → lightbox-BrI1Z31s.js} +2 -2
- package/dist/{lightbox-groqGmJH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
- package/dist/{lightbox-CpNMZHZW.cjs → lightbox-CmACf0t5.cjs} +1 -1
- package/dist/{lightbox-CpNMZHZW.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-DzkqT_r-.js → list-Cm-jjXxM.js} +2 -2
- package/dist/{list-DzkqT_r-.js.map → list-Cm-jjXxM.js.map} +1 -1
- package/dist/{list-CyHd0Zc2.cjs → list-swIL9VDv.cjs} +1 -1
- package/dist/{list-CyHd0Zc2.cjs.map → list-swIL9VDv.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BG6_-nYX.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
- package/dist/{litElement.mixin-BG6_-nYX.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
- package/dist/{litElement.mixin-Dm-4L8zL.js → litElement.mixin-6jJYHCrZ.js} +1 -1
- package/dist/{litElement.mixin-Dm-4L8zL.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
- package/dist/{mailbox-BcqnXYVP.js → mailbox-BuvsVaAQ.js} +4 -4
- package/dist/{mailbox-BcqnXYVP.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
- package/dist/{mailbox-C5eYTd7p.cjs → mailbox-D6LkQcN5.cjs} +1 -1
- package/dist/{mailbox-C5eYTd7p.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-C0o1PgLE.js → map-CQiKAxC3.js} +1 -1
- package/dist/{map-C0o1PgLE.js.map → map-CQiKAxC3.js.map} +1 -1
- package/dist/{map-BncheFt5.cjs → map-D5NN4VET.cjs} +1 -1
- package/dist/{map-BncheFt5.cjs.map → map-D5NN4VET.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-uwqlQbLd.js → menu-C1x04YZw.js} +2 -2
- package/dist/{menu-uwqlQbLd.js.map → menu-C1x04YZw.js.map} +1 -1
- package/dist/{menu-yXzwJZFf.cjs → menu-CkgMO9K5.cjs} +1 -1
- package/dist/{menu-yXzwJZFf.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-DzYT4deA.js → notification-BnBgxjF-.js} +3 -3
- package/dist/{notification-DzYT4deA.js.map → notification-BnBgxjF-.js.map} +1 -1
- package/dist/{notification-BjwTfLAl.cjs → notification-CZFEhWxc.cjs} +1 -1
- package/dist/{notification-BjwTfLAl.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BJsD3u2D.cjs → option-BrxCVwSx.cjs} +1 -1
- package/dist/{option-BJsD3u2D.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
- package/dist/{option-JFHxgiYl.js → option-DBO8xZwd.js} +1 -1
- package/dist/{option-JFHxgiYl.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-BoRmyGAa.cjs → progress-Db2e4_Zd.cjs} +1 -1
- package/dist/{progress-BoRmyGAa.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
- package/dist/{progress-BUh5WBqx.js → progress-DeiHxXo7.js} +2 -2
- package/dist/{progress-BUh5WBqx.js.map → progress-DeiHxXo7.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-8MrDz_qX.js → provide-C1aQhxYo.js} +1 -1
- package/dist/{provide-8MrDz_qX.js.map → provide-C1aQhxYo.js.map} +1 -1
- package/dist/{provide-CDkxgjHb.cjs → provide-DHnhQtCH.cjs} +1 -1
- package/dist/{provide-CDkxgjHb.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-rhrvhB5X.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
- package/dist/{radio-group-rhrvhB5X.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
- package/dist/{radio-group-DbOWUPhi.js → radio-group-zSO0AkJf.js} +1 -1
- package/dist/{radio-group-DbOWUPhi.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-BE9W9PF2.cjs → scroll-QMCmbbDv.cjs} +1 -1
- package/dist/{scroll-BE9W9PF2.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
- package/dist/{scroll-qGks1R0k.js → scroll-cBDzye64.js} +1 -1
- package/dist/{scroll-qGks1R0k.js.map → scroll-cBDzye64.js.map} +1 -1
- package/dist/{select-DXU2kzg4.cjs → select-Ct37l3lg.cjs} +1 -1
- package/dist/{select-DXU2kzg4.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
- package/dist/{select-D9sgBRjU.js → select-c6HbWvKP.js} +2 -2
- package/dist/{select-D9sgBRjU.js.map → select-c6HbWvKP.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-CIxCCJ3H.js → sheet-BMXcUiIm.js} +4 -4
- package/dist/{sheet-CIxCCJ3H.js.map → sheet-BMXcUiIm.js.map} +1 -1
- package/dist/{sheet-CeX6BbNp.cjs → sheet-CQec-bCV.cjs} +1 -1
- package/dist/{sheet-CeX6BbNp.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-CAB7weBc.js → sheet.service-BcPV3Du4.js} +1 -1
- package/dist/{sheet.service-CAB7weBc.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
- package/dist/{sheet.service-DPAp7E3x.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
- package/dist/{sheet.service-DPAp7E3x.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{src-CbO5kJ2O.js → src-BLngW2bl.js} +42 -42
- package/dist/{src-CbO5kJ2O.js.map → src-BLngW2bl.js.map} +1 -1
- package/dist/{src-SraDxEeg.cjs → src-BtQVyqMy.cjs} +1 -1
- package/dist/{src-SraDxEeg.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{surface-DuH0pm2v.cjs → surface-BjKZoJxK.cjs} +1 -1
- package/dist/{surface-DuH0pm2v.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
- package/dist/{surface-eN_Jy2MJ.js → surface-pK8hME5c.js} +3 -3
- package/dist/{surface-eN_Jy2MJ.js.map → surface-pK8hME5c.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-CIXgN6iw.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
- package/dist/{surface.mixin-CIXgN6iw.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
- package/dist/{surface.mixin-D9jv1sKG.js → surface.mixin-CBNRpJum.js} +1 -1
- package/dist/{surface.mixin-D9jv1sKG.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
- package/dist/{table-Dg_tUGB_.js → table-BXIHX9h4.js} +2 -2
- package/dist/{table-Dg_tUGB_.js.map → table-BXIHX9h4.js.map} +1 -1
- package/dist/{table-C9rRQJEB.cjs → table-CiqgZzSd.cjs} +1 -1
- package/dist/{table-C9rRQJEB.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-soTL-x4G.cjs → tabs-CKa-W4qA.cjs} +1 -1
- package/dist/{tabs-soTL-x4G.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
- package/dist/{tabs-BbFC9omR.js → tabs-nbV5eblZ.js} +2 -2
- package/dist/{tabs-BbFC9omR.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-DaRUJ0ri.cjs → textarea-Cp1ZE60O.cjs} +1 -1
- package/dist/{textarea-DaRUJ0ri.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
- package/dist/{textarea-hChvHbNM.js → textarea-D7q8exMg.js} +1 -1
- package/dist/{textarea-hChvHbNM.js.map → textarea-D7q8exMg.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-ZYH2MqX9.cjs → theme-Da4SPq9X.cjs} +1 -1
- package/dist/{theme-ZYH2MqX9.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
- package/dist/{theme-B0M8Hlyo.js → theme-_VPV6Bxh.js} +3 -3
- package/dist/{theme-B0M8Hlyo.js.map → theme-_VPV6Bxh.js.map} +1 -1
- package/dist/{theme-button-BtlX_Zgd.js → theme-button--sX8A-m1.js} +1 -1
- package/dist/{theme-button-BtlX_Zgd.js.map → theme-button--sX8A-m1.js.map} +1 -1
- package/dist/{theme-button-Dvqg-rE_.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
- package/dist/{theme-button-Dvqg-rE_.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-Cf9f2bdx.cjs → typewriter-B2TnHPjw.cjs} +1 -1
- package/dist/{typewriter-Cf9f2bdx.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
- package/dist/{typewriter-CCel8Nta.js → typewriter-BrZNa8T-.js} +3 -3
- package/dist/{typewriter-CCel8Nta.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-CbgdwOZD.js → window-CM1ycigo.js} +2 -2
- package/dist/{window-CbgdwOZD.js.map → window-CM1ycigo.js.map} +1 -1
- package/dist/{window-B9_14c12.cjs → window-Uii13x_r.cjs} +1 -1
- package/dist/{window-B9_14c12.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-CC8fUnra.js.map +0 -1
- package/dist/area-wnWUAHEn.cjs.map +0 -1
- package/dist/tailwind.mixin-BIVhjNvD.js +0 -225
- package/dist/tailwind.mixin-BIVhjNvD.js.map +0 -1
- package/dist/tailwind.mixin-DSuEu-y3.cjs +0 -2
- package/dist/tailwind.mixin-DSuEu-y3.cjs.map +0 -1
- package/src/area/readme.md +0 -338
- package/src/area/router-guide.md +0 -360
- package/src/autocomplete/README.md +0 -485
- package/src/content-drawer/readme.md +0 -709
- package/src/icons/readme.md +0 -37
- package/src/list/readme.md +0 -62
- package/src/radio-group/readme.md +0 -315
- package/src/select/README.md +0 -405
- package/src/tabs/Readme.md +0 -397
- package/src/teleport/readme.md +0 -91
- package/src/tree/README.md +0 -59
- package/src/typewriter/IMPROVEMENTS.md +0 -174
- package/src/typewriter/QUICK_REFERENCE.md +0 -166
- package/src/typewriter/test-typewriter.html +0 -97
package/ai/area.md
CHANGED
|
@@ -1,215 +1,141 @@
|
|
|
1
|
-
# Area — Routing
|
|
1
|
+
# Area — Routing
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> `area` is the imperative API. `schmancy-area` is the region where a component lives. `schmancy-route` declares the options.
|
|
5
|
-
|
|
6
|
-
Routing in Schmancy is four things working together:
|
|
3
|
+
Schmancy's client-side router. Three pieces:
|
|
7
4
|
|
|
8
5
|
| Piece | Role |
|
|
9
6
|
|-------|------|
|
|
10
|
-
| `<schmancy-area name="...">` |
|
|
11
|
-
| `<schmancy-route when="tag">` | Declares which component can
|
|
12
|
-
| `area.push(...)` | Imperative navigation
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
}
|
|
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
|
|
14
|
+
|
|
15
|
+
```html
|
|
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>
|
|
31
|
+
</schmancy-area>
|
|
86
32
|
```
|
|
87
33
|
|
|
88
|
-
## `schmancy-area`
|
|
34
|
+
## `schmancy-area` properties
|
|
89
35
|
|
|
90
|
-
| Property | Type |
|
|
91
|
-
|
|
92
|
-
| `name` | string
|
|
93
|
-
| `default` | `RouteComponent \| string` |
|
|
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 |
|
|
94
40
|
|
|
95
|
-
## `schmancy-route`
|
|
41
|
+
## `schmancy-route` properties
|
|
96
42
|
|
|
97
|
-
| Property | Type |
|
|
98
|
-
|
|
99
|
-
| `when` | string
|
|
100
|
-
| `component` | `RouteComponent`
|
|
101
|
-
| `guard` | `Observable<boolean>` |
|
|
102
|
-
| `exact` | boolean |
|
|
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 |
|
|
103
49
|
|
|
104
|
-
## `area` service
|
|
50
|
+
## `area` service
|
|
105
51
|
|
|
106
52
|
```typescript
|
|
107
53
|
import { area } from '@mhmo91/schmancy'
|
|
108
54
|
|
|
109
55
|
area.push({
|
|
110
|
-
area: 'root',
|
|
111
|
-
component: 'app-index',
|
|
112
|
-
params?: { id: '123' },
|
|
56
|
+
area: 'root',
|
|
57
|
+
component: 'app-index',
|
|
58
|
+
params?: { id: '123' },
|
|
113
59
|
historyStrategy?: 'push' | 'replace' | 'silent',
|
|
114
60
|
})
|
|
115
61
|
```
|
|
116
62
|
|
|
117
63
|
`historyStrategy`:
|
|
118
|
-
- `'push'` (default) —
|
|
119
|
-
- `'replace'` — overwrites current
|
|
120
|
-
- `'silent'` — changes the area without
|
|
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
|
|
121
67
|
|
|
122
68
|
### Subscribe to route state
|
|
123
|
-
```typescript
|
|
124
|
-
connectedCallback() {
|
|
125
|
-
super.connectedCallback()
|
|
126
69
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
})
|
|
70
|
+
```typescript
|
|
71
|
+
area.on('root').pipe(
|
|
72
|
+
takeUntil(this.disconnecting),
|
|
73
|
+
).subscribe(route => { /* route.component, route.params */ })
|
|
132
74
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
75
|
+
area.params<{ id: string }>('detail').pipe(
|
|
76
|
+
takeUntil(this.disconnecting),
|
|
77
|
+
).subscribe(params => this.loadItem(params.id))
|
|
137
78
|
```
|
|
138
79
|
|
|
139
|
-
## Lazy
|
|
140
|
-
|
|
141
|
-
Code-split your routes. `lazy()` returns a preloadable reference.
|
|
80
|
+
## Lazy loading
|
|
142
81
|
|
|
143
82
|
```typescript
|
|
144
83
|
import { lazy } from '@mhmo91/schmancy'
|
|
145
|
-
|
|
146
84
|
const HomePage = lazy(() => import('./home.page'))
|
|
147
85
|
|
|
148
|
-
// Optional
|
|
149
|
-
|
|
150
|
-
@mouseenter=${() => HomePage.preload()}
|
|
151
|
-
@click=${() => area.push({ area: 'root', component: 'home-page' })}
|
|
152
|
-
>
|
|
153
|
-
Home
|
|
154
|
-
</schmancy-button>
|
|
86
|
+
// Optional preload
|
|
87
|
+
html`<button @mouseenter=${() => HomePage.preload()}>Home</button>`
|
|
155
88
|
```
|
|
156
89
|
|
|
157
|
-
## Guards
|
|
90
|
+
## Guards
|
|
158
91
|
|
|
159
|
-
|
|
92
|
+
`guard` is an Observable<boolean>.
|
|
160
93
|
|
|
161
|
-
|
|
162
|
-
|
|
94
|
+
- Emits `true` → route renders.
|
|
95
|
+
- Emits `false` → route dispatches a `redirect` event. Handle it with `area.push(...)`.
|
|
163
96
|
|
|
97
|
+
Auth guard:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
164
100
|
<schmancy-route when="app-index"
|
|
165
|
-
.component=${lazy(() => import('./app
|
|
166
|
-
.guard=${
|
|
167
|
-
map(
|
|
101
|
+
.component=${lazy(() => import('./app'))}
|
|
102
|
+
.guard=${authState$.pipe(
|
|
103
|
+
map(u => !!u),
|
|
168
104
|
takeUntil(this.disconnecting),
|
|
169
105
|
)}
|
|
170
106
|
@redirect=${() => area.push({
|
|
171
|
-
component: '
|
|
172
|
-
|
|
173
|
-
historyStrategy: 'replace',
|
|
174
|
-
})}
|
|
175
|
-
></schmancy-route>
|
|
107
|
+
component: 'home-page', area: 'root', historyStrategy: 'replace',
|
|
108
|
+
})}></schmancy-route>
|
|
176
109
|
```
|
|
177
110
|
|
|
178
|
-
|
|
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
|
|
111
|
+
Compound guard (multiple streams):
|
|
182
112
|
|
|
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
113
|
```typescript
|
|
193
|
-
|
|
194
|
-
|
|
114
|
+
.guard=${combineLatest([permissions$, orgContext.$]).pipe(
|
|
115
|
+
takeUntil(this.disconnecting),
|
|
116
|
+
map(([perms, org]) => perms.includes('billing.view') && org?.billing?.configured),
|
|
117
|
+
)}
|
|
195
118
|
```
|
|
196
119
|
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
// e.g. swapping between auth screens without adding history
|
|
200
|
-
area.push({ component: 'signup-form', area: 'sign', historyStrategy: 'silent' })
|
|
201
|
-
```
|
|
120
|
+
## Nested areas
|
|
202
121
|
|
|
203
|
-
|
|
204
|
-
```typescript
|
|
205
|
-
<schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
|
|
206
|
-
Agents
|
|
207
|
-
</schmancy-list-item>
|
|
208
|
-
```
|
|
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.
|
|
209
123
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
124
|
+
```html
|
|
125
|
+
<!-- outer -->
|
|
126
|
+
<schmancy-area name="root">
|
|
127
|
+
<schmancy-route when="app-index" .component=${AppShell}></schmancy-route>
|
|
128
|
+
</schmancy-area>
|
|
213
129
|
|
|
214
|
-
|
|
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>
|
|
134
|
+
</schmancy-area>
|
|
215
135
|
```
|
|
136
|
+
|
|
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/mailbox.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Schmancy Mailbox
|
|
2
2
|
|
|
3
|
-
> Full email composition + campaign management system. Orchestrates recipients, templates, editor, attachments, and preview.
|
|
3
|
+
> Full email composition + campaign management system. Orchestrates recipients, templates, editor, attachments, and preview.
|
|
4
4
|
|
|
5
5
|
## Components
|
|
6
6
|
|
package/ai/mixins.md
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `$LitElement`
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> It wires RxJS cleanup, Tailwind, cross-shadow discovery, and a few quality-of-life helpers into every element — so you never write that plumbing yourself.
|
|
3
|
+
Base class for Schmancy components. Extends `LitElement` with RxJS cleanup, Tailwind support, and cross-shadow discovery.
|
|
5
4
|
|
|
6
|
-
##
|
|
5
|
+
## Usage
|
|
7
6
|
|
|
8
7
|
```typescript
|
|
9
8
|
import { $LitElement } from '@mhmo91/schmancy/mixins'
|
|
10
9
|
import { customElement } from 'lit/decorators.js'
|
|
11
10
|
import { css, html } from 'lit'
|
|
12
11
|
|
|
13
|
-
@customElement('my-
|
|
14
|
-
class
|
|
12
|
+
@customElement('my-component')
|
|
13
|
+
class MyComponent extends $LitElement(css`
|
|
15
14
|
:host { display: block; }
|
|
16
15
|
`) {
|
|
17
16
|
render() {
|
|
@@ -20,147 +19,69 @@ class MyCard extends $LitElement(css`
|
|
|
20
19
|
}
|
|
21
20
|
```
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
`$LitElement(style?)` accepts either a Lit `css` tagged literal or a string (e.g. SCSS imported with `?inline`).
|
|
23
|
+
|
|
24
|
+
## Provided members
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
### `disconnecting: Subject<void>`
|
|
27
|
+
Emits once when the element disconnects. Pair with `takeUntil` for cleanup:
|
|
26
28
|
|
|
27
|
-
### 1. `disconnecting` — automatic RxJS cleanup
|
|
28
29
|
```typescript
|
|
29
30
|
connectedCallback() {
|
|
30
31
|
super.connectedCallback()
|
|
31
|
-
|
|
32
|
-
userContext.$.pipe(
|
|
32
|
+
someObservable$.pipe(
|
|
33
33
|
takeUntil(this.disconnecting),
|
|
34
|
-
).subscribe(
|
|
35
|
-
}
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
`disconnecting` is a `Subject<void>` that emits once when the element is detached from the DOM. Paired with `takeUntil`, it makes the entire Schmancy codebase manual-unsubscribe-free.
|
|
39
|
-
|
|
40
|
-
**This is the single most-used line in a Schmancy app.** If you see an RxJS pipe without `takeUntil(this.disconnecting)` — it's a leak.
|
|
41
|
-
|
|
42
|
-
### 2. `classMap(obj)` — space-splitting enhanced
|
|
43
|
-
```typescript
|
|
44
|
-
render() {
|
|
45
|
-
return html`
|
|
46
|
-
<div class=${this.classMap({
|
|
47
|
-
'flex items-center gap-2': true,
|
|
48
|
-
'bg-primary-default': this.active,
|
|
49
|
-
'opacity-50 pointer-events-none': this.disabled,
|
|
50
|
-
})}>
|
|
51
|
-
…
|
|
52
|
-
</div>
|
|
53
|
-
`
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Unlike standard Lit `classMap`, keys can be **space-separated** ("flex items-center gap-2"). Combined with Tailwind, you write natural class strings instead of one-class-per-key.
|
|
58
|
-
|
|
59
|
-
**Hard rule:** `class=${this.classMap(...)}` must be the *sole* expression in `class=`. You cannot mix it with string interpolation (` class="foo ${this.classMap(...)}"`) — Lit will fail silently.
|
|
60
|
-
|
|
61
|
-
### 3. `styleMap(obj)` — inline styles (passthrough)
|
|
62
|
-
```typescript
|
|
63
|
-
render() {
|
|
64
|
-
return html`
|
|
65
|
-
<div style=${this.styleMap({
|
|
66
|
-
width: `${this.size}px`,
|
|
67
|
-
opacity: this.visible ? 1 : 0,
|
|
68
|
-
})}></div>
|
|
69
|
-
`
|
|
34
|
+
).subscribe()
|
|
70
35
|
}
|
|
71
36
|
```
|
|
72
37
|
|
|
73
|
-
|
|
38
|
+
### `classMap(obj)`
|
|
39
|
+
Wraps Lit's `classMap` so keys can be space-separated:
|
|
74
40
|
|
|
75
|
-
### 4. `discover<T>(tag)` — cross-shadow component lookup
|
|
76
41
|
```typescript
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
takeUntil(this.disconnecting),
|
|
82
|
-
).subscribe(dialog => dialog?.setDefaultAction('confirm'))
|
|
83
|
-
}
|
|
42
|
+
html`<div class=${this.classMap({
|
|
43
|
+
'flex items-center gap-2': true,
|
|
44
|
+
'opacity-50': this.disabled,
|
|
45
|
+
})}></div>`
|
|
84
46
|
```
|
|
85
47
|
|
|
86
|
-
|
|
48
|
+
Must be the only expression in `class=` — don't mix with string interpolation.
|
|
87
49
|
|
|
88
|
-
###
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
## Tailwind support
|
|
92
|
-
|
|
93
|
-
Styles you import are pre-processed through the Schmancy Tailwind pipeline. Tailwind utility classes work in both the host and slotted content. All theme CSS variables (`--schmancy-sys-color-primary-default`, etc.) resolve inside the component's shadow root.
|
|
50
|
+
### `styleMap(obj)`
|
|
51
|
+
Passthrough to Lit's `styleMap`.
|
|
94
52
|
|
|
95
53
|
```typescript
|
|
96
|
-
|
|
97
|
-
render() {
|
|
98
|
-
return html`<div class="flex items-center gap-2 text-primary-default">…</div>`
|
|
99
|
-
}
|
|
54
|
+
html`<div style=${this.styleMap({ width: `${w}px` })}></div>`
|
|
100
55
|
```
|
|
101
56
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
For complex styling, import a `.scss?inline` file and pass it to `$LitElement`:
|
|
57
|
+
### `discover<T>(tag): Observable<T | null>`
|
|
58
|
+
Find another Schmancy component by tag via event-based handshake. Works across shadow DOM.
|
|
105
59
|
|
|
106
60
|
```typescript
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
class MyCard extends $LitElement(style) {
|
|
111
|
-
// SCSS features: nesting, mixins, @layer
|
|
112
|
-
}
|
|
61
|
+
this.discover<SchmancyDialog>('schmancy-dialog').pipe(
|
|
62
|
+
takeUntil(this.disconnecting),
|
|
63
|
+
).subscribe(dialog => dialog?.setDefaultAction('confirm'))
|
|
113
64
|
```
|
|
114
65
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
## Standard component shape
|
|
66
|
+
### Auto-response to discovery
|
|
67
|
+
Every `$LitElement` responds to `{its-tag}-where-are-you` events with `{its-tag}-here-i-am` carrying `{ detail: { component: this } }`.
|
|
118
68
|
|
|
119
|
-
|
|
69
|
+
## Component skeleton
|
|
120
70
|
|
|
121
71
|
```typescript
|
|
122
|
-
import { $LitElement } from '@mhmo91/schmancy/mixins'
|
|
123
|
-
import { css, html } from 'lit'
|
|
124
|
-
import { customElement, property, state } from 'lit/decorators.js'
|
|
125
|
-
import { Subject, takeUntil } from 'rxjs'
|
|
126
|
-
|
|
127
72
|
@customElement('my-component')
|
|
128
|
-
export class MyComponent extends $LitElement(css`
|
|
129
|
-
:host { display: block; }
|
|
130
|
-
`) {
|
|
131
|
-
// 1. Public API — reflected / typed
|
|
73
|
+
export class MyComponent extends $LitElement(css`:host { display: block }`) {
|
|
132
74
|
@property({ type: String, reflect: true }) variant: 'a' | 'b' = 'a'
|
|
133
|
-
@property({ type: Boolean, reflect: true }) disabled = false
|
|
134
|
-
|
|
135
|
-
// 2. Internal state
|
|
136
75
|
@state() private _open = false
|
|
137
76
|
|
|
138
|
-
// 3. Private RxJS subjects (if needed)
|
|
139
|
-
private _value$ = new Subject<string>()
|
|
140
|
-
|
|
141
|
-
// 4. Lifecycle
|
|
142
77
|
connectedCallback() {
|
|
143
78
|
super.connectedCallback()
|
|
144
|
-
this.
|
|
145
|
-
debounceTime(150),
|
|
146
|
-
takeUntil(this.disconnecting),
|
|
147
|
-
).subscribe(v => this.handleValue(v))
|
|
79
|
+
// subscriptions here, with takeUntil(this.disconnecting)
|
|
148
80
|
}
|
|
149
81
|
|
|
150
|
-
// 5. Rendering
|
|
151
82
|
render() {
|
|
152
|
-
return html
|
|
153
|
-
<div class=${this.classMap({
|
|
154
|
-
'flex items-center': true,
|
|
155
|
-
'opacity-50': this.disabled,
|
|
156
|
-
})}>
|
|
157
|
-
<slot></slot>
|
|
158
|
-
</div>
|
|
159
|
-
`
|
|
83
|
+
return html`<slot></slot>`
|
|
160
84
|
}
|
|
161
|
-
|
|
162
|
-
// 6. Public imperative API (if any)
|
|
163
|
-
public open() { this._open = true }
|
|
164
85
|
}
|
|
165
86
|
|
|
166
87
|
declare global {
|
|
@@ -170,32 +91,9 @@ declare global {
|
|
|
170
91
|
}
|
|
171
92
|
```
|
|
172
93
|
|
|
173
|
-
Guarantees from this shape:
|
|
174
|
-
- Every subscription dies with the element.
|
|
175
|
-
- Tailwind + theme tokens work.
|
|
176
|
-
- Component is discoverable from anywhere via `discover('my-component')`.
|
|
177
|
-
- Declared in the global tag map for TypeScript.
|
|
178
|
-
|
|
179
|
-
## Why not `LitElement` directly?
|
|
180
|
-
|
|
181
|
-
You can, but you'll re-implement:
|
|
182
|
-
- Manual unsubscribe handling in `disconnectedCallback` for every `Observable`.
|
|
183
|
-
- `classMap` space-splitting.
|
|
184
|
-
- Tailwind variable wiring.
|
|
185
|
-
- Cross-shadow discovery.
|
|
186
|
-
|
|
187
|
-
`$LitElement` is 200 lines of common-denominator plumbing that keeps apps consistent. Using it is the convention; not using it is the outlier.
|
|
188
|
-
|
|
189
94
|
## Rules
|
|
190
95
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
5. **Prefer `ref(createRef())` over `querySelector`** for your own shadow tree.
|
|
196
|
-
6. **Register in `HTMLElementTagNameMap`** for TypeScript autocompletion.
|
|
197
|
-
|
|
198
|
-
## See also
|
|
199
|
-
- [store](./store.md) — contexts pair with `takeUntil(this.disconnecting)` for auto-cleaning subscriptions.
|
|
200
|
-
- [area](./area.md) — route components all extend `$LitElement`.
|
|
201
|
-
- [discovery](./discovery.md) — the discovery events `$LitElement` handles automatically.
|
|
96
|
+
- Call `super.connectedCallback()` / `super.disconnectedCallback()` when overriding.
|
|
97
|
+
- All RxJS subscriptions end with `.pipe(takeUntil(this.disconnecting))`.
|
|
98
|
+
- Register the tag in `HTMLElementTagNameMap` for TypeScript.
|
|
99
|
+
- Don't mix `classMap` with string interpolation in the same attribute.
|