@mhmo91/schmancy 0.9.3 → 0.9.5
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/.claude-plugin/plugin.json +13 -0
- package/README.md +14 -4
- package/dist/.claude-plugin/plugin.json +13 -0
- 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/skills/INDEX.md +72 -0
- package/dist/skills/SKILL.md +120 -0
- package/dist/skills/area.md +141 -0
- package/{ai → dist/skills}/mailbox.md +1 -1
- package/dist/skills/mixins.md +99 -0
- package/dist/skills/schmancy/INDEX.md +72 -0
- package/dist/skills/schmancy/SKILL.md +120 -0
- package/dist/skills/schmancy/area.md +141 -0
- package/dist/{ai → skills/schmancy}/mailbox.md +1 -1
- package/dist/skills/schmancy/mixins.md +99 -0
- package/dist/skills/schmancy/store.md +126 -0
- package/dist/skills/store.md +126 -0
- 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 +3 -4
- package/skills/schmancy/INDEX.md +72 -0
- package/skills/schmancy/SKILL.md +120 -0
- package/skills/schmancy/animation.md +64 -0
- package/skills/schmancy/area.md +141 -0
- package/skills/schmancy/audio.md +69 -0
- package/skills/schmancy/autocomplete.md +53 -0
- package/skills/schmancy/avatar.md +47 -0
- package/skills/schmancy/badge.md +41 -0
- package/skills/schmancy/boat.md +47 -0
- package/skills/schmancy/busy.md +36 -0
- package/skills/schmancy/button.md +59 -0
- package/skills/schmancy/card.md +53 -0
- package/skills/schmancy/charts.md +93 -0
- package/skills/schmancy/checkbox.md +36 -0
- package/skills/schmancy/chips.md +87 -0
- package/skills/schmancy/code-highlight.md +47 -0
- package/skills/schmancy/connectivity.md +36 -0
- package/skills/schmancy/content-drawer.md +65 -0
- package/skills/schmancy/date-range-inline.md +44 -0
- package/skills/schmancy/date-range.md +50 -0
- package/skills/schmancy/delay.md +50 -0
- package/skills/schmancy/details.md +66 -0
- package/skills/schmancy/dialog.md +69 -0
- package/skills/schmancy/directives.md +298 -0
- package/skills/schmancy/discovery.md +67 -0
- package/skills/schmancy/divider.md +31 -0
- package/skills/schmancy/dropdown.md +47 -0
- package/skills/schmancy/expand.md +63 -0
- package/skills/schmancy/extra.md +59 -0
- package/skills/schmancy/float.md +14 -0
- package/skills/schmancy/form.md +49 -0
- package/skills/schmancy/icons.md +44 -0
- package/skills/schmancy/iframe.md +44 -0
- package/skills/schmancy/input.md +56 -0
- package/skills/schmancy/json.md +33 -0
- package/skills/schmancy/layout.md +63 -0
- package/skills/schmancy/lightbox.md +36 -0
- package/skills/schmancy/list.md +67 -0
- package/skills/schmancy/mailbox.md +102 -0
- package/skills/schmancy/map.md +55 -0
- package/skills/schmancy/menu.md +39 -0
- package/skills/schmancy/mixins.md +99 -0
- package/skills/schmancy/nav-drawer.md +52 -0
- package/skills/schmancy/navigation-bar.md +48 -0
- package/skills/schmancy/navigation-rail.md +62 -0
- package/skills/schmancy/notification.md +60 -0
- package/skills/schmancy/option.md +43 -0
- package/skills/schmancy/page.md +42 -0
- package/skills/schmancy/progress.md +30 -0
- package/skills/schmancy/qr-scanner.md +51 -0
- package/skills/schmancy/radio-group.md +50 -0
- package/skills/schmancy/range.md +47 -0
- package/skills/schmancy/rxjs-utils.md +60 -0
- package/skills/schmancy/select.md +49 -0
- package/skills/schmancy/sheet.md +76 -0
- package/skills/schmancy/slider.md +43 -0
- package/skills/schmancy/steps.md +53 -0
- package/skills/schmancy/store.md +126 -0
- package/skills/schmancy/surface.md +86 -0
- package/skills/schmancy/table.md +60 -0
- package/skills/schmancy/tabs.md +49 -0
- package/skills/schmancy/teleport.md +55 -0
- package/skills/schmancy/textarea.md +48 -0
- package/skills/schmancy/theme-button.md +26 -0
- package/skills/schmancy/theme.md +58 -0
- package/skills/schmancy/tooltip.md +38 -0
- package/skills/schmancy/tree.md +53 -0
- package/skills/schmancy/typewriter.md +46 -0
- package/skills/schmancy/typography.md +53 -0
- package/skills/schmancy/utils.md +95 -0
- package/skills/schmancy/window.md +67 -0
- 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/ai/INDEX.md +0 -321
- package/ai/area.md +0 -215
- package/ai/mixins.md +0 -201
- package/ai/store.md +0 -192
- package/dist/ai/INDEX.md +0 -321
- package/dist/ai/area.md +0 -215
- package/dist/ai/mixins.md +0 -201
- package/dist/ai/store.md +0 -192
- 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 → dist/skills}/animation.md +0 -0
- /package/{ai → dist/skills}/audio.md +0 -0
- /package/{ai → dist/skills}/autocomplete.md +0 -0
- /package/{ai → dist/skills}/avatar.md +0 -0
- /package/{ai → dist/skills}/badge.md +0 -0
- /package/{ai → dist/skills}/boat.md +0 -0
- /package/{ai → dist/skills}/busy.md +0 -0
- /package/{ai → dist/skills}/button.md +0 -0
- /package/{ai → dist/skills}/card.md +0 -0
- /package/{ai → dist/skills}/charts.md +0 -0
- /package/{ai → dist/skills}/checkbox.md +0 -0
- /package/{ai → dist/skills}/chips.md +0 -0
- /package/{ai → dist/skills}/code-highlight.md +0 -0
- /package/{ai → dist/skills}/connectivity.md +0 -0
- /package/{ai → dist/skills}/content-drawer.md +0 -0
- /package/{ai → dist/skills}/date-range-inline.md +0 -0
- /package/{ai → dist/skills}/date-range.md +0 -0
- /package/{ai → dist/skills}/delay.md +0 -0
- /package/{ai → dist/skills}/details.md +0 -0
- /package/{ai → dist/skills}/dialog.md +0 -0
- /package/{ai → dist/skills}/directives.md +0 -0
- /package/{ai → dist/skills}/discovery.md +0 -0
- /package/{ai → dist/skills}/divider.md +0 -0
- /package/{ai → dist/skills}/dropdown.md +0 -0
- /package/{ai → dist/skills}/expand.md +0 -0
- /package/{ai → dist/skills}/extra.md +0 -0
- /package/{ai → dist/skills}/float.md +0 -0
- /package/{ai → dist/skills}/form.md +0 -0
- /package/{ai → dist/skills}/icons.md +0 -0
- /package/{ai → dist/skills}/iframe.md +0 -0
- /package/{ai → dist/skills}/input.md +0 -0
- /package/{ai → dist/skills}/json.md +0 -0
- /package/{ai → dist/skills}/layout.md +0 -0
- /package/{ai → dist/skills}/lightbox.md +0 -0
- /package/{ai → dist/skills}/list.md +0 -0
- /package/{ai → dist/skills}/map.md +0 -0
- /package/{ai → dist/skills}/menu.md +0 -0
- /package/{ai → dist/skills}/nav-drawer.md +0 -0
- /package/{ai → dist/skills}/navigation-bar.md +0 -0
- /package/{ai → dist/skills}/navigation-rail.md +0 -0
- /package/{ai → dist/skills}/notification.md +0 -0
- /package/{ai → dist/skills}/option.md +0 -0
- /package/{ai → dist/skills}/page.md +0 -0
- /package/{ai → dist/skills}/progress.md +0 -0
- /package/{ai → dist/skills}/qr-scanner.md +0 -0
- /package/{ai → dist/skills}/radio-group.md +0 -0
- /package/{ai → dist/skills}/range.md +0 -0
- /package/{ai → dist/skills}/rxjs-utils.md +0 -0
- /package/dist/{ai → skills/schmancy}/animation.md +0 -0
- /package/dist/{ai → skills/schmancy}/audio.md +0 -0
- /package/dist/{ai → skills/schmancy}/autocomplete.md +0 -0
- /package/dist/{ai → skills/schmancy}/avatar.md +0 -0
- /package/dist/{ai → skills/schmancy}/badge.md +0 -0
- /package/dist/{ai → skills/schmancy}/boat.md +0 -0
- /package/dist/{ai → skills/schmancy}/busy.md +0 -0
- /package/dist/{ai → skills/schmancy}/button.md +0 -0
- /package/dist/{ai → skills/schmancy}/card.md +0 -0
- /package/dist/{ai → skills/schmancy}/charts.md +0 -0
- /package/dist/{ai → skills/schmancy}/checkbox.md +0 -0
- /package/dist/{ai → skills/schmancy}/chips.md +0 -0
- /package/dist/{ai → skills/schmancy}/code-highlight.md +0 -0
- /package/dist/{ai → skills/schmancy}/connectivity.md +0 -0
- /package/dist/{ai → skills/schmancy}/content-drawer.md +0 -0
- /package/dist/{ai → skills/schmancy}/date-range-inline.md +0 -0
- /package/dist/{ai → skills/schmancy}/date-range.md +0 -0
- /package/dist/{ai → skills/schmancy}/delay.md +0 -0
- /package/dist/{ai → skills/schmancy}/details.md +0 -0
- /package/dist/{ai → skills/schmancy}/dialog.md +0 -0
- /package/dist/{ai → skills/schmancy}/directives.md +0 -0
- /package/dist/{ai → skills/schmancy}/discovery.md +0 -0
- /package/dist/{ai → skills/schmancy}/divider.md +0 -0
- /package/dist/{ai → skills/schmancy}/dropdown.md +0 -0
- /package/dist/{ai → skills/schmancy}/expand.md +0 -0
- /package/dist/{ai → skills/schmancy}/extra.md +0 -0
- /package/dist/{ai → skills/schmancy}/float.md +0 -0
- /package/dist/{ai → skills/schmancy}/form.md +0 -0
- /package/dist/{ai → skills/schmancy}/icons.md +0 -0
- /package/dist/{ai → skills/schmancy}/iframe.md +0 -0
- /package/dist/{ai → skills/schmancy}/input.md +0 -0
- /package/dist/{ai → skills/schmancy}/json.md +0 -0
- /package/dist/{ai → skills/schmancy}/layout.md +0 -0
- /package/dist/{ai → skills/schmancy}/lightbox.md +0 -0
- /package/dist/{ai → skills/schmancy}/list.md +0 -0
- /package/dist/{ai → skills/schmancy}/map.md +0 -0
- /package/dist/{ai → skills/schmancy}/menu.md +0 -0
- /package/dist/{ai → skills/schmancy}/nav-drawer.md +0 -0
- /package/dist/{ai → skills/schmancy}/navigation-bar.md +0 -0
- /package/dist/{ai → skills/schmancy}/navigation-rail.md +0 -0
- /package/dist/{ai → skills/schmancy}/notification.md +0 -0
- /package/dist/{ai → skills/schmancy}/option.md +0 -0
- /package/dist/{ai → skills/schmancy}/page.md +0 -0
- /package/dist/{ai → skills/schmancy}/progress.md +0 -0
- /package/dist/{ai → skills/schmancy}/qr-scanner.md +0 -0
- /package/dist/{ai → skills/schmancy}/radio-group.md +0 -0
- /package/dist/{ai → skills/schmancy}/range.md +0 -0
- /package/dist/{ai → skills/schmancy}/rxjs-utils.md +0 -0
- /package/{ai → dist/skills/schmancy}/select.md +0 -0
- /package/{ai → dist/skills/schmancy}/sheet.md +0 -0
- /package/{ai → dist/skills/schmancy}/slider.md +0 -0
- /package/{ai → dist/skills/schmancy}/steps.md +0 -0
- /package/{ai → dist/skills/schmancy}/surface.md +0 -0
- /package/{ai → dist/skills/schmancy}/table.md +0 -0
- /package/{ai → dist/skills/schmancy}/tabs.md +0 -0
- /package/{ai → dist/skills/schmancy}/teleport.md +0 -0
- /package/{ai → dist/skills/schmancy}/textarea.md +0 -0
- /package/{ai → dist/skills/schmancy}/theme-button.md +0 -0
- /package/{ai → dist/skills/schmancy}/theme.md +0 -0
- /package/{ai → dist/skills/schmancy}/tooltip.md +0 -0
- /package/{ai → dist/skills/schmancy}/tree.md +0 -0
- /package/{ai → dist/skills/schmancy}/typewriter.md +0 -0
- /package/{ai → dist/skills/schmancy}/typography.md +0 -0
- /package/{ai → dist/skills/schmancy}/utils.md +0 -0
- /package/{ai → dist/skills/schmancy}/window.md +0 -0
- /package/dist/{ai → skills}/select.md +0 -0
- /package/dist/{ai → skills}/sheet.md +0 -0
- /package/dist/{ai → skills}/slider.md +0 -0
- /package/dist/{ai → skills}/steps.md +0 -0
- /package/dist/{ai → skills}/surface.md +0 -0
- /package/dist/{ai → skills}/table.md +0 -0
- /package/dist/{ai → skills}/tabs.md +0 -0
- /package/dist/{ai → skills}/teleport.md +0 -0
- /package/dist/{ai → skills}/textarea.md +0 -0
- /package/dist/{ai → skills}/theme-button.md +0 -0
- /package/dist/{ai → skills}/theme.md +0 -0
- /package/dist/{ai → skills}/tooltip.md +0 -0
- /package/dist/{ai → skills}/tree.md +0 -0
- /package/dist/{ai → skills}/typewriter.md +0 -0
- /package/dist/{ai → skills}/typography.md +0 -0
- /package/dist/{ai → skills}/utils.md +0 -0
- /package/dist/{ai → skills}/window.md +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# schmancy-steps-container / schmancy-step
|
|
2
|
+
|
|
3
|
+
> Vertical stepper with collapsible steps, completion state, and navigation.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-steps-container currentStep="1" @change=${(e) => handleStep(e.detail.value)}>
|
|
8
|
+
<schmancy-step position="1" title="Account" description="Create your account">
|
|
9
|
+
<schmancy-input label="Email" required></schmancy-input>
|
|
10
|
+
</schmancy-step>
|
|
11
|
+
<schmancy-step position="2" title="Profile" description="Set up profile">
|
|
12
|
+
<schmancy-input label="Name" required></schmancy-input>
|
|
13
|
+
</schmancy-step>
|
|
14
|
+
</schmancy-steps-container>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Properties (schmancy-steps-container)
|
|
18
|
+
| Property | Type | Default | Description |
|
|
19
|
+
|----------|------|---------|-------------|
|
|
20
|
+
| currentStep | number | `1` | Currently active step (1-based) |
|
|
21
|
+
| gap | number | `4` | Gap between steps (Tailwind scale) |
|
|
22
|
+
|
|
23
|
+
## Properties (schmancy-step)
|
|
24
|
+
| Property | Type | Default | Description |
|
|
25
|
+
|----------|------|---------|-------------|
|
|
26
|
+
| position | number | `1` | Step position (1-based) |
|
|
27
|
+
| title | string | `''` | Step title |
|
|
28
|
+
| description | string | `''` | Step description |
|
|
29
|
+
| completed | boolean | `false` | Explicitly mark as complete |
|
|
30
|
+
| lockBack | boolean | `false` | Prevent navigating to previous steps |
|
|
31
|
+
|
|
32
|
+
## Events (schmancy-steps-container)
|
|
33
|
+
| Event | Detail | Description |
|
|
34
|
+
|-------|--------|-------------|
|
|
35
|
+
| change | `{ value: number }` | When current step changes |
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
```html
|
|
39
|
+
<!-- With locked steps -->
|
|
40
|
+
<schmancy-steps-container currentStep="2">
|
|
41
|
+
<schmancy-step position="1" title="Step 1" completed lockBack>
|
|
42
|
+
<!-- Already completed, cannot go back -->
|
|
43
|
+
</schmancy-step>
|
|
44
|
+
<schmancy-step position="2" title="Step 2">
|
|
45
|
+
<p>Current step content</p>
|
|
46
|
+
</schmancy-step>
|
|
47
|
+
<schmancy-step position="3" title="Step 3">
|
|
48
|
+
<!-- Not yet reachable -->
|
|
49
|
+
</schmancy-step>
|
|
50
|
+
</schmancy-steps-container>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Only the active step renders its slotted content. Completed steps show a checkmark. Active step expands with `flex: 1`.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Store — Context System
|
|
2
|
+
|
|
3
|
+
Reactive state management: `createContext`, `@select`, `@selectItem`.
|
|
4
|
+
|
|
5
|
+
## Creating a context
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { createContext } from '@mhmo91/schmancy'
|
|
9
|
+
|
|
10
|
+
// Object
|
|
11
|
+
const userContext = createContext<User>(new User(), 'local', 'user')
|
|
12
|
+
|
|
13
|
+
// Map (collection)
|
|
14
|
+
const itemsContext = createContext<Map<string, Item>>(new Map(), 'indexeddb', 'items')
|
|
15
|
+
|
|
16
|
+
// Array
|
|
17
|
+
const tagsContext = createContext<string[]>([], 'memory', 'tags')
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Signature: `createContext(initial, storage, key)`.
|
|
21
|
+
|
|
22
|
+
## Storage backends
|
|
23
|
+
|
|
24
|
+
| Mode | Backing | Survives refresh | Survives tab close | Capacity |
|
|
25
|
+
|------|---------|------------------|--------------------|----------|
|
|
26
|
+
| `'memory'` | JS heap | ❌ | ❌ | RAM |
|
|
27
|
+
| `'session'` | `sessionStorage` | ✅ | ❌ (per-tab) | ~5 MB |
|
|
28
|
+
| `'local'` | `localStorage` | ✅ | ✅ | ~5 MB |
|
|
29
|
+
| `'indexeddb'` | IndexedDB | ✅ | ✅ | GB |
|
|
30
|
+
|
|
31
|
+
Pick by data size and lifetime:
|
|
32
|
+
- User prefs, long-lived drafts → `'local'`
|
|
33
|
+
- Per-tab ephemeral (cart, wizard) → `'session'`
|
|
34
|
+
- Fetched from API, regenerable → `'memory'`
|
|
35
|
+
- Collections with >100 entries you want cached → `'indexeddb'`
|
|
36
|
+
|
|
37
|
+
## Reading with `@select`
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import { select } from '@mhmo91/schmancy'
|
|
41
|
+
|
|
42
|
+
@customElement('my-component')
|
|
43
|
+
class MyComponent extends $LitElement() {
|
|
44
|
+
@select(userContext) user!: User
|
|
45
|
+
|
|
46
|
+
// Selector narrows the dependency
|
|
47
|
+
@select(itemsContext, m => m.size) count!: number
|
|
48
|
+
|
|
49
|
+
@select(itemsContext) items!: Map<string, Item>
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`@select` options:
|
|
54
|
+
- `required` (default `true`) — wait for `.ready` before `connectedCallback` completes.
|
|
55
|
+
- `updateOnly` — call `requestUpdate` without assigning.
|
|
56
|
+
- `deepClone` — `structuredClone` the value.
|
|
57
|
+
- `debug` — log every emission.
|
|
58
|
+
|
|
59
|
+
## `@selectItem`
|
|
60
|
+
|
|
61
|
+
Pick one entry from a collection context, keyed off a component property:
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
@selectItem(itemsContext, component => component.itemId)
|
|
65
|
+
item!: Item | undefined
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Writing
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// Object
|
|
72
|
+
userContext.set({ name: 'Alice' })
|
|
73
|
+
userContext.set({ ...userContext.value, name: 'Bob' })
|
|
74
|
+
|
|
75
|
+
// Map
|
|
76
|
+
itemsContext.set('id-1', item)
|
|
77
|
+
itemsContext.delete('id-1')
|
|
78
|
+
itemsContext.replace(newMap)
|
|
79
|
+
|
|
80
|
+
// Array
|
|
81
|
+
tagsContext.push('new')
|
|
82
|
+
tagsContext.replace(['a', 'b'])
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Observable API
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
userContext.$.pipe(
|
|
89
|
+
filter(() => userContext.ready),
|
|
90
|
+
takeUntil(this.disconnecting),
|
|
91
|
+
).subscribe(user => { /* ... */ })
|
|
92
|
+
|
|
93
|
+
userContext.value // synchronous snapshot
|
|
94
|
+
userContext.ready // true once the backing store has loaded
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Gate subscriptions on `.ready` — `'local'` / `'session'` / `'indexeddb'` contexts emit their default value before the real stored value hydrates.
|
|
98
|
+
|
|
99
|
+
## Dynamic contexts
|
|
100
|
+
|
|
101
|
+
For per-instance state with persistence, create the context inside `connectedCallback` with an instance-scoped key:
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
private draftCtx: IStore<{ text: string }> | null = null
|
|
105
|
+
|
|
106
|
+
connectedCallback() {
|
|
107
|
+
super.connectedCallback()
|
|
108
|
+
if (this.draftKey) {
|
|
109
|
+
this.draftCtx = createContext<{ text: string }>(
|
|
110
|
+
{ text: '' },
|
|
111
|
+
'session',
|
|
112
|
+
this.draftKey,
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Rules
|
|
119
|
+
|
|
120
|
+
- Declare contexts at module scope (except dynamic per-instance ones).
|
|
121
|
+
- Name the storage key even for `'memory'` contexts — it helps debugging.
|
|
122
|
+
- Keep each context single-purpose. One write shouldn't invalidate unrelated readers.
|
|
123
|
+
- Only the owning component writes. Others read via `@select`.
|
|
124
|
+
- Every subscription uses `takeUntil(this.disconnecting)`.
|
|
125
|
+
- Gate on `.ready` before async cascading work.
|
|
126
|
+
- Don't store Promises, Observables, functions, or class instances in persistent contexts.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Surface
|
|
2
|
+
|
|
3
|
+
> Glass depth container. Every surface is translucent — depth comes from blur intensity.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<schmancy-surface type="subtle" rounded="all" fill="all">
|
|
9
|
+
Content on frosted glass
|
|
10
|
+
</schmancy-surface>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Properties
|
|
14
|
+
|
|
15
|
+
| Property | Type | Default | Description |
|
|
16
|
+
|----------|------|---------|-------------|
|
|
17
|
+
| `type` | string | `'subtle'` | Glass depth level (see below) |
|
|
18
|
+
| `fill` | string | `'auto'` | `'all'`, `'width'`, `'height'`, `'auto'` |
|
|
19
|
+
| `rounded` | string | `'none'` | `'none'`, `'top'`, `'bottom'`, `'left'`, `'right'`, `'all'` |
|
|
20
|
+
| `elevation` | number | `0` | Glow intensity 0-5 (primary-colored glow, not shadow) |
|
|
21
|
+
| `clickable` | boolean | `false` | Adds luminous hover + spring press |
|
|
22
|
+
|
|
23
|
+
## Surface Types
|
|
24
|
+
|
|
25
|
+
### Structural (glass depth model)
|
|
26
|
+
|
|
27
|
+
| Type | Opacity | Blur | Use for |
|
|
28
|
+
|------|---------|------|---------|
|
|
29
|
+
| `solid` | 92% | — | Dense glass ground layer, highest readability |
|
|
30
|
+
| `subtle` | 78% | 8px | Frosted panels, default containers |
|
|
31
|
+
| `glass` | 55% | 16px | Dialogs, dropdowns, overlays |
|
|
32
|
+
| `luminous` | 42% | 20px | Hero panels, featured content |
|
|
33
|
+
|
|
34
|
+
### Semantic (tinted glass)
|
|
35
|
+
`primary`, `secondary`, `tertiary`, `error`, `success`, `warning`, `info`
|
|
36
|
+
Each applies a translucent tint of its color + 4px blur.
|
|
37
|
+
|
|
38
|
+
### Utility
|
|
39
|
+
- `transparent` — no background
|
|
40
|
+
- `outlined` — border only
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
```html
|
|
45
|
+
<!-- Page background -->
|
|
46
|
+
<schmancy-surface type="solid" fill="all" rounded="none">
|
|
47
|
+
<slot></slot>
|
|
48
|
+
</schmancy-surface>
|
|
49
|
+
|
|
50
|
+
<!-- Card-like container -->
|
|
51
|
+
<schmancy-surface type="subtle" rounded="all" elevation="1">
|
|
52
|
+
<div class="p-4">Frosted panel with glow</div>
|
|
53
|
+
</schmancy-surface>
|
|
54
|
+
|
|
55
|
+
<!-- Dialog surface (used internally by schmancy-dialog) -->
|
|
56
|
+
<schmancy-surface type="glass" rounded="all">
|
|
57
|
+
<div class="p-6">Glass overlay content</div>
|
|
58
|
+
</schmancy-surface>
|
|
59
|
+
|
|
60
|
+
<!-- Hero panel with glow halo -->
|
|
61
|
+
<schmancy-surface type="luminous" rounded="all" elevation="3">
|
|
62
|
+
<div class="p-8">Featured content</div>
|
|
63
|
+
</schmancy-surface>
|
|
64
|
+
|
|
65
|
+
<!-- Clickable surface with spring physics -->
|
|
66
|
+
<schmancy-surface type="subtle" rounded="all" clickable @click=${handler}>
|
|
67
|
+
Hover: lift + glow. Press: spring compress.
|
|
68
|
+
</schmancy-surface>
|
|
69
|
+
|
|
70
|
+
<!-- Error state -->
|
|
71
|
+
<schmancy-surface type="error" rounded="all">
|
|
72
|
+
<div class="p-3">Something went wrong</div>
|
|
73
|
+
</schmancy-surface>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Elevation (Glow-based)
|
|
77
|
+
|
|
78
|
+
Elevation 1-5 applies a primary-colored glow underneath the surface:
|
|
79
|
+
```
|
|
80
|
+
Level 1: subtle glow (15% primary)
|
|
81
|
+
Level 5: strong glow (42% primary)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Paint Containment
|
|
85
|
+
|
|
86
|
+
`glass` and `luminous` types automatically apply `contain: content` for GPU optimization.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# schmancy-table
|
|
2
|
+
|
|
3
|
+
> Virtualized data table with sorting, custom column rendering, and sticky headers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```typescript
|
|
7
|
+
html`
|
|
8
|
+
<schmancy-table
|
|
9
|
+
.columns=${columns}
|
|
10
|
+
.data=${items}
|
|
11
|
+
keyField="id"
|
|
12
|
+
cols="1fr 2fr 1fr"
|
|
13
|
+
sortable
|
|
14
|
+
@click=${(e) => selectRow(e.detail)}>
|
|
15
|
+
</schmancy-table>
|
|
16
|
+
`
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Properties
|
|
20
|
+
| Property | Type | Default | Description |
|
|
21
|
+
|----------|------|---------|-------------|
|
|
22
|
+
| columns | `TableColumn[]` | `[]` | Column definitions |
|
|
23
|
+
| data | `T[]` | `[]` | Data array |
|
|
24
|
+
| keyField | string | `'id'` | Unique key property on each item |
|
|
25
|
+
| cols | string | `'1fr'` | CSS grid-template-columns |
|
|
26
|
+
| sortable | boolean | `false` | Enable column sorting |
|
|
27
|
+
|
|
28
|
+
## TableColumn Interface
|
|
29
|
+
```typescript
|
|
30
|
+
interface TableColumn<T> {
|
|
31
|
+
name: string // Column header text
|
|
32
|
+
key?: keyof T // Data property key
|
|
33
|
+
align?: 'left' | 'right' | 'center'
|
|
34
|
+
weight?: 'normal' | 'bold'
|
|
35
|
+
render?: (item: T) => TemplateResult | string | number
|
|
36
|
+
sortable?: boolean // Per-column sort toggle
|
|
37
|
+
value?: (item: T) => any // Custom sort value function
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Events
|
|
42
|
+
| Event | Detail | Description |
|
|
43
|
+
|-------|--------|-------------|
|
|
44
|
+
| click | `{ item: T, index: number }` | Row clicked |
|
|
45
|
+
| sort-change | `{ column, direction }` | Sort state changed |
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
```typescript
|
|
49
|
+
const columns = [
|
|
50
|
+
{ name: 'Name', key: 'name', sortable: true },
|
|
51
|
+
{ name: 'Status', key: 'status', render: (item) =>
|
|
52
|
+
html`<schmancy-badge color=${item.active ? 'success' : 'neutral'}>
|
|
53
|
+
${item.active ? 'Active' : 'Inactive'}
|
|
54
|
+
</schmancy-badge>` },
|
|
55
|
+
{ name: 'Created', key: 'createdAt', sortable: true,
|
|
56
|
+
value: (item) => new Date(item.createdAt).getTime() },
|
|
57
|
+
]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Uses `lit-virtualizer` for efficient rendering of large datasets. Header is sticky with glass surface.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# schmancy-tab-group / schmancy-tab
|
|
2
|
+
|
|
3
|
+
> Tab container with tab navigation and scroll-spy mode.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-tab-group activeTab="overview">
|
|
8
|
+
<schmancy-tab label="Overview" value="overview">
|
|
9
|
+
<p>Overview content</p>
|
|
10
|
+
</schmancy-tab>
|
|
11
|
+
<schmancy-tab label="Details" value="details">
|
|
12
|
+
<p>Details content</p>
|
|
13
|
+
</schmancy-tab>
|
|
14
|
+
</schmancy-tab-group>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Properties (schmancy-tab-group)
|
|
18
|
+
| Property | Type | Default | Description |
|
|
19
|
+
|----------|------|---------|-------------|
|
|
20
|
+
| activeTab | string | first tab | Currently active tab value |
|
|
21
|
+
| mode | `'tabs'\|'scroll'` | `'tabs'` | Display mode (tabs or scroll-spy) |
|
|
22
|
+
| rounded | boolean | `true` | Rounded tab bar |
|
|
23
|
+
|
|
24
|
+
## Properties (schmancy-tab)
|
|
25
|
+
| Property | Type | Default | Description |
|
|
26
|
+
|----------|------|---------|-------------|
|
|
27
|
+
| label | string | - | Tab label text |
|
|
28
|
+
| value | string | - | Unique tab identifier |
|
|
29
|
+
| active | boolean | `false` | Whether this tab is active |
|
|
30
|
+
|
|
31
|
+
## Events (schmancy-tab-group)
|
|
32
|
+
| Event | Detail | Description |
|
|
33
|
+
|-------|--------|-------------|
|
|
34
|
+
| tab-changed | string | Active tab value when changed |
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
```html
|
|
38
|
+
<!-- Scroll-spy mode (tabs follow scroll position) -->
|
|
39
|
+
<schmancy-tab-group mode="scroll">
|
|
40
|
+
<schmancy-tab label="Section 1" value="s1">
|
|
41
|
+
<div style="height: 500px">Long content</div>
|
|
42
|
+
</schmancy-tab>
|
|
43
|
+
<schmancy-tab label="Section 2" value="s2">
|
|
44
|
+
<div style="height: 500px">More content</div>
|
|
45
|
+
</schmancy-tab>
|
|
46
|
+
</schmancy-tab-group>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
In `tabs` mode, only the active tab renders content. In `scroll` mode, all tabs render and the nav highlights the visible section.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# schmancy-teleport
|
|
2
|
+
|
|
3
|
+
> Move DOM between locations with a FLIP-animated transition. Two instances sharing an `id` handshake via broadcast events — when one mounts, it finds the other and flies the content between them.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<!-- Start position -->
|
|
8
|
+
<schmancy-teleport id="hero-image">
|
|
9
|
+
<img src="portrait.jpg" alt="" />
|
|
10
|
+
</schmancy-teleport>
|
|
11
|
+
|
|
12
|
+
<!-- Later, in a different view -->
|
|
13
|
+
<schmancy-teleport id="hero-image"></schmancy-teleport>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
When the second instance mounts, the image smoothly animates from its old bounding rect to the new one.
|
|
17
|
+
|
|
18
|
+
## Properties
|
|
19
|
+
| Property | Type | Default | Description |
|
|
20
|
+
|----------|------|---------|-------------|
|
|
21
|
+
| `id` | string | **required** | Shared identifier between source and target |
|
|
22
|
+
| `uuid` | number | auto | Instance UUID for disambiguation (read-only) |
|
|
23
|
+
| `delay` | number | `0` | Delay before teleporting (ms) |
|
|
24
|
+
|
|
25
|
+
## Discovery Events
|
|
26
|
+
The service broadcasts on `window`:
|
|
27
|
+
- `FINDING_MORTIES` — "is anyone mounted with id X?"
|
|
28
|
+
- `HERE_RICKY` — instances reply with self reference
|
|
29
|
+
- `WhereAreYouRicky` / `HereMorty` — instance-to-instance handshake
|
|
30
|
+
|
|
31
|
+
Uses RxJS with a race/throwIfEmpty pattern to handle missing counterparts gracefully.
|
|
32
|
+
|
|
33
|
+
## Typical Pattern — route transitions
|
|
34
|
+
```html
|
|
35
|
+
<!-- List view -->
|
|
36
|
+
${repeat(items, item => item.id, item => html`
|
|
37
|
+
<schmancy-teleport id=${`card-${item.id}`}>
|
|
38
|
+
<schmancy-card @click=${() => router.push(`/item/${item.id}`)}>
|
|
39
|
+
<img src=${item.thumbnail} />
|
|
40
|
+
</schmancy-card>
|
|
41
|
+
</schmancy-teleport>
|
|
42
|
+
`)}
|
|
43
|
+
|
|
44
|
+
<!-- Detail view -->
|
|
45
|
+
<schmancy-teleport id=${`card-${this.params.id}`}></schmancy-teleport>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Notes
|
|
49
|
+
- Uses `watchElementRect` (ResizeObserver + scroll tracking) to keep source/target in sync.
|
|
50
|
+
- Animation uses the FLIP technique: capture first rect, invert on mount, play to final.
|
|
51
|
+
- All subscriptions clean up via `takeUntil(this.disconnecting)`.
|
|
52
|
+
- Each teleport pair must share a unique `id` string.
|
|
53
|
+
|
|
54
|
+
## See Also
|
|
55
|
+
- For programmatic teleportation from JS: import `teleportationService` from `@mhmo91/schmancy/teleport`.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# schmancy-textarea
|
|
2
|
+
|
|
3
|
+
> Multi-line text input with auto-resize and form integration.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-textarea label="Description" placeholder="Enter details..."></schmancy-textarea>
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Properties
|
|
11
|
+
| Property | Type | Default | Description |
|
|
12
|
+
|----------|------|---------|-------------|
|
|
13
|
+
| value | string | `''` | Current text value |
|
|
14
|
+
| label | string | `''` | Label text above the textarea |
|
|
15
|
+
| placeholder | string | `''` | Placeholder text |
|
|
16
|
+
| name | string | auto | Form submission name |
|
|
17
|
+
| required | boolean | `false` | Whether the field is required |
|
|
18
|
+
| disabled | boolean | `false` | Whether the field is disabled |
|
|
19
|
+
| readonly | boolean | `false` | Whether the field is read-only |
|
|
20
|
+
| error | boolean | `false` | Whether the field shows an error state |
|
|
21
|
+
| hint | string | `undefined` | Hint text below the field |
|
|
22
|
+
| rows | number | `undefined` | Fixed visible rows (omit for auto-size) |
|
|
23
|
+
| cols | number | `20` | Column width |
|
|
24
|
+
| maxlength | number | `undefined` | Maximum character length |
|
|
25
|
+
| minlength | number | `undefined` | Minimum character length |
|
|
26
|
+
| autoHeight | boolean | `true` | Auto-grow height with content |
|
|
27
|
+
| fillHeight | boolean | `false` | Fill container height |
|
|
28
|
+
| resize | `'none'\|'vertical'\|'horizontal'\|'both'` | `'vertical'` | Resize handle |
|
|
29
|
+
| align | `'left'\|'center'\|'right'` | `'left'` | Text alignment |
|
|
30
|
+
| wrap | `'hard'\|'soft'` | `'soft'` | Text wrapping mode |
|
|
31
|
+
|
|
32
|
+
## Events
|
|
33
|
+
| Event | Detail | Description |
|
|
34
|
+
|-------|--------|-------------|
|
|
35
|
+
| change | `{ value: string }` | On input or native change |
|
|
36
|
+
| enter | `{ value: string }` | When Enter key is pressed |
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
```html
|
|
40
|
+
<!-- Auto-sizing textarea -->
|
|
41
|
+
<schmancy-textarea label="Notes" autoHeight></schmancy-textarea>
|
|
42
|
+
|
|
43
|
+
<!-- Fixed height, no resize -->
|
|
44
|
+
<schmancy-textarea rows="5" resize="none" placeholder="Comments..."></schmancy-textarea>
|
|
45
|
+
|
|
46
|
+
<!-- Fill container -->
|
|
47
|
+
<schmancy-textarea fillHeight label="Content"></schmancy-textarea>
|
|
48
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# schmancy-theme-button
|
|
2
|
+
|
|
3
|
+
> Minimal palette-icon button that spins 360° on click. Hook its `click` to toggle/regenerate your theme.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-theme-button @click=${() => this.toggleTheme()}></schmancy-theme-button>
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Behavior
|
|
11
|
+
- Renders a `schmancy-button` (variant `text`) wrapping a palette `schmancy-icon`.
|
|
12
|
+
- On click: Web Animations API rotates the icon 360° over 300ms.
|
|
13
|
+
- No properties — it's a UI affordance; wire the theme logic via `@click`.
|
|
14
|
+
|
|
15
|
+
## Typical Wiring
|
|
16
|
+
```typescript
|
|
17
|
+
import { theme } from '@mhmo91/schmancy'
|
|
18
|
+
|
|
19
|
+
// Toggle dark/light
|
|
20
|
+
<schmancy-theme-button @click=${() => theme.toggleScheme()}></schmancy-theme-button>
|
|
21
|
+
|
|
22
|
+
// Randomize primary color
|
|
23
|
+
<schmancy-theme-button @click=${() => theme.randomize()}></schmancy-theme-button>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
See [theme.md](./theme.md) for the full theme service API.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# schmancy-theme
|
|
2
|
+
|
|
3
|
+
> Root theme provider that generates color tokens from a source color and distributes them as CSS custom properties.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-theme color="#6200ee" scheme="auto" root>
|
|
8
|
+
<your-app></your-app>
|
|
9
|
+
</schmancy-theme>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Properties
|
|
13
|
+
| Property | Type | Default | Description |
|
|
14
|
+
|----------|------|---------|-------------|
|
|
15
|
+
| `color` | `string` | Random hex | Primary source color in hex format (e.g. `#6200ee`) |
|
|
16
|
+
| `scheme` | `'dark' \| 'light' \| 'auto'` | `'auto'` | Color scheme. `auto` follows system preference |
|
|
17
|
+
| `root` | `boolean` | `false` | Apply CSS variables to `document.body` instead of shadow host |
|
|
18
|
+
| `locale` | `string` | `navigator.language` | Locale for number/date formatting (e.g. `de-DE`, `ar-SA`) |
|
|
19
|
+
| `name` | `string` | Auto-generated | Unique name for session storage persistence |
|
|
20
|
+
|
|
21
|
+
## Theme Service (`theme`)
|
|
22
|
+
```typescript
|
|
23
|
+
import { theme } from '@mhmo91/schmancy'
|
|
24
|
+
|
|
25
|
+
theme.scheme // 'dark' | 'light' | 'auto' (sync)
|
|
26
|
+
theme.color // Current hex color (sync)
|
|
27
|
+
theme.scheme$ // Observable<string>
|
|
28
|
+
theme.resolvedScheme$ // Observable<'dark'|'light'> (resolves 'auto')
|
|
29
|
+
|
|
30
|
+
theme.setScheme('dark')
|
|
31
|
+
theme.setColor('#2196f3')
|
|
32
|
+
theme.toggleScheme()
|
|
33
|
+
theme.isDarkMode() // Observable<boolean>
|
|
34
|
+
theme.setFullscreen(true)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
```html
|
|
39
|
+
<!-- App root with dark blue theme -->
|
|
40
|
+
<schmancy-theme color="#1565c0" scheme="dark" root>
|
|
41
|
+
<my-app></my-app>
|
|
42
|
+
</schmancy-theme>
|
|
43
|
+
|
|
44
|
+
<!-- Nested theme override for a section -->
|
|
45
|
+
<schmancy-theme color="#e91e63" scheme="light">
|
|
46
|
+
<div class="accent-section">...</div>
|
|
47
|
+
</schmancy-theme>
|
|
48
|
+
|
|
49
|
+
<!-- Arabic locale -->
|
|
50
|
+
<schmancy-theme color="#4caf50" locale="ar-SA" root>
|
|
51
|
+
<my-app></my-app>
|
|
52
|
+
</schmancy-theme>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Notes
|
|
56
|
+
- Color and scheme persist to `sessionStorage` per instance
|
|
57
|
+
- Generates success/warning/info/error semantic color tokens automatically
|
|
58
|
+
- Wraps content in a `schmancy-container` with `containerLowest` surface
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# tooltip (directive)
|
|
2
|
+
|
|
3
|
+
> Lit directive that adds a positioned tooltip to any element on hover/focus.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```typescript
|
|
7
|
+
import { tooltip } from '@mhmo91/schmancy'
|
|
8
|
+
|
|
9
|
+
html`<button ${tooltip('Click to save')}>Save</button>`
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Parameters
|
|
13
|
+
| Parameter | Type | Default | Description |
|
|
14
|
+
|-----------|------|---------|-------------|
|
|
15
|
+
| text | string | required | Tooltip text content |
|
|
16
|
+
| options.position | `'top'\|'right'\|'bottom'\|'left'` | `'top'` | Tooltip placement |
|
|
17
|
+
| options.delay | number | `300` | Show delay in ms |
|
|
18
|
+
| options.showArrow | boolean | `true` | Show arrow indicator |
|
|
19
|
+
|
|
20
|
+
## Examples
|
|
21
|
+
```html
|
|
22
|
+
<!-- Bottom positioned -->
|
|
23
|
+
<schmancy-icon-button ${tooltip('Delete item', { position: 'bottom' })}>
|
|
24
|
+
delete
|
|
25
|
+
</schmancy-icon-button>
|
|
26
|
+
|
|
27
|
+
<!-- No delay, no arrow -->
|
|
28
|
+
<span ${tooltip('Status: Active', { delay: 0, showArrow: false })}>
|
|
29
|
+
Active
|
|
30
|
+
</span>
|
|
31
|
+
|
|
32
|
+
<!-- Right positioned -->
|
|
33
|
+
<div ${tooltip('More info here', { position: 'right' })}>
|
|
34
|
+
Hover me
|
|
35
|
+
</div>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Uses Floating UI for smart positioning with automatic flipping when near viewport edges. Accessible via `aria-describedby`. Closes on Escape key.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# schmancy-tree
|
|
2
|
+
|
|
3
|
+
> Collapsible tree node with animated expand/collapse and chevron rotation.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-tree>
|
|
8
|
+
<span slot="root">Parent Item</span>
|
|
9
|
+
<div>Child content here</div>
|
|
10
|
+
</schmancy-tree>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Properties
|
|
14
|
+
| Property | Type | Default | Description |
|
|
15
|
+
|----------|------|---------|-------------|
|
|
16
|
+
| open | boolean | `false` | Whether children are visible |
|
|
17
|
+
|
|
18
|
+
## Slots
|
|
19
|
+
| Slot | Description |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| root | The clickable root element (toggles open/close) |
|
|
22
|
+
| default | Child content (shown when open) |
|
|
23
|
+
|
|
24
|
+
## Events
|
|
25
|
+
| Event | Detail | Description |
|
|
26
|
+
|-------|--------|-------------|
|
|
27
|
+
| toggle | - | When the tree node is toggled |
|
|
28
|
+
|
|
29
|
+
## Examples
|
|
30
|
+
```html
|
|
31
|
+
<!-- Nested trees -->
|
|
32
|
+
<schmancy-tree>
|
|
33
|
+
<span slot="root">Documents</span>
|
|
34
|
+
<schmancy-tree>
|
|
35
|
+
<span slot="root">Reports</span>
|
|
36
|
+
<div>Q1 Report</div>
|
|
37
|
+
<div>Q2 Report</div>
|
|
38
|
+
</schmancy-tree>
|
|
39
|
+
<schmancy-tree>
|
|
40
|
+
<span slot="root">Invoices</span>
|
|
41
|
+
<div>Invoice #001</div>
|
|
42
|
+
</schmancy-tree>
|
|
43
|
+
</schmancy-tree>
|
|
44
|
+
|
|
45
|
+
<!-- Initially open -->
|
|
46
|
+
<schmancy-tree open>
|
|
47
|
+
<span slot="root">Settings</span>
|
|
48
|
+
<div>General</div>
|
|
49
|
+
<div>Security</div>
|
|
50
|
+
</schmancy-tree>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Clicking the root slot or the chevron button toggles visibility. Animations use the Web Animations API with 150ms duration.
|