@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,298 @@
|
|
|
1
|
+
# Schmancy Directives — AI Reference
|
|
2
|
+
|
|
3
|
+
## What Are Directives?
|
|
4
|
+
|
|
5
|
+
Lit directives that snap onto any element to add behavior. No components to wrap, no CSS to write — just `${directiveName()}` in your template.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { magnetic, cursorGlow, gravity, reveal } from '@mhmo91/schmancy/directives'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Physics & Interaction (6 directives)
|
|
14
|
+
|
|
15
|
+
### `magnetic` — Elements lean toward the cursor
|
|
16
|
+
```html
|
|
17
|
+
<schmancy-button ${magnetic()}>Submit</schmancy-button>
|
|
18
|
+
<schmancy-icon-button ${magnetic({ strength: 6, radius: 120 })}>add</schmancy-icon-button>
|
|
19
|
+
```
|
|
20
|
+
| Option | Default | Description |
|
|
21
|
+
|--------|---------|-------------|
|
|
22
|
+
| `strength` | 4 | Max displacement in px |
|
|
23
|
+
| `radius` | 100 | Activation radius in px |
|
|
24
|
+
|
|
25
|
+
Embedded in: `schmancy-button`, `schmancy-icon-button`, `schmancy-filter-chip`, `schmancy-details` (summary)
|
|
26
|
+
|
|
27
|
+
### `cursorGlow` — Light follows cursor across a surface
|
|
28
|
+
```html
|
|
29
|
+
<schmancy-surface type="glass" ${cursorGlow()}>content</schmancy-surface>
|
|
30
|
+
<div ${cursorGlow({ radius: 300, intensity: 0.2, color: 'var(--schmancy-sys-color-secondary-default)' })}>
|
|
31
|
+
hero panel
|
|
32
|
+
</div>
|
|
33
|
+
```
|
|
34
|
+
| Option | Default | Description |
|
|
35
|
+
|--------|---------|-------------|
|
|
36
|
+
| `radius` | 200 | Glow radius in px |
|
|
37
|
+
| `color` | primary | CSS color value |
|
|
38
|
+
| `intensity` | 0.12 | Opacity 0-1 |
|
|
39
|
+
|
|
40
|
+
Embedded in: `schmancy-card` (interactive), `schmancy-dialog`
|
|
41
|
+
|
|
42
|
+
### `livingBorder` — Animated gradient light traces element edges
|
|
43
|
+
```html
|
|
44
|
+
<schmancy-card ${livingBorder()}>content</schmancy-card>
|
|
45
|
+
<div ${livingBorder({ duration: 4000, onHover: true, color: 'var(--schmancy-sys-color-secondary-default)' })}>
|
|
46
|
+
hero panel
|
|
47
|
+
</div>
|
|
48
|
+
```
|
|
49
|
+
| Option | Default | Description |
|
|
50
|
+
|--------|---------|-------------|
|
|
51
|
+
| `duration` | 3000 | Rotation speed in ms |
|
|
52
|
+
| `width` | 1 | Border width in px |
|
|
53
|
+
| `color` | primary | Glow color |
|
|
54
|
+
| `spread` | 6 | Glow spread in px |
|
|
55
|
+
| `onHover` | false | Only animate on hover |
|
|
56
|
+
|
|
57
|
+
### `gravity` — Elements fall into place with mass-based bounce
|
|
58
|
+
```html
|
|
59
|
+
<!-- Single element drops in -->
|
|
60
|
+
<schmancy-card ${gravity()}>content</schmancy-card>
|
|
61
|
+
|
|
62
|
+
<!-- Staggered list — each item falls 50ms after the previous -->
|
|
63
|
+
${repeat(items, item => item.id, (item, i) => html`
|
|
64
|
+
<div ${gravity({ stagger: 50 * i, mass: 0.8 })}>...</div>
|
|
65
|
+
`)}
|
|
66
|
+
```
|
|
67
|
+
| Option | Default | Description |
|
|
68
|
+
|--------|---------|-------------|
|
|
69
|
+
| `mass` | 1.0 | 0.5 (bouncy) to 2.0 (heavy) |
|
|
70
|
+
| `distance` | 30 | Fall distance in px |
|
|
71
|
+
| `delay` | 0 | Delay before falling in ms |
|
|
72
|
+
| `stagger` | 0 | Per-item stagger in ms |
|
|
73
|
+
|
|
74
|
+
Only animates once. Re-triggers on reconnect (route change, cache toggle).
|
|
75
|
+
|
|
76
|
+
### `depthOfField` — Progressive blur on background content
|
|
77
|
+
```html
|
|
78
|
+
<main ${depthOfField({ active: this.dialogOpen, maxBlur: 8 })}>
|
|
79
|
+
page content that blurs when dialog opens
|
|
80
|
+
</main>
|
|
81
|
+
```
|
|
82
|
+
| Option | Default | Description |
|
|
83
|
+
|--------|---------|-------------|
|
|
84
|
+
| `active` | required | Boolean — blur when true |
|
|
85
|
+
| `maxBlur` | 8 | Max blur radius in px |
|
|
86
|
+
| `duration` | 400 | Transition duration in ms |
|
|
87
|
+
|
|
88
|
+
### `longPress` — Press-and-hold gesture detection
|
|
89
|
+
```html
|
|
90
|
+
<div ${longPress(() => this.showContextMenu())}>Hold me</div>
|
|
91
|
+
<div ${longPress(() => this.showMenu(), { duration: 800, movementThreshold: 15 })}>
|
|
92
|
+
Custom timing
|
|
93
|
+
</div>
|
|
94
|
+
```
|
|
95
|
+
| Option | Default | Description |
|
|
96
|
+
|--------|---------|-------------|
|
|
97
|
+
| `duration` | 500 | Time before trigger in ms |
|
|
98
|
+
| `movementThreshold` | 10 | Max movement in px before cancel |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Visual Effects (3 directives)
|
|
103
|
+
|
|
104
|
+
### `nebula` — Surreal dimensional rift loading effect
|
|
105
|
+
```html
|
|
106
|
+
<div ${nebula()}>Content with cosmic loading effect</div>
|
|
107
|
+
<div ${nebula({ active: this.loading, temperature: -0.5, speed: 1.5 })}>
|
|
108
|
+
Cool-toned, faster nebula
|
|
109
|
+
</div>
|
|
110
|
+
```
|
|
111
|
+
| Option | Default | Description |
|
|
112
|
+
|--------|---------|-------------|
|
|
113
|
+
| `active` | true | Show/hide the effect |
|
|
114
|
+
| `intensity` | 1 | Brightness 0-1 |
|
|
115
|
+
| `speed` | 1 | Animation speed multiplier |
|
|
116
|
+
| `temperature` | 0 | -1 (cool/blue) to 1 (warm/pink) |
|
|
117
|
+
| `particleCount` | 30 | Quantum particle count |
|
|
118
|
+
| `autoHideDuration` | 3000 | Auto-dim after ms (0 = never) |
|
|
119
|
+
| `background` | true | Render behind content |
|
|
120
|
+
|
|
121
|
+
### `liquid` — Apple Liquid Glass effect (pure CSS)
|
|
122
|
+
```html
|
|
123
|
+
<div ${liquid()}>Glass panel</div>
|
|
124
|
+
<div ${liquid({ intensity: 'strong', active: this.isActive })}>
|
|
125
|
+
Thick glass
|
|
126
|
+
</div>
|
|
127
|
+
```
|
|
128
|
+
| Option | Default | Description |
|
|
129
|
+
|--------|---------|-------------|
|
|
130
|
+
| `active` | true | Toggle effect on/off |
|
|
131
|
+
| `intensity` | 'medium' | 'light', 'medium', or 'strong' |
|
|
132
|
+
|
|
133
|
+
Zero DOM mutation — applies only inline styles.
|
|
134
|
+
|
|
135
|
+
### `ripple` — Material-style ink ripple on click
|
|
136
|
+
```html
|
|
137
|
+
<div ${ripple()}>Click me</div>
|
|
138
|
+
```
|
|
139
|
+
No options. Ripple appears at click position, fades out in 600ms.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Text Animation (3 directives)
|
|
144
|
+
|
|
145
|
+
### `animateText` — 5 text animation modes
|
|
146
|
+
```html
|
|
147
|
+
<span ${animateText({ animation: 'blur-reveal', stagger: 60 })}>Hello world</span>
|
|
148
|
+
<span ${animateText({ animation: 'cyber-glitch', preset: 'snappy' })}>GLITCH</span>
|
|
149
|
+
<span ${animateText({ animation: 'fade-up' })}>Fade up</span>
|
|
150
|
+
```
|
|
151
|
+
| Animation | Description |
|
|
152
|
+
|-----------|-------------|
|
|
153
|
+
| `typewriter` | Characters appear one by one |
|
|
154
|
+
| `fade-up` | Whole element fades up |
|
|
155
|
+
| `word-reveal` | Words appear one by one from below |
|
|
156
|
+
| `blur-reveal` | Words deblur + scale in |
|
|
157
|
+
| `cyber-glitch` | Characters pop in with overshoot |
|
|
158
|
+
|
|
159
|
+
| Option | Default | Description |
|
|
160
|
+
|--------|---------|-------------|
|
|
161
|
+
| `animation` | required | Animation type |
|
|
162
|
+
| `preset` | 'snappy' | Spring preset: smooth, snappy, bouncy, gentle |
|
|
163
|
+
| `stagger` | 50 | Ms between characters/words |
|
|
164
|
+
| `text` | element content | Explicit text (for Lit bindings) |
|
|
165
|
+
| `restart` | false | Re-animate on viewport re-entry |
|
|
166
|
+
|
|
167
|
+
Waits for element visibility before starting.
|
|
168
|
+
|
|
169
|
+
### `cycleText` — Cycle through child elements with transitions
|
|
170
|
+
```html
|
|
171
|
+
<span ${cycleText({ transition: 'slide', hold: 1500 })}>
|
|
172
|
+
<span>First</span>
|
|
173
|
+
<span>Second</span>
|
|
174
|
+
<span>Third</span>
|
|
175
|
+
</span>
|
|
176
|
+
|
|
177
|
+
<!-- Add mode: accumulates items -->
|
|
178
|
+
<span ${cycleText({ mode: 'add', transition: 'typewriter' })}>
|
|
179
|
+
<span>guests</span>
|
|
180
|
+
<span>kitchen</span>
|
|
181
|
+
<span>team</span>
|
|
182
|
+
</span>
|
|
183
|
+
<!-- Shows: "guests" → "guests, kitchen" → "guests, kitchen, team" → clears → repeat -->
|
|
184
|
+
```
|
|
185
|
+
| Option | Default | Description |
|
|
186
|
+
|--------|---------|-------------|
|
|
187
|
+
| `transition` | 'fade' | 'fade', 'slide', or 'typewriter' |
|
|
188
|
+
| `hold` | 2000 | Display time per item in ms |
|
|
189
|
+
| `mode` | 'replace' | 'replace' or 'add' (accumulate) |
|
|
190
|
+
| `separator` | ', ' | Separator in add mode |
|
|
191
|
+
|
|
192
|
+
### `typewriter` — Phrase cycling with typing/deleting + sound
|
|
193
|
+
```html
|
|
194
|
+
<div ${typewriter(['Trustless', 'Permissionless', 'Transparent'])}>
|
|
195
|
+
<span class="typed"></span>
|
|
196
|
+
</div>
|
|
197
|
+
<div ${typewriter(['Fast', 'Typing'], { typeSpeed: 50, sound: true })}>
|
|
198
|
+
<span class="typed"></span>
|
|
199
|
+
</div>
|
|
200
|
+
```
|
|
201
|
+
| Option | Default | Description |
|
|
202
|
+
|--------|---------|-------------|
|
|
203
|
+
| `typeSpeed` | 50 | Ms per character typed |
|
|
204
|
+
| `deleteSpeed` | 30 | Ms per character deleted |
|
|
205
|
+
| `pauseDuration` | 1500 | Pause after typing in ms |
|
|
206
|
+
| `loop` | true | Loop through phrases |
|
|
207
|
+
| `sound` | true | Web Audio typing sounds |
|
|
208
|
+
| `cursor` | false | Show blinking cursor |
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Show/Hide (2 directives)
|
|
213
|
+
|
|
214
|
+
### `reveal` — Spring-physics show/hide with zero layout shift
|
|
215
|
+
```html
|
|
216
|
+
<div ${reveal(this.isVisible)}>Content</div>
|
|
217
|
+
<div ${reveal(this.isOpen, { preset: 'bouncy', maxHeight: '200px' })}>
|
|
218
|
+
Bouncy reveal
|
|
219
|
+
</div>
|
|
220
|
+
```
|
|
221
|
+
| Option | Default | Description |
|
|
222
|
+
|--------|---------|-------------|
|
|
223
|
+
| `preset` | 'smooth' | smooth, snappy, bouncy, gentle |
|
|
224
|
+
| `maxHeight` | '10rem' | Max height when revealed |
|
|
225
|
+
|
|
226
|
+
Element stays in DOM (no layout shift). Uses Blackbird spring physics.
|
|
227
|
+
|
|
228
|
+
### `intersect` — Simplified IntersectionObserver
|
|
229
|
+
```html
|
|
230
|
+
<!-- Fire once when visible (lazy load) -->
|
|
231
|
+
<img ${intersect(() => this.loadImage(), { once: true })} />
|
|
232
|
+
|
|
233
|
+
<!-- Enter/exit callbacks -->
|
|
234
|
+
<video ${intersect({ onEnter: () => this.play(), onExit: () => this.pause() })}>
|
|
235
|
+
```
|
|
236
|
+
| Option | Default | Description |
|
|
237
|
+
|--------|---------|-------------|
|
|
238
|
+
| `once` | false | Fire only once then disconnect |
|
|
239
|
+
| `threshold` | 0 | Visibility threshold |
|
|
240
|
+
| `rootMargin` | '0px' | Observer root margin |
|
|
241
|
+
| `delay` | 0 | Delay before callback in ms |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Interaction (3 directives)
|
|
246
|
+
|
|
247
|
+
### `drag` & `drop` — HTML5 drag and drop with FLIP animations
|
|
248
|
+
```html
|
|
249
|
+
${repeat(items, item => item.id, item => html`
|
|
250
|
+
<div ${drag(item.id)} ${drop(item.id)} @drop=${this.handleReorder}>
|
|
251
|
+
${item.name}
|
|
252
|
+
</div>
|
|
253
|
+
`)}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### `color` — Dynamic background/text color
|
|
257
|
+
```html
|
|
258
|
+
<div ${color({ bgColor: '#ff0000', color: 'white' })}>Colored</div>
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Reactive Utilities
|
|
264
|
+
|
|
265
|
+
### `reducedMotion$` — Reactive reduced-motion preference
|
|
266
|
+
```typescript
|
|
267
|
+
import { reducedMotion$ } from '@mhmo91/schmancy/directives'
|
|
268
|
+
|
|
269
|
+
if (reducedMotion$.value) return // skip animation
|
|
270
|
+
|
|
271
|
+
// Or subscribe reactively
|
|
272
|
+
reducedMotion$.subscribe(reduced => {
|
|
273
|
+
// User toggled reduced motion mid-session
|
|
274
|
+
})
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### `fromResizeObserver` — RxJS wrapper for ResizeObserver
|
|
278
|
+
```typescript
|
|
279
|
+
import { fromResizeObserver } from '@mhmo91/schmancy/directives'
|
|
280
|
+
|
|
281
|
+
fromResizeObserver(element).pipe(
|
|
282
|
+
takeUntil(this.disconnecting)
|
|
283
|
+
).subscribe(entries => {
|
|
284
|
+
const { width, height } = entries[0].contentRect
|
|
285
|
+
})
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Performance Notes
|
|
291
|
+
|
|
292
|
+
- All physics directives respect `prefers-reduced-motion` reactively
|
|
293
|
+
- `magnetic` and `cursorGlow` cache `getBoundingClientRect` on mouseenter (not per-frame)
|
|
294
|
+
- `gravity` only animates once — parent re-renders don't re-trigger
|
|
295
|
+
- `livingBorder` shares a single `<style>` element across all instances
|
|
296
|
+
- `nebula` uses a singleton IntersectionObserver + pauses off-screen animations
|
|
297
|
+
- All directives use `Subject` + `takeUntil` for subscription cleanup
|
|
298
|
+
- All directives implement `reconnected()` for cache/conditional rendering survival
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Schmancy Discovery
|
|
2
|
+
|
|
3
|
+
> Event-based component and element discovery across shadow DOM boundaries. No DOM traversal — just broadcast and race.
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
Web components hide inside shadow DOM. Traversing with `querySelector` + `shadowRoot` everywhere is fragile. Discovery broadcasts a "where are you?" event; components respond with themselves.
|
|
7
|
+
|
|
8
|
+
## API
|
|
9
|
+
```typescript
|
|
10
|
+
import {
|
|
11
|
+
discover,
|
|
12
|
+
discoverComponent,
|
|
13
|
+
discoverAnyComponent,
|
|
14
|
+
discoverElement,
|
|
15
|
+
discoverAllElements,
|
|
16
|
+
} from '@mhmo91/schmancy'
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### `discover(query, timeout?)`
|
|
20
|
+
Smart auto-detect. Routes to `discoverElement` for CSS selectors (`#`, `.`, `[`) and `discoverComponent` for tag names.
|
|
21
|
+
```typescript
|
|
22
|
+
discover<SchmancyNavigationRail>('schmancy-navigation-rail').subscribe(el => el?.select('home'))
|
|
23
|
+
discover('#hero-card').subscribe(el => el?.focus())
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### `discoverComponent(tag, timeout = 100)`
|
|
27
|
+
Broadcasts `{tag}-where-are-you`; first responder wins.
|
|
28
|
+
```typescript
|
|
29
|
+
discoverComponent<SchmancyDialog>('schmancy-dialog')
|
|
30
|
+
.subscribe(dialog => dialog?.open())
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### `discoverAnyComponent(...tags)`
|
|
34
|
+
Race between multiple tags — first to respond wins.
|
|
35
|
+
```typescript
|
|
36
|
+
discoverAnyComponent('schmancy-navigation-rail', 'schmancy-navigation-bar')
|
|
37
|
+
.subscribe(nav => nav?.select(route))
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### `discoverElement(selector, timeout = 150)`
|
|
41
|
+
Finds any element by CSS selector across shadow DOM. Uses a request ID + universal `schmancy-discover` event. Every `$LitElement` responds if it finds a match in its shadow root.
|
|
42
|
+
```typescript
|
|
43
|
+
discoverElement('[data-section="pricing"]').subscribe(section => section?.scrollIntoView())
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### `discoverAllElements(selector, timeout = 150)`
|
|
47
|
+
Collects **all** matching responses within the timeout window.
|
|
48
|
+
```typescript
|
|
49
|
+
discoverAllElements('.flagged').subscribe(all => console.log(all.length))
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## How the Handshake Works
|
|
53
|
+
1. Caller creates a unique `requestId` and broadcasts `schmancy-discover` on `window` with `{ selector, requestId }`.
|
|
54
|
+
2. Every `$LitElement` listens for this event (wired up in the base class).
|
|
55
|
+
3. Any matching element dispatches `schmancy-discover-response` with `{ requestId, element }`.
|
|
56
|
+
4. Caller collects responses for the timeout window and emits via RxJS.
|
|
57
|
+
|
|
58
|
+
## Pattern in Base Class
|
|
59
|
+
Every `$LitElement` inherits auto-response: `discover<T>(tag)` (method on the component) and `{tagName}-where-are-you`/`{tagName}-here-i-am` events. See [mixins.md](./mixins.md).
|
|
60
|
+
|
|
61
|
+
## When to Use
|
|
62
|
+
- Cross-shadow coordination between unrelated components.
|
|
63
|
+
- Imperatively focusing or driving a far-away UI piece from a handler.
|
|
64
|
+
|
|
65
|
+
## When NOT to Use
|
|
66
|
+
- Same-tree data flow — use `@provide`/`@consume` (Lit context) or Schmancy [`store`](./store.md).
|
|
67
|
+
- Parent-to-child directly — just use `this.renderRoot.querySelector()`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# schmancy-divider
|
|
2
|
+
|
|
3
|
+
> Horizontal or vertical divider line with grow animation.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-divider></schmancy-divider>
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Properties
|
|
11
|
+
| Property | Type | Default | Description |
|
|
12
|
+
|----------|------|---------|-------------|
|
|
13
|
+
| vertical | boolean | `false` | Vertical orientation (use inside flex/grid) |
|
|
14
|
+
| outline | `'default'\|'variant'` | `'variant'` | Line color intensity |
|
|
15
|
+
| grow | `'start'\|'end'\|'both'` | `'start'` | Animation origin direction |
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
```html
|
|
19
|
+
<!-- Horizontal divider -->
|
|
20
|
+
<schmancy-divider></schmancy-divider>
|
|
21
|
+
|
|
22
|
+
<!-- Vertical divider in a flex container -->
|
|
23
|
+
<div class="flex items-stretch h-16">
|
|
24
|
+
<span>Left</span>
|
|
25
|
+
<schmancy-divider vertical></schmancy-divider>
|
|
26
|
+
<span>Right</span>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<!-- Grow from center -->
|
|
30
|
+
<schmancy-divider grow="both"></schmancy-divider>
|
|
31
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# schmancy-dropdown
|
|
2
|
+
|
|
3
|
+
> Floating dropdown with trigger slot and auto-positioned content portal.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-dropdown>
|
|
8
|
+
<schmancy-button slot="trigger">Open</schmancy-button>
|
|
9
|
+
<schmancy-dropdown-content>
|
|
10
|
+
<p>Dropdown content here</p>
|
|
11
|
+
</schmancy-dropdown-content>
|
|
12
|
+
</schmancy-dropdown>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Properties
|
|
16
|
+
| Property | Type | Default | Description |
|
|
17
|
+
|----------|------|---------|-------------|
|
|
18
|
+
| open | boolean | `false` | Whether the dropdown is open |
|
|
19
|
+
| placement | string | `'bottom-start'` | Floating UI placement |
|
|
20
|
+
| distance | number | `8` | Offset distance in pixels |
|
|
21
|
+
|
|
22
|
+
## Placement Values
|
|
23
|
+
`top`, `top-start`, `top-end`, `right`, `right-start`, `right-end`, `bottom`, `bottom-start`, `bottom-end`, `left`, `left-start`, `left-end`
|
|
24
|
+
|
|
25
|
+
## Methods
|
|
26
|
+
| Method | Description |
|
|
27
|
+
|--------|-------------|
|
|
28
|
+
| toggle() | Toggle open/close state |
|
|
29
|
+
|
|
30
|
+
## Slots
|
|
31
|
+
| Slot | Description |
|
|
32
|
+
|------|-------------|
|
|
33
|
+
| trigger | Element that opens the dropdown on click |
|
|
34
|
+
| default | Dropdown content |
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
```html
|
|
38
|
+
<!-- Right-aligned dropdown -->
|
|
39
|
+
<schmancy-dropdown placement="bottom-end">
|
|
40
|
+
<schmancy-icon-button slot="trigger">more_vert</schmancy-icon-button>
|
|
41
|
+
<schmancy-dropdown-content>
|
|
42
|
+
<div class="p-4">Custom content</div>
|
|
43
|
+
</schmancy-dropdown-content>
|
|
44
|
+
</schmancy-dropdown>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Content is teleported to a portal for proper z-index stacking. Closes on outside click or Escape key.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# schmancy-expand
|
|
2
|
+
|
|
3
|
+
> Expandable/accordion component. Inline mode uses grid-template-rows transitions; portal mode teleports content to a body-level `schmancy-expand-root` with backdrop.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-expand summary="Details">
|
|
8
|
+
<p>Content appears when expanded.</p>
|
|
9
|
+
</schmancy-expand>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Properties
|
|
13
|
+
| Property | Type | Default | Description |
|
|
14
|
+
|----------|------|---------|-------------|
|
|
15
|
+
| `summary` | string | `''` | Summary text shown when collapsed |
|
|
16
|
+
| `open` | boolean | `false` | Expansion state (reflected) |
|
|
17
|
+
| `summary-padding` | string | — | CSS padding for the summary row |
|
|
18
|
+
| `content-padding` | string | — | CSS padding for the body |
|
|
19
|
+
| `hide-indicator` | boolean | `false` | Hide the chevron indicator |
|
|
20
|
+
| `indicator-rotate` | number | `90` | Rotation angle (deg) when open |
|
|
21
|
+
| `backdrop` | boolean | `true` | Show semi-transparent backdrop in portal mode |
|
|
22
|
+
| `inline` | boolean | `false` | Inline expansion instead of portal (no backdrop) |
|
|
23
|
+
|
|
24
|
+
## Slots
|
|
25
|
+
| Slot | Purpose |
|
|
26
|
+
|------|---------|
|
|
27
|
+
| (default) | Expanded content |
|
|
28
|
+
| `summary` | Custom summary markup (overrides `summary` property) |
|
|
29
|
+
|
|
30
|
+
## Behavior
|
|
31
|
+
- **Portal mode (default)**: on open, content is teleported into a body-anchored `schmancy-expand-root` with a backdrop. Click outside or press `Escape` to close.
|
|
32
|
+
- **Inline mode** (`inline`): uses `grid-template-rows: 0fr → 1fr` transition inside the host — no portal, no backdrop.
|
|
33
|
+
- `SPRING_SNAPPY` physics for indicator rotation.
|
|
34
|
+
- Respects `prefers-reduced-motion`.
|
|
35
|
+
- Broadcast event `SCHMANCY_EXPAND_REQUEST_CLOSE` on `window` closes whichever instance is currently open.
|
|
36
|
+
|
|
37
|
+
## Example — inline accordion
|
|
38
|
+
```html
|
|
39
|
+
${repeat(this.faqs, faq => faq.id, faq => html`
|
|
40
|
+
<schmancy-expand inline .summary=${faq.question}>
|
|
41
|
+
<p>${faq.answer}</p>
|
|
42
|
+
</schmancy-expand>
|
|
43
|
+
`)}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Example — portal with custom summary slot
|
|
47
|
+
```html
|
|
48
|
+
<schmancy-expand>
|
|
49
|
+
<div slot="summary" class="flex items-center gap-2">
|
|
50
|
+
<schmancy-icon>info</schmancy-icon>
|
|
51
|
+
<schmancy-typography type="title">Advanced options</schmancy-typography>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="p-4">
|
|
54
|
+
<!-- settings form -->
|
|
55
|
+
</div>
|
|
56
|
+
</schmancy-expand>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Programmatic Close
|
|
60
|
+
```typescript
|
|
61
|
+
import { SCHMANCY_EXPAND_REQUEST_CLOSE } from '@mhmo91/schmancy'
|
|
62
|
+
window.dispatchEvent(new Event(SCHMANCY_EXPAND_REQUEST_CLOSE))
|
|
63
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Schmancy Extra
|
|
2
|
+
|
|
3
|
+
> Data-driven dropdowns for common localization fields. Country and timezone pickers, form-associated and autocomplete-backed.
|
|
4
|
+
|
|
5
|
+
## schmancy-select-countries
|
|
6
|
+
Fully autocomplete-searchable country dropdown. Form-associated (participates in `<form>` submission and validation via `ElementInternals`).
|
|
7
|
+
|
|
8
|
+
```html
|
|
9
|
+
<schmancy-select-countries
|
|
10
|
+
name="country"
|
|
11
|
+
label="Country"
|
|
12
|
+
placeholder="Select a country"
|
|
13
|
+
required
|
|
14
|
+
value="DE"
|
|
15
|
+
@change=${e => this.country = e.target.value}
|
|
16
|
+
></schmancy-select-countries>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
| Property | Type | Default | Description |
|
|
20
|
+
|----------|------|---------|-------------|
|
|
21
|
+
| `value` | string | — | ISO country code (reflected) |
|
|
22
|
+
| `name` | string | `''` | Form field name |
|
|
23
|
+
| `label` | string | `'Country'` | Visible label |
|
|
24
|
+
| `hint` | string | `'Please select a country'` | Helper text |
|
|
25
|
+
| `placeholder` | string | `'Select a country'` | Placeholder in the input |
|
|
26
|
+
| `required` | boolean | `false` | Validation constraint |
|
|
27
|
+
|
|
28
|
+
## schmancy-select-timezones
|
|
29
|
+
Same pattern as countries, backed by timezone data.
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<schmancy-select-timezones
|
|
33
|
+
name="timezone"
|
|
34
|
+
label="Timezone"
|
|
35
|
+
value="Europe/Berlin"
|
|
36
|
+
></schmancy-select-timezones>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Accepts the same set of properties (`value`, `name`, `label`, `hint`, `placeholder`, `required`).
|
|
40
|
+
|
|
41
|
+
## Raw Data Exports
|
|
42
|
+
If you want the underlying data without the component:
|
|
43
|
+
```typescript
|
|
44
|
+
import countries from '@mhmo91/schmancy' // default export from countries.data
|
|
45
|
+
import timezones from '@mhmo91/schmancy' // default export from timezones.data
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Each countries row: `{ code, name, dialCode?, flag?, ... }`. Timezones: `{ name, offset, label, ... }`.
|
|
49
|
+
|
|
50
|
+
## Form Integration
|
|
51
|
+
Both use `formAssociated = true` and register with the parent `<form>`. Works with native `form.checkValidity()` and with [`schmancy-form`](./form.md).
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
<schmancy-form @submit=${this.onSubmit}>
|
|
55
|
+
<schmancy-select-countries name="country" required></schmancy-select-countries>
|
|
56
|
+
<schmancy-select-timezones name="timezone" required></schmancy-select-timezones>
|
|
57
|
+
<schmancy-button type="submit" variant="filled">Save</schmancy-button>
|
|
58
|
+
</schmancy-form>
|
|
59
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# schmancy-float (deprecated alias)
|
|
2
|
+
|
|
3
|
+
> Backward-compatibility alias for [`schmancy-window`](./window.md). Existing code keeps working — new code should use `schmancy-window` directly.
|
|
4
|
+
|
|
5
|
+
## Migration
|
|
6
|
+
```html
|
|
7
|
+
<!-- Before -->
|
|
8
|
+
<schmancy-float id="panel">…</schmancy-float>
|
|
9
|
+
|
|
10
|
+
<!-- After -->
|
|
11
|
+
<schmancy-window id="panel">…</schmancy-window>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
All properties are identical. See [window.md](./window.md) for full API.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# schmancy-form
|
|
2
|
+
|
|
3
|
+
> Form container that collects data from child controls, validates, and emits submit/reset events.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-form @submit=${(e) => handleSubmit(e.detail)}>
|
|
8
|
+
<schmancy-input name="email" label="Email" required></schmancy-input>
|
|
9
|
+
<schmancy-button type="submit">Submit</schmancy-button>
|
|
10
|
+
</schmancy-form>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Properties
|
|
14
|
+
| Property | Type | Default | Description |
|
|
15
|
+
|----------|------|---------|-------------|
|
|
16
|
+
| novalidate | boolean | `false` | Skip validation on submit |
|
|
17
|
+
|
|
18
|
+
## Events
|
|
19
|
+
| Event | Detail | Description |
|
|
20
|
+
|-------|--------|-------------|
|
|
21
|
+
| submit | FormData | Form data from all child controls |
|
|
22
|
+
| reset | - | When the form is reset |
|
|
23
|
+
|
|
24
|
+
## Methods
|
|
25
|
+
| Method | Returns | Description |
|
|
26
|
+
|--------|---------|-------------|
|
|
27
|
+
| submit() | boolean | Validates and dispatches submit event. Returns false if invalid. |
|
|
28
|
+
| reset() | void | Resets all child controls to default values |
|
|
29
|
+
| getFormData() | FormData | Collects current form data without submitting |
|
|
30
|
+
| reportValidity() | boolean | Checks and shows validation on all controls |
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
```html
|
|
34
|
+
<!-- Form with validation -->
|
|
35
|
+
<schmancy-form @submit=${(e) => save(e.detail)} @reset=${() => clearForm()}>
|
|
36
|
+
<schmancy-input name="name" label="Name" required></schmancy-input>
|
|
37
|
+
<schmancy-select name="role" label="Role" required>
|
|
38
|
+
<schmancy-option value="admin" label="Admin"></schmancy-option>
|
|
39
|
+
<schmancy-option value="user" label="User"></schmancy-option>
|
|
40
|
+
</schmancy-select>
|
|
41
|
+
<schmancy-checkbox name="active" label="Active"></schmancy-checkbox>
|
|
42
|
+
<div class="flex gap-2">
|
|
43
|
+
<schmancy-button type="submit">Save</schmancy-button>
|
|
44
|
+
<schmancy-button type="reset">Reset</schmancy-button>
|
|
45
|
+
</div>
|
|
46
|
+
</schmancy-form>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Submit triggers on Enter key in inputs or clicking a submit-type button.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# schmancy-icon
|
|
2
|
+
|
|
3
|
+
> Material Symbols icon with configurable fill, weight, grade, variant, and size tokens.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```html
|
|
7
|
+
<schmancy-icon>settings</schmancy-icon>
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Properties
|
|
11
|
+
| Property | Type | Default | Description |
|
|
12
|
+
|----------|------|---------|-------------|
|
|
13
|
+
| icon | string | `undefined` | Icon name (alternative to slot content, translation-safe) |
|
|
14
|
+
| size | `'xxs'\|'xs'\|'sm'\|'md'\|'lg'\|string` | `'md'` | Icon size (12/16/20/24/32px or custom) |
|
|
15
|
+
| fill | number (0-1) | `0` | Fill level (0=outlined, 1=filled) |
|
|
16
|
+
| weight | number (100-700) | `400` | Stroke thickness |
|
|
17
|
+
| grade | number (-50 to 200) | `0` | Visual weight adjustment |
|
|
18
|
+
| variant | `'outlined'\|'rounded'\|'sharp'` | `'outlined'` | Icon style variant |
|
|
19
|
+
|
|
20
|
+
## Size Tokens
|
|
21
|
+
| Token | Size | Optical Size | Best For |
|
|
22
|
+
|-------|------|-------------|----------|
|
|
23
|
+
| xxs | 12px | 20 | Ultra-compact UIs |
|
|
24
|
+
| xs | 16px | 20 | 32px buttons |
|
|
25
|
+
| sm | 20px | 20 | 40px buttons |
|
|
26
|
+
| md | 24px | 24 | Default (48px buttons) |
|
|
27
|
+
| lg | 32px | 40 | 56px buttons |
|
|
28
|
+
|
|
29
|
+
## Examples
|
|
30
|
+
```html
|
|
31
|
+
<!-- Filled icon -->
|
|
32
|
+
<schmancy-icon .fill=${1}>favorite</schmancy-icon>
|
|
33
|
+
|
|
34
|
+
<!-- Large rounded icon -->
|
|
35
|
+
<schmancy-icon size="lg" variant="rounded">home</schmancy-icon>
|
|
36
|
+
|
|
37
|
+
<!-- Custom size -->
|
|
38
|
+
<schmancy-icon size="48px" .weight=${300}>search</schmancy-icon>
|
|
39
|
+
|
|
40
|
+
<!-- Translation-safe (use icon property instead of slot) -->
|
|
41
|
+
<schmancy-icon icon="delete"></schmancy-icon>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Auto-loads Google Fonts on first use. Translation-protected via `translate="no"` and `notranslate` class.
|