@mhmo91/schmancy 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/INDEX.md +53 -302
- package/ai/area.md +91 -165
- package/ai/mailbox.md +1 -1
- package/ai/mixins.md +37 -139
- package/ai/store.md +70 -136
- package/dist/ai/INDEX.md +53 -302
- package/dist/ai/area.md +91 -165
- package/dist/ai/mailbox.md +1 -1
- package/dist/ai/mixins.md +37 -139
- package/dist/ai/store.md +70 -136
- package/dist/{area-CC8fUnra.js → area-CRoGqD_u.js} +2 -2
- package/dist/area-CRoGqD_u.js.map +1 -0
- package/dist/{area-wnWUAHEn.cjs → area-JPykB7A9.cjs} +1 -1
- package/dist/area-JPykB7A9.cjs.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-B2Z3WK_7.cjs → autocomplete-5rVhbieU.cjs} +1 -1
- package/dist/{autocomplete-B2Z3WK_7.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
- package/dist/{autocomplete-CJ7YgtKN.js → autocomplete-BllPQwr8.js} +3 -3
- package/dist/{autocomplete-CJ7YgtKN.js.map → autocomplete-BllPQwr8.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-C9eU6NO-.js → boat-BDTQ-du9.js} +2 -2
- package/dist/{boat-C9eU6NO-.js.map → boat-BDTQ-du9.js.map} +1 -1
- package/dist/{boat-B57_4TzJ.cjs → boat-DYEAZ8Qj.cjs} +1 -1
- package/dist/{boat-B57_4TzJ.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/{busy-CGZXy0h-.js → busy-ChDAeaKF.js} +1 -1
- package/dist/{busy-CGZXy0h-.js.map → busy-ChDAeaKF.js.map} +1 -1
- package/dist/{busy--6oimtop.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
- package/dist/{busy--6oimtop.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +2 -2
- package/dist/{card-BGJ0Hb1O.cjs → card-BvPWVEJX.cjs} +1 -1
- package/dist/{card-BGJ0Hb1O.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
- package/dist/{card-C-ee-l5O.js → card-DZFPRPqs.js} +1 -1
- package/dist/{card-C-ee-l5O.js.map → card-DZFPRPqs.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.js +2 -2
- package/dist/{checkbox-DuYaKoDZ.cjs → checkbox-BC_37rsG.cjs} +1 -1
- package/dist/{checkbox-DuYaKoDZ.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
- package/dist/{checkbox-FRcorDrD.js → checkbox-GSSjqo6w.js} +1 -1
- package/dist/{checkbox-FRcorDrD.js.map → checkbox-GSSjqo6w.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BpA0A-qr.cjs → chips-B19XS8Xc.cjs} +1 -1
- package/dist/{chips-BpA0A-qr.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
- package/dist/{chips-CyzNbKJD.js → chips-B9oAEfE_.js} +3 -3
- package/dist/{chips-CyzNbKJD.js.map → chips-B9oAEfE_.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-C7O9ltXm.js → code-highlight-DCk5lJY-.js} +1 -1
- package/dist/{code-highlight-C7O9ltXm.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
- package/dist/{code-highlight-DsBdSQBG.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
- package/dist/{code-highlight-DsBdSQBG.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-CkMvOiTR.js → components-COsM6sJZ.js} +2 -2
- package/dist/{components-CkMvOiTR.js.map → components-COsM6sJZ.js.map} +1 -1
- package/dist/{components-dDI3xeIf.cjs → components-CyD6a7gQ.cjs} +1 -1
- package/dist/{components-dDI3xeIf.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-BrN_Bs6_.js → date-range-Sfyco9-n.js} +3 -3
- package/dist/{date-range-BrN_Bs6_.js.map → date-range-Sfyco9-n.js.map} +1 -1
- package/dist/{date-range-70zhLUKE.cjs → date-range-ZAaQB22I.cjs} +1 -1
- package/dist/{date-range-70zhLUKE.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
- package/dist/{date-range-inline-Cp294DxR.js → date-range-inline-Bl8qbiQF.js} +1 -1
- package/dist/{date-range-inline-Cp294DxR.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
- package/dist/{date-range-inline-CPzD-tIv.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
- package/dist/{date-range-inline-CPzD-tIv.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-COcAkBqB.cjs → delay-7boauN6N.cjs} +1 -1
- package/dist/{delay-COcAkBqB.cjs.map → delay-7boauN6N.cjs.map} +1 -1
- package/dist/{delay-IV0Swce2.js → delay-CgX6m0HN.js} +3 -3
- package/dist/{delay-IV0Swce2.js.map → delay-CgX6m0HN.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-DgWkPqmt.cjs → details-BHnk8l4q.cjs} +1 -1
- package/dist/{details-DgWkPqmt.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
- package/dist/{details-CuKmr3Qw.js → details-BPkUg8Cq.js} +2 -2
- package/dist/{details-CuKmr3Qw.js.map → details-BPkUg8Cq.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/directives.cjs.map +1 -1
- package/dist/directives.js.map +1 -1
- package/dist/discovery.cjs.map +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/{divider-BWoUbfgZ.js → divider-CW9a7MMj.js} +2 -2
- package/dist/{divider-BWoUbfgZ.js.map → divider-CW9a7MMj.js.map} +1 -1
- package/dist/{divider-BghtrMbn.cjs → divider-_khrhrZo.cjs} +1 -1
- package/dist/{divider-BghtrMbn.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-XyDE5SsO.cjs → expand-Cp7-PH8b.cjs} +1 -1
- package/dist/{expand-XyDE5SsO.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
- package/dist/{expand-CJU9m4ga.js → expand-iQ7EOMP7.js} +3 -3
- package/dist/{expand-CJU9m4ga.js.map → expand-iQ7EOMP7.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-CsrRKKqE.cjs → extra-IKAiJJhv.cjs} +1 -1
- package/dist/{extra-CsrRKKqE.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
- package/dist/{extra-BxXFmW1w.js → extra-wEpvEFbK.js} +2 -2
- package/dist/{extra-BxXFmW1w.js.map → extra-wEpvEFbK.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-BD86t_NU.js → float-BQ_urmMs.js} +2 -2
- package/dist/{float-BD86t_NU.js.map → float-BQ_urmMs.js.map} +1 -1
- package/dist/{float-DBv1FINW.cjs → float-D5rNC82i.cjs} +1 -1
- package/dist/{float-DBv1FINW.cjs.map → float-D5rNC82i.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-D0bIeDWT.cjs → form-BqN1AGFj.cjs} +1 -1
- package/dist/{form-D0bIeDWT.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
- package/dist/{form-Cp5-I_ZV.js → form-CajC5HnO.js} +1 -1
- package/dist/{form-Cp5-I_ZV.js.map → form-CajC5HnO.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icons-D8w_20mO.cjs → icons-B57_93VV.cjs} +1 -1
- package/dist/{icons-D8w_20mO.cjs.map → icons-B57_93VV.cjs.map} +1 -1
- package/dist/{icons-BpU0_l92.js → icons-BDqiGXrO.js} +1 -1
- package/dist/{icons-BpU0_l92.js.map → icons-BDqiGXrO.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BjwxA2Pg.cjs → iframe-DNHL3GIk.cjs} +1 -1
- package/dist/{iframe-BjwxA2Pg.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
- package/dist/{iframe-tY1GY5g1.js → iframe-WnWPIrBG.js} +1 -1
- package/dist/{iframe-tY1GY5g1.js.map → iframe-WnWPIrBG.js.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +33 -33
- package/dist/{input-BwxwognS.cjs → input-BiSrTcrR.cjs} +1 -1
- package/dist/{input-BwxwognS.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
- package/dist/{input-BnfTpRN9.js → input-VaXHFrRn.js} +1 -1
- package/dist/{input-BnfTpRN9.js.map → input-VaXHFrRn.js.map} +1 -1
- package/dist/{input-chip-MjOwX5EY.cjs → input-chip-Dy-AiP55.cjs} +1 -1
- package/dist/{input-chip-MjOwX5EY.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
- package/dist/{input-chip-CkM2aYmO.js → input-chip-QejNcRnS.js} +1 -1
- package/dist/{input-chip-CkM2aYmO.js.map → input-chip-QejNcRnS.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/{layout-CJSlZlFL.js → layout-CnsXeCAy.js} +2 -2
- package/dist/{layout-CJSlZlFL.js.map → layout-CnsXeCAy.js.map} +1 -1
- package/dist/{layout-BV0EeyUS.cjs → layout-DNYG3phx.cjs} +1 -1
- package/dist/{layout-BV0EeyUS.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-groqGmJH.js → lightbox-BrI1Z31s.js} +2 -2
- package/dist/{lightbox-groqGmJH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
- package/dist/{lightbox-CpNMZHZW.cjs → lightbox-CmACf0t5.cjs} +1 -1
- package/dist/{lightbox-CpNMZHZW.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-DzkqT_r-.js → list-Cm-jjXxM.js} +2 -2
- package/dist/{list-DzkqT_r-.js.map → list-Cm-jjXxM.js.map} +1 -1
- package/dist/{list-CyHd0Zc2.cjs → list-swIL9VDv.cjs} +1 -1
- package/dist/{list-CyHd0Zc2.cjs.map → list-swIL9VDv.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BG6_-nYX.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
- package/dist/{litElement.mixin-BG6_-nYX.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
- package/dist/{litElement.mixin-Dm-4L8zL.js → litElement.mixin-6jJYHCrZ.js} +1 -1
- package/dist/{litElement.mixin-Dm-4L8zL.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
- package/dist/{mailbox-BcqnXYVP.js → mailbox-BuvsVaAQ.js} +4 -4
- package/dist/{mailbox-BcqnXYVP.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
- package/dist/{mailbox-C5eYTd7p.cjs → mailbox-D6LkQcN5.cjs} +1 -1
- package/dist/{mailbox-C5eYTd7p.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-C0o1PgLE.js → map-CQiKAxC3.js} +1 -1
- package/dist/{map-C0o1PgLE.js.map → map-CQiKAxC3.js.map} +1 -1
- package/dist/{map-BncheFt5.cjs → map-D5NN4VET.cjs} +1 -1
- package/dist/{map-BncheFt5.cjs.map → map-D5NN4VET.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-uwqlQbLd.js → menu-C1x04YZw.js} +2 -2
- package/dist/{menu-uwqlQbLd.js.map → menu-C1x04YZw.js.map} +1 -1
- package/dist/{menu-yXzwJZFf.cjs → menu-CkgMO9K5.cjs} +1 -1
- package/dist/{menu-yXzwJZFf.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-DzYT4deA.js → notification-BnBgxjF-.js} +3 -3
- package/dist/{notification-DzYT4deA.js.map → notification-BnBgxjF-.js.map} +1 -1
- package/dist/{notification-BjwTfLAl.cjs → notification-CZFEhWxc.cjs} +1 -1
- package/dist/{notification-BjwTfLAl.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BJsD3u2D.cjs → option-BrxCVwSx.cjs} +1 -1
- package/dist/{option-BJsD3u2D.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
- package/dist/{option-JFHxgiYl.js → option-DBO8xZwd.js} +1 -1
- package/dist/{option-JFHxgiYl.js.map → option-DBO8xZwd.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +3 -3
- package/dist/{progress-BoRmyGAa.cjs → progress-Db2e4_Zd.cjs} +1 -1
- package/dist/{progress-BoRmyGAa.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
- package/dist/{progress-BUh5WBqx.js → progress-DeiHxXo7.js} +2 -2
- package/dist/{progress-BUh5WBqx.js.map → progress-DeiHxXo7.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-8MrDz_qX.js → provide-C1aQhxYo.js} +1 -1
- package/dist/{provide-8MrDz_qX.js.map → provide-C1aQhxYo.js.map} +1 -1
- package/dist/{provide-CDkxgjHb.cjs → provide-DHnhQtCH.cjs} +1 -1
- package/dist/{provide-CDkxgjHb.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/{radio-group-rhrvhB5X.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
- package/dist/{radio-group-rhrvhB5X.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
- package/dist/{radio-group-DbOWUPhi.js → radio-group-zSO0AkJf.js} +1 -1
- package/dist/{radio-group-DbOWUPhi.js.map → radio-group-zSO0AkJf.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{scroll-BE9W9PF2.cjs → scroll-QMCmbbDv.cjs} +1 -1
- package/dist/{scroll-BE9W9PF2.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
- package/dist/{scroll-qGks1R0k.js → scroll-cBDzye64.js} +1 -1
- package/dist/{scroll-qGks1R0k.js.map → scroll-cBDzye64.js.map} +1 -1
- package/dist/{select-DXU2kzg4.cjs → select-Ct37l3lg.cjs} +1 -1
- package/dist/{select-DXU2kzg4.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
- package/dist/{select-D9sgBRjU.js → select-c6HbWvKP.js} +2 -2
- package/dist/{select-D9sgBRjU.js.map → select-c6HbWvKP.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-CIxCCJ3H.js → sheet-BMXcUiIm.js} +4 -4
- package/dist/{sheet-CIxCCJ3H.js.map → sheet-BMXcUiIm.js.map} +1 -1
- package/dist/{sheet-CeX6BbNp.cjs → sheet-CQec-bCV.cjs} +1 -1
- package/dist/{sheet-CeX6BbNp.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-CAB7weBc.js → sheet.service-BcPV3Du4.js} +1 -1
- package/dist/{sheet.service-CAB7weBc.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
- package/dist/{sheet.service-DPAp7E3x.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
- package/dist/{sheet.service-DPAp7E3x.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +2 -2
- package/dist/{src-CbO5kJ2O.js → src-BLngW2bl.js} +42 -42
- package/dist/{src-CbO5kJ2O.js.map → src-BLngW2bl.js.map} +1 -1
- package/dist/{src-SraDxEeg.cjs → src-BtQVyqMy.cjs} +1 -1
- package/dist/{src-SraDxEeg.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{surface-DuH0pm2v.cjs → surface-BjKZoJxK.cjs} +1 -1
- package/dist/{surface-DuH0pm2v.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
- package/dist/{surface-eN_Jy2MJ.js → surface-pK8hME5c.js} +3 -3
- package/dist/{surface-eN_Jy2MJ.js.map → surface-pK8hME5c.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-CIXgN6iw.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
- package/dist/{surface.mixin-CIXgN6iw.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
- package/dist/{surface.mixin-D9jv1sKG.js → surface.mixin-CBNRpJum.js} +1 -1
- package/dist/{surface.mixin-D9jv1sKG.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
- package/dist/{table-Dg_tUGB_.js → table-BXIHX9h4.js} +2 -2
- package/dist/{table-Dg_tUGB_.js.map → table-BXIHX9h4.js.map} +1 -1
- package/dist/{table-C9rRQJEB.cjs → table-CiqgZzSd.cjs} +1 -1
- package/dist/{table-C9rRQJEB.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-soTL-x4G.cjs → tabs-CKa-W4qA.cjs} +1 -1
- package/dist/{tabs-soTL-x4G.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
- package/dist/{tabs-BbFC9omR.js → tabs-nbV5eblZ.js} +2 -2
- package/dist/{tabs-BbFC9omR.js.map → tabs-nbV5eblZ.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
- package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
- package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
- package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-DaRUJ0ri.cjs → textarea-Cp1ZE60O.cjs} +1 -1
- package/dist/{textarea-DaRUJ0ri.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
- package/dist/{textarea-hChvHbNM.js → textarea-D7q8exMg.js} +1 -1
- package/dist/{textarea-hChvHbNM.js.map → textarea-D7q8exMg.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-ZYH2MqX9.cjs → theme-Da4SPq9X.cjs} +1 -1
- package/dist/{theme-ZYH2MqX9.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
- package/dist/{theme-B0M8Hlyo.js → theme-_VPV6Bxh.js} +3 -3
- package/dist/{theme-B0M8Hlyo.js.map → theme-_VPV6Bxh.js.map} +1 -1
- package/dist/{theme-button-BtlX_Zgd.js → theme-button--sX8A-m1.js} +1 -1
- package/dist/{theme-button-BtlX_Zgd.js.map → theme-button--sX8A-m1.js.map} +1 -1
- package/dist/{theme-button-Dvqg-rE_.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
- package/dist/{theme-button-Dvqg-rE_.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Cf9f2bdx.cjs → typewriter-B2TnHPjw.cjs} +1 -1
- package/dist/{typewriter-Cf9f2bdx.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
- package/dist/{typewriter-CCel8Nta.js → typewriter-BrZNa8T-.js} +3 -3
- package/dist/{typewriter-CCel8Nta.js.map → typewriter-BrZNa8T-.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{window-CbgdwOZD.js → window-CM1ycigo.js} +2 -2
- package/dist/{window-CbgdwOZD.js.map → window-CM1ycigo.js.map} +1 -1
- package/dist/{window-B9_14c12.cjs → window-Uii13x_r.cjs} +1 -1
- package/dist/{window-B9_14c12.cjs.map → window-Uii13x_r.cjs.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/mixins/baseElement.ts +1 -1
- package/mixins/discovery.service.ts +1 -1
- package/package.json +1 -2
- package/src/area/area.service.ts +1 -1
- package/src/area/router.types.ts +1 -1
- package/src/directives/animate-text.ts +1 -1
- package/src/discovery/discovery.service.ts +1 -1
- package/src/input/input.ts +1 -1
- package/src/mailbox/README.md +7 -10
- package/src/mailbox/types.ts +0 -1
- package/types/mixins/discovery.service.d.ts +1 -1
- package/types/src/discovery/discovery.service.d.ts +1 -1
- package/types/src/mailbox/types.d.ts +0 -1
- package/dist/area-CC8fUnra.js.map +0 -1
- package/dist/area-wnWUAHEn.cjs.map +0 -1
- package/dist/tailwind.mixin-BIVhjNvD.js +0 -225
- package/dist/tailwind.mixin-BIVhjNvD.js.map +0 -1
- package/dist/tailwind.mixin-DSuEu-y3.cjs +0 -2
- package/dist/tailwind.mixin-DSuEu-y3.cjs.map +0 -1
- package/src/area/readme.md +0 -338
- package/src/area/router-guide.md +0 -360
- package/src/autocomplete/README.md +0 -485
- package/src/content-drawer/readme.md +0 -709
- package/src/icons/readme.md +0 -37
- package/src/list/readme.md +0 -62
- package/src/radio-group/readme.md +0 -315
- package/src/select/README.md +0 -405
- package/src/tabs/Readme.md +0 -397
- package/src/teleport/readme.md +0 -91
- package/src/tree/README.md +0 -59
- package/src/typewriter/IMPROVEMENTS.md +0 -174
- package/src/typewriter/QUICK_REFERENCE.md +0 -166
- package/src/typewriter/test-typewriter.html +0 -97
|
@@ -1,709 +0,0 @@
|
|
|
1
|
-
# Schmancy Content Drawer
|
|
2
|
-
|
|
3
|
-
A sophisticated drawer/sheet component system that provides sliding panels for content organization, navigation, and modal interactions. Perfect for creating responsive layouts with collapsible sidebars, bottom sheets, and overlay panels.
|
|
4
|
-
|
|
5
|
-
## 🎯 Overview
|
|
6
|
-
|
|
7
|
-
The Content Drawer system consists of multiple components that work together to create flexible, animated drawer experiences:
|
|
8
|
-
|
|
9
|
-
- **Content Drawer** - The main container that orchestrates drawer behavior
|
|
10
|
-
- **Main Content** - The primary content area that adjusts when drawers open
|
|
11
|
-
- **Sheet/Drawer** - The sliding panel that contains secondary content
|
|
12
|
-
- **Context System** - Shared state management for drawer coordination
|
|
13
|
-
|
|
14
|
-
## 🚀 Key Features
|
|
15
|
-
|
|
16
|
-
- **Responsive Design** - Automatically adapts between mobile and desktop layouts
|
|
17
|
-
- **Smooth Animations** - Hardware-accelerated transitions for fluid interactions
|
|
18
|
-
- **Flexible Positioning** - Support for left, right, top, and bottom drawers
|
|
19
|
-
- **State Management** - Built-in context system for complex drawer hierarchies
|
|
20
|
-
- **Touch Gestures** - Swipe to open/close on mobile devices
|
|
21
|
-
- **Accessibility** - Full keyboard navigation and screen reader support
|
|
22
|
-
- **Theme Integration** - Follows Material Design 3 principles
|
|
23
|
-
|
|
24
|
-
## 📦 Basic Usage
|
|
25
|
-
|
|
26
|
-
```html
|
|
27
|
-
<schmancy-content-drawer>
|
|
28
|
-
<schmancy-content-drawer-main>
|
|
29
|
-
<!-- Main content goes here -->
|
|
30
|
-
<h1>Main Application Content</h1>
|
|
31
|
-
<p>This content will shift when the drawer opens.</p>
|
|
32
|
-
</schmancy-content-drawer-main>
|
|
33
|
-
|
|
34
|
-
<schmancy-content-drawer-sheet>
|
|
35
|
-
<!-- Drawer content goes here -->
|
|
36
|
-
<nav>
|
|
37
|
-
<h2>Navigation</h2>
|
|
38
|
-
<ul>
|
|
39
|
-
<li>Home</li>
|
|
40
|
-
<li>About</li>
|
|
41
|
-
<li>Contact</li>
|
|
42
|
-
</ul>
|
|
43
|
-
</nav>
|
|
44
|
-
</schmancy-content-drawer-sheet>
|
|
45
|
-
</schmancy-content-drawer>
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## 🎨 Examples
|
|
49
|
-
|
|
50
|
-
### Navigation Drawer
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
import { LitElement, html } from 'lit'
|
|
54
|
-
import { customElement, state } from 'lit/decorators.js'
|
|
55
|
-
import '@schmancy/content-drawer'
|
|
56
|
-
|
|
57
|
-
@customElement('app-layout')
|
|
58
|
-
export class AppLayout extends LitElement {
|
|
59
|
-
@state() drawerOpen = false
|
|
60
|
-
|
|
61
|
-
render() {
|
|
62
|
-
return html`
|
|
63
|
-
<schmancy-content-drawer ?open=${this.drawerOpen}>
|
|
64
|
-
<schmancy-content-drawer-main>
|
|
65
|
-
<header>
|
|
66
|
-
<schmancy-icon-button
|
|
67
|
-
icon="menu"
|
|
68
|
-
@click=${() => this.drawerOpen = !this.drawerOpen}
|
|
69
|
-
></schmancy-icon-button>
|
|
70
|
-
<h1>My Application</h1>
|
|
71
|
-
</header>
|
|
72
|
-
|
|
73
|
-
<main>
|
|
74
|
-
<!-- Main app content -->
|
|
75
|
-
</main>
|
|
76
|
-
</schmancy-content-drawer-main>
|
|
77
|
-
|
|
78
|
-
<schmancy-content-drawer-sheet width="280px">
|
|
79
|
-
<div class="drawer-header">
|
|
80
|
-
<img src="logo.png" alt="Logo" />
|
|
81
|
-
<h2>App Name</h2>
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
<schmancy-list>
|
|
85
|
-
<schmancy-list-item @click=${() => this.navigate('home')}>
|
|
86
|
-
<schmancy-icon slot="start">home</schmancy-icon>
|
|
87
|
-
Home
|
|
88
|
-
</schmancy-list-item>
|
|
89
|
-
<schmancy-list-item @click=${() => this.navigate('profile')}>
|
|
90
|
-
<schmancy-icon slot="start">person</schmancy-icon>
|
|
91
|
-
Profile
|
|
92
|
-
</schmancy-list-item>
|
|
93
|
-
<schmancy-list-item @click=${() => this.navigate('settings')}>
|
|
94
|
-
<schmancy-icon slot="start">settings</schmancy-icon>
|
|
95
|
-
Settings
|
|
96
|
-
</schmancy-list-item>
|
|
97
|
-
</schmancy-list>
|
|
98
|
-
</schmancy-content-drawer-sheet>
|
|
99
|
-
</schmancy-content-drawer>
|
|
100
|
-
`
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
navigate(page: string) {
|
|
104
|
-
// Handle navigation
|
|
105
|
-
this.drawerOpen = false
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Responsive Bottom Sheet
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
@customElement('mobile-actions')
|
|
114
|
-
export class MobileActions extends LitElement {
|
|
115
|
-
@state() sheetOpen = false
|
|
116
|
-
@state() selectedImage: File | null = null
|
|
117
|
-
|
|
118
|
-
render() {
|
|
119
|
-
return html`
|
|
120
|
-
<schmancy-content-drawer
|
|
121
|
-
?open=${this.sheetOpen}
|
|
122
|
-
position="bottom"
|
|
123
|
-
@drawer-closed=${() => this.sheetOpen = false}
|
|
124
|
-
>
|
|
125
|
-
<schmancy-content-drawer-main>
|
|
126
|
-
<div class="image-picker">
|
|
127
|
-
<schmancy-button @click=${() => this.sheetOpen = true}>
|
|
128
|
-
${this.selectedImage ? 'Change Image' : 'Select Image'}
|
|
129
|
-
</schmancy-button>
|
|
130
|
-
|
|
131
|
-
${this.selectedImage ? html`
|
|
132
|
-
<img src=${URL.createObjectURL(this.selectedImage)} />
|
|
133
|
-
` : ''}
|
|
134
|
-
</div>
|
|
135
|
-
</schmancy-content-drawer-main>
|
|
136
|
-
|
|
137
|
-
<schmancy-content-drawer-sheet height="auto" max-height="50vh">
|
|
138
|
-
<div class="sheet-handle"></div>
|
|
139
|
-
<h3>Select Image Source</h3>
|
|
140
|
-
|
|
141
|
-
<schmancy-list>
|
|
142
|
-
<schmancy-list-item @click=${() => this.selectSource('camera')}>
|
|
143
|
-
<schmancy-icon slot="start">photo_camera</schmancy-icon>
|
|
144
|
-
Take Photo
|
|
145
|
-
</schmancy-list-item>
|
|
146
|
-
<schmancy-list-item @click=${() => this.selectSource('gallery')}>
|
|
147
|
-
<schmancy-icon slot="start">photo_library</schmancy-icon>
|
|
148
|
-
Choose from Gallery
|
|
149
|
-
</schmancy-list-item>
|
|
150
|
-
<schmancy-list-item @click=${() => this.selectSource('files')}>
|
|
151
|
-
<schmancy-icon slot="start">folder</schmancy-icon>
|
|
152
|
-
Browse Files
|
|
153
|
-
</schmancy-list-item>
|
|
154
|
-
</schmancy-list>
|
|
155
|
-
</schmancy-content-drawer-sheet>
|
|
156
|
-
</schmancy-content-drawer>
|
|
157
|
-
`
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
selectSource(source: string) {
|
|
161
|
-
// Handle source selection
|
|
162
|
-
this.sheetOpen = false
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Persistent Sidebar with Context
|
|
168
|
-
|
|
169
|
-
```typescript
|
|
170
|
-
import { contentDrawerContext } from '@schmancy/content-drawer'
|
|
171
|
-
|
|
172
|
-
@customElement('dashboard-layout')
|
|
173
|
-
export class DashboardLayout extends LitElement {
|
|
174
|
-
private drawerContext = contentDrawerContext.create('main-drawer')
|
|
175
|
-
|
|
176
|
-
connectedCallback() {
|
|
177
|
-
super.connectedCallback()
|
|
178
|
-
|
|
179
|
-
// Subscribe to drawer state changes
|
|
180
|
-
this.drawerContext.state$.subscribe(state => {
|
|
181
|
-
console.log('Drawer state:', state)
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
// Check screen size for responsive behavior
|
|
185
|
-
const mediaQuery = window.matchMedia('(min-width: 1024px)')
|
|
186
|
-
this.drawerContext.setPersistent(mediaQuery.matches)
|
|
187
|
-
|
|
188
|
-
mediaQuery.addEventListener('change', (e) => {
|
|
189
|
-
this.drawerContext.setPersistent(e.matches)
|
|
190
|
-
})
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
render() {
|
|
194
|
-
return html`
|
|
195
|
-
<schmancy-content-drawer
|
|
196
|
-
.context=${this.drawerContext}
|
|
197
|
-
variant="persistent"
|
|
198
|
-
breakpoint="1024px"
|
|
199
|
-
>
|
|
200
|
-
<schmancy-content-drawer-main>
|
|
201
|
-
<schmancy-app-bar>
|
|
202
|
-
<schmancy-icon-button
|
|
203
|
-
icon="menu"
|
|
204
|
-
@click=${() => this.drawerContext.toggle()}
|
|
205
|
-
></schmancy-icon-button>
|
|
206
|
-
<span>Dashboard</span>
|
|
207
|
-
</schmancy-app-bar>
|
|
208
|
-
|
|
209
|
-
<div class="dashboard-content">
|
|
210
|
-
<!-- Dashboard widgets -->
|
|
211
|
-
</div>
|
|
212
|
-
</schmancy-content-drawer-main>
|
|
213
|
-
|
|
214
|
-
<schmancy-content-drawer-sheet width="240px">
|
|
215
|
-
<div class="sidebar">
|
|
216
|
-
<div class="user-info">
|
|
217
|
-
<schmancy-avatar>JD</schmancy-avatar>
|
|
218
|
-
<div>
|
|
219
|
-
<div class="name">John Doe</div>
|
|
220
|
-
<div class="email">john@example.com</div>
|
|
221
|
-
</div>
|
|
222
|
-
</div>
|
|
223
|
-
|
|
224
|
-
<schmancy-divider></schmancy-divider>
|
|
225
|
-
|
|
226
|
-
<nav>
|
|
227
|
-
<a href="/dashboard" class="nav-item active">
|
|
228
|
-
<schmancy-icon>dashboard</schmancy-icon>
|
|
229
|
-
Dashboard
|
|
230
|
-
</a>
|
|
231
|
-
<a href="/analytics" class="nav-item">
|
|
232
|
-
<schmancy-icon>analytics</schmancy-icon>
|
|
233
|
-
Analytics
|
|
234
|
-
</a>
|
|
235
|
-
<a href="/reports" class="nav-item">
|
|
236
|
-
<schmancy-icon>description</schmancy-icon>
|
|
237
|
-
Reports
|
|
238
|
-
</a>
|
|
239
|
-
</nav>
|
|
240
|
-
</div>
|
|
241
|
-
</schmancy-content-drawer-sheet>
|
|
242
|
-
</schmancy-content-drawer>
|
|
243
|
-
`
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### Multi-level Drawer System
|
|
249
|
-
|
|
250
|
-
```typescript
|
|
251
|
-
@customElement('nested-navigation')
|
|
252
|
-
export class NestedNavigation extends LitElement {
|
|
253
|
-
private mainDrawer = contentDrawerContext.create('main')
|
|
254
|
-
private subDrawer = contentDrawerContext.create('sub')
|
|
255
|
-
|
|
256
|
-
@state() selectedCategory: string = ''
|
|
257
|
-
|
|
258
|
-
render() {
|
|
259
|
-
return html`
|
|
260
|
-
<schmancy-content-drawer .context=${this.mainDrawer}>
|
|
261
|
-
<schmancy-content-drawer-main>
|
|
262
|
-
<!-- Main drawer for categories -->
|
|
263
|
-
<schmancy-content-drawer .context=${this.subDrawer}>
|
|
264
|
-
<schmancy-content-drawer-main>
|
|
265
|
-
<!-- Application content -->
|
|
266
|
-
<button @click=${() => this.mainDrawer.open()}>
|
|
267
|
-
Open Menu
|
|
268
|
-
</button>
|
|
269
|
-
</schmancy-content-drawer-main>
|
|
270
|
-
|
|
271
|
-
<!-- Sub drawer for items -->
|
|
272
|
-
<schmancy-content-drawer-sheet
|
|
273
|
-
width="280px"
|
|
274
|
-
offset="240px"
|
|
275
|
-
>
|
|
276
|
-
<div class="sub-drawer-header">
|
|
277
|
-
<schmancy-icon-button
|
|
278
|
-
icon="arrow_back"
|
|
279
|
-
@click=${() => this.subDrawer.close()}
|
|
280
|
-
></schmancy-icon-button>
|
|
281
|
-
<h3>${this.selectedCategory}</h3>
|
|
282
|
-
</div>
|
|
283
|
-
|
|
284
|
-
<schmancy-list>
|
|
285
|
-
${this.getItemsForCategory(this.selectedCategory).map(item => html`
|
|
286
|
-
<schmancy-list-item>${item}</schmancy-list-item>
|
|
287
|
-
`)}
|
|
288
|
-
</schmancy-list>
|
|
289
|
-
</schmancy-content-drawer-sheet>
|
|
290
|
-
</schmancy-content-drawer>
|
|
291
|
-
</schmancy-content-drawer-main>
|
|
292
|
-
|
|
293
|
-
<!-- Main drawer for categories -->
|
|
294
|
-
<schmancy-content-drawer-sheet width="240px">
|
|
295
|
-
<h2>Categories</h2>
|
|
296
|
-
<schmancy-list>
|
|
297
|
-
${this.categories.map(category => html`
|
|
298
|
-
<schmancy-list-item @click=${() => this.openSubDrawer(category)}>
|
|
299
|
-
<schmancy-icon slot="start">${category.icon}</schmancy-icon>
|
|
300
|
-
${category.name}
|
|
301
|
-
<schmancy-icon slot="end">chevron_right</schmancy-icon>
|
|
302
|
-
</schmancy-list-item>
|
|
303
|
-
`)}
|
|
304
|
-
</schmancy-list>
|
|
305
|
-
</schmancy-content-drawer-sheet>
|
|
306
|
-
</schmancy-content-drawer>
|
|
307
|
-
`
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
openSubDrawer(category: any) {
|
|
311
|
-
this.selectedCategory = category.name
|
|
312
|
-
this.subDrawer.open()
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
## 🎯 AI Integration Examples
|
|
318
|
-
|
|
319
|
-
### Smart Command Palette
|
|
320
|
-
|
|
321
|
-
```typescript
|
|
322
|
-
@customElement('ai-command-drawer')
|
|
323
|
-
export class AICommandDrawer extends LitElement {
|
|
324
|
-
@state() query = ''
|
|
325
|
-
@state() results: any[] = []
|
|
326
|
-
@state() isProcessing = false
|
|
327
|
-
|
|
328
|
-
private drawer = contentDrawerContext.create('command')
|
|
329
|
-
|
|
330
|
-
render() {
|
|
331
|
-
return html`
|
|
332
|
-
<schmancy-content-drawer
|
|
333
|
-
.context=${this.drawer}
|
|
334
|
-
position="top"
|
|
335
|
-
variant="modal"
|
|
336
|
-
>
|
|
337
|
-
<schmancy-content-drawer-main>
|
|
338
|
-
<!-- Main app content -->
|
|
339
|
-
</schmancy-content-drawer-main>
|
|
340
|
-
|
|
341
|
-
<schmancy-content-drawer-sheet height="400px">
|
|
342
|
-
<div class="command-palette">
|
|
343
|
-
<schmancy-input
|
|
344
|
-
placeholder="Ask me anything..."
|
|
345
|
-
.value=${this.query}
|
|
346
|
-
@input=${this.handleInput}
|
|
347
|
-
autofocus
|
|
348
|
-
>
|
|
349
|
-
<schmancy-icon slot="prefix">
|
|
350
|
-
${this.isProcessing ? 'hourglass_empty' : 'search'}
|
|
351
|
-
</schmancy-icon>
|
|
352
|
-
</schmancy-input>
|
|
353
|
-
|
|
354
|
-
<div class="results">
|
|
355
|
-
${this.results.map(result => html`
|
|
356
|
-
<div class="result-item" @click=${() => this.executeAction(result)}>
|
|
357
|
-
<schmancy-icon>${result.icon}</schmancy-icon>
|
|
358
|
-
<div class="result-content">
|
|
359
|
-
<div class="title">${result.title}</div>
|
|
360
|
-
<div class="description">${result.description}</div>
|
|
361
|
-
</div>
|
|
362
|
-
${result.shortcut ? html`
|
|
363
|
-
<kbd>${result.shortcut}</kbd>
|
|
364
|
-
` : ''}
|
|
365
|
-
</div>
|
|
366
|
-
`)}
|
|
367
|
-
</div>
|
|
368
|
-
|
|
369
|
-
${this.isProcessing ? html`
|
|
370
|
-
<div class="processing">
|
|
371
|
-
<schmancy-circular-progress></schmancy-circular-progress>
|
|
372
|
-
<span>Thinking...</span>
|
|
373
|
-
</div>
|
|
374
|
-
` : ''}
|
|
375
|
-
</div>
|
|
376
|
-
</schmancy-content-drawer-sheet>
|
|
377
|
-
</schmancy-content-drawer>
|
|
378
|
-
`
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
async handleInput(e: Event) {
|
|
382
|
-
this.query = (e.target as HTMLInputElement).value
|
|
383
|
-
this.isProcessing = true
|
|
384
|
-
|
|
385
|
-
// AI-powered search and suggestions
|
|
386
|
-
try {
|
|
387
|
-
const response = await fetch('/api/ai-search', {
|
|
388
|
-
method: 'POST',
|
|
389
|
-
headers: { 'Content-Type': 'application/json' },
|
|
390
|
-
body: JSON.stringify({ query: this.query })
|
|
391
|
-
})
|
|
392
|
-
|
|
393
|
-
this.results = await response.json()
|
|
394
|
-
} finally {
|
|
395
|
-
this.isProcessing = false
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// Open with keyboard shortcut
|
|
401
|
-
document.addEventListener('keydown', (e) => {
|
|
402
|
-
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
|
|
403
|
-
e.preventDefault()
|
|
404
|
-
document.querySelector('ai-command-drawer')?.drawer.open()
|
|
405
|
-
}
|
|
406
|
-
})
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
### Contextual Help Panel
|
|
410
|
-
|
|
411
|
-
```typescript
|
|
412
|
-
@customElement('contextual-help')
|
|
413
|
-
export class ContextualHelp extends LitElement {
|
|
414
|
-
@state() helpContent: any = null
|
|
415
|
-
@state() isLoading = false
|
|
416
|
-
@state() currentContext = ''
|
|
417
|
-
|
|
418
|
-
private drawer = contentDrawerContext.create('help')
|
|
419
|
-
|
|
420
|
-
render() {
|
|
421
|
-
return html`
|
|
422
|
-
<schmancy-content-drawer
|
|
423
|
-
.context=${this.drawer}
|
|
424
|
-
position="right"
|
|
425
|
-
variant="overlay"
|
|
426
|
-
>
|
|
427
|
-
<schmancy-content-drawer-main>
|
|
428
|
-
<!-- Main content with help triggers -->
|
|
429
|
-
<form>
|
|
430
|
-
<schmancy-input
|
|
431
|
-
label="Email"
|
|
432
|
-
type="email"
|
|
433
|
-
helper-text="Enter your email address"
|
|
434
|
-
@focus=${() => this.showHelp('email-input')}
|
|
435
|
-
></schmancy-input>
|
|
436
|
-
|
|
437
|
-
<schmancy-input
|
|
438
|
-
label="Password"
|
|
439
|
-
type="password"
|
|
440
|
-
helper-text="Must be at least 8 characters"
|
|
441
|
-
@focus=${() => this.showHelp('password-input')}
|
|
442
|
-
></schmancy-input>
|
|
443
|
-
</form>
|
|
444
|
-
</schmancy-content-drawer-main>
|
|
445
|
-
|
|
446
|
-
<schmancy-content-drawer-sheet width="350px">
|
|
447
|
-
<div class="help-panel">
|
|
448
|
-
<div class="help-header">
|
|
449
|
-
<schmancy-icon>help_outline</schmancy-icon>
|
|
450
|
-
<h3>Help & Tips</h3>
|
|
451
|
-
<schmancy-icon-button
|
|
452
|
-
icon="close"
|
|
453
|
-
@click=${() => this.drawer.close()}
|
|
454
|
-
></schmancy-icon-button>
|
|
455
|
-
</div>
|
|
456
|
-
|
|
457
|
-
${this.isLoading ? html`
|
|
458
|
-
<div class="loading">
|
|
459
|
-
<schmancy-skeleton-text lines="3"></schmancy-skeleton-text>
|
|
460
|
-
</div>
|
|
461
|
-
` : this.helpContent ? html`
|
|
462
|
-
<div class="help-content">
|
|
463
|
-
<h4>${this.helpContent.title}</h4>
|
|
464
|
-
<div class="content">${this.helpContent.content}</div>
|
|
465
|
-
|
|
466
|
-
${this.helpContent.tips ? html`
|
|
467
|
-
<div class="tips">
|
|
468
|
-
<h5>Tips:</h5>
|
|
469
|
-
<ul>
|
|
470
|
-
${this.helpContent.tips.map(tip => html`
|
|
471
|
-
<li>${tip}</li>
|
|
472
|
-
`)}
|
|
473
|
-
</ul>
|
|
474
|
-
</div>
|
|
475
|
-
` : ''}
|
|
476
|
-
|
|
477
|
-
${this.helpContent.related ? html`
|
|
478
|
-
<div class="related">
|
|
479
|
-
<h5>Related Topics:</h5>
|
|
480
|
-
<div class="chips">
|
|
481
|
-
${this.helpContent.related.map(topic => html`
|
|
482
|
-
<schmancy-chip
|
|
483
|
-
@click=${() => this.showHelp(topic.id)}
|
|
484
|
-
>${topic.label}</schmancy-chip>
|
|
485
|
-
`)}
|
|
486
|
-
</div>
|
|
487
|
-
</div>
|
|
488
|
-
` : ''}
|
|
489
|
-
</div>
|
|
490
|
-
` : html`
|
|
491
|
-
<div class="empty-state">
|
|
492
|
-
<schmancy-icon>info</schmancy-icon>
|
|
493
|
-
<p>Click on any field to see contextual help</p>
|
|
494
|
-
</div>
|
|
495
|
-
`}
|
|
496
|
-
</div>
|
|
497
|
-
</schmancy-content-drawer-sheet>
|
|
498
|
-
</schmancy-content-drawer>
|
|
499
|
-
`
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
async showHelp(context: string) {
|
|
503
|
-
if (this.currentContext === context && this.drawer.isOpen) return
|
|
504
|
-
|
|
505
|
-
this.currentContext = context
|
|
506
|
-
this.isLoading = true
|
|
507
|
-
this.drawer.open()
|
|
508
|
-
|
|
509
|
-
// Fetch AI-generated help content
|
|
510
|
-
try {
|
|
511
|
-
const response = await fetch(`/api/help/${context}`)
|
|
512
|
-
this.helpContent = await response.json()
|
|
513
|
-
} finally {
|
|
514
|
-
this.isLoading = false
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
## 📊 API Reference
|
|
521
|
-
|
|
522
|
-
### SchmancyContentDrawer
|
|
523
|
-
|
|
524
|
-
| Property | Type | Default | Description |
|
|
525
|
-
|----------|------|---------|-------------|
|
|
526
|
-
| `open` | `boolean` | `false` | Controls drawer open state |
|
|
527
|
-
| `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Drawer position |
|
|
528
|
-
| `variant` | `'standard' \| 'modal' \| 'persistent'` | `'standard'` | Drawer behavior variant |
|
|
529
|
-
| `breakpoint` | `string` | `'1024px'` | Breakpoint for responsive behavior |
|
|
530
|
-
| `backdrop` | `boolean` | `true` | Show backdrop in modal variant |
|
|
531
|
-
| `closeOnEscape` | `boolean` | `true` | Close drawer on Escape key |
|
|
532
|
-
| `closeOnBackdrop` | `boolean` | `true` | Close drawer on backdrop click |
|
|
533
|
-
| `swipeToOpen` | `boolean` | `true` | Enable swipe gesture to open |
|
|
534
|
-
| `swipeToClose` | `boolean` | `true` | Enable swipe gesture to close |
|
|
535
|
-
|
|
536
|
-
### SchmancyContentDrawerSheet
|
|
537
|
-
|
|
538
|
-
| Property | Type | Default | Description |
|
|
539
|
-
|----------|------|---------|-------------|
|
|
540
|
-
| `width` | `string` | `'256px'` | Width for left/right drawers |
|
|
541
|
-
| `height` | `string` | `'auto'` | Height for top/bottom drawers |
|
|
542
|
-
| `maxWidth` | `string` | `'100vw'` | Maximum width constraint |
|
|
543
|
-
| `maxHeight` | `string` | `'100vh'` | Maximum height constraint |
|
|
544
|
-
| `offset` | `string` | `'0'` | Offset from edge (for nested drawers) |
|
|
545
|
-
|
|
546
|
-
### Events
|
|
547
|
-
|
|
548
|
-
| Event | Detail | Description |
|
|
549
|
-
|-------|--------|-------------|
|
|
550
|
-
| `drawer-opened` | `void` | Fired when drawer opens |
|
|
551
|
-
| `drawer-closed` | `void` | Fired when drawer closes |
|
|
552
|
-
| `drawer-toggled` | `{ open: boolean }` | Fired when drawer toggles |
|
|
553
|
-
| `before-open` | `void` | Fired before opening animation |
|
|
554
|
-
| `before-close` | `void` | Fired before closing animation |
|
|
555
|
-
|
|
556
|
-
### Context API
|
|
557
|
-
|
|
558
|
-
```typescript
|
|
559
|
-
import { contentDrawerContext } from '@schmancy/content-drawer'
|
|
560
|
-
|
|
561
|
-
// Create drawer context
|
|
562
|
-
const drawer = contentDrawerContext.create('my-drawer')
|
|
563
|
-
|
|
564
|
-
// Control drawer
|
|
565
|
-
drawer.open()
|
|
566
|
-
drawer.close()
|
|
567
|
-
drawer.toggle()
|
|
568
|
-
|
|
569
|
-
// Check state
|
|
570
|
-
if (drawer.isOpen) {
|
|
571
|
-
// Drawer is open
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
// Subscribe to changes
|
|
575
|
-
drawer.state$.subscribe(state => {
|
|
576
|
-
console.log('Drawer state:', state)
|
|
577
|
-
})
|
|
578
|
-
|
|
579
|
-
// Set persistent mode
|
|
580
|
-
drawer.setPersistent(true)
|
|
581
|
-
|
|
582
|
-
// Lock drawer (prevent closing)
|
|
583
|
-
drawer.lock()
|
|
584
|
-
drawer.unlock()
|
|
585
|
-
```
|
|
586
|
-
|
|
587
|
-
## 🎨 Styling
|
|
588
|
-
|
|
589
|
-
### CSS Custom Properties
|
|
590
|
-
|
|
591
|
-
```css
|
|
592
|
-
schmancy-content-drawer {
|
|
593
|
-
/* Drawer styling */
|
|
594
|
-
--drawer-background: var(--md-sys-color-surface);
|
|
595
|
-
--drawer-text-color: var(--md-sys-color-on-surface);
|
|
596
|
-
--drawer-width: 256px;
|
|
597
|
-
--drawer-shadow: 0 8px 10px -5px rgba(0,0,0,0.2);
|
|
598
|
-
|
|
599
|
-
/* Animation */
|
|
600
|
-
--drawer-transition-duration: 250ms;
|
|
601
|
-
--drawer-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
602
|
-
|
|
603
|
-
/* Backdrop */
|
|
604
|
-
--backdrop-color: rgba(0, 0, 0, 0.5);
|
|
605
|
-
--backdrop-blur: 0px;
|
|
606
|
-
|
|
607
|
-
/* Z-index layers */
|
|
608
|
-
--drawer-z-index: 200;
|
|
609
|
-
--backdrop-z-index: 199;
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
/* Responsive breakpoints */
|
|
613
|
-
@media (min-width: 1024px) {
|
|
614
|
-
schmancy-content-drawer[variant="persistent"] {
|
|
615
|
-
--drawer-shadow: none;
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
```
|
|
619
|
-
|
|
620
|
-
### Custom Animations
|
|
621
|
-
|
|
622
|
-
```typescript
|
|
623
|
-
// Custom open animation
|
|
624
|
-
<schmancy-content-drawer
|
|
625
|
-
.openAnimation=${[
|
|
626
|
-
{ transform: 'translateX(-100%)' },
|
|
627
|
-
{ transform: 'translateX(0)' }
|
|
628
|
-
]}
|
|
629
|
-
.openAnimationOptions=${{
|
|
630
|
-
duration: 300,
|
|
631
|
-
easing: 'ease-out'
|
|
632
|
-
}}
|
|
633
|
-
>
|
|
634
|
-
|
|
635
|
-
// Custom close animation
|
|
636
|
-
<schmancy-content-drawer
|
|
637
|
-
.closeAnimation=${[
|
|
638
|
-
{ opacity: 1 },
|
|
639
|
-
{ opacity: 0 }
|
|
640
|
-
]}
|
|
641
|
-
>
|
|
642
|
-
```
|
|
643
|
-
|
|
644
|
-
## 🚀 Performance Optimization
|
|
645
|
-
|
|
646
|
-
### Lazy Loading Content
|
|
647
|
-
|
|
648
|
-
```typescript
|
|
649
|
-
@customElement('lazy-drawer')
|
|
650
|
-
export class LazyDrawer extends LitElement {
|
|
651
|
-
@state() drawerContent: TemplateResult | null = null
|
|
652
|
-
|
|
653
|
-
render() {
|
|
654
|
-
return html`
|
|
655
|
-
<schmancy-content-drawer
|
|
656
|
-
@before-open=${this.loadContent}
|
|
657
|
-
>
|
|
658
|
-
<schmancy-content-drawer-main>
|
|
659
|
-
<!-- Main content -->
|
|
660
|
-
</schmancy-content-drawer-main>
|
|
661
|
-
|
|
662
|
-
<schmancy-content-drawer-sheet>
|
|
663
|
-
${this.drawerContent || html`
|
|
664
|
-
<schmancy-circular-progress></schmancy-circular-progress>
|
|
665
|
-
`}
|
|
666
|
-
</schmancy-content-drawer-sheet>
|
|
667
|
-
</schmancy-content-drawer>
|
|
668
|
-
`
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
async loadContent() {
|
|
672
|
-
if (!this.drawerContent) {
|
|
673
|
-
// Lazy load content
|
|
674
|
-
const module = await import('./drawer-content.js')
|
|
675
|
-
this.drawerContent = module.renderContent()
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
```
|
|
680
|
-
|
|
681
|
-
### Virtual Scrolling
|
|
682
|
-
|
|
683
|
-
```typescript
|
|
684
|
-
// For long lists in drawers
|
|
685
|
-
<schmancy-content-drawer-sheet>
|
|
686
|
-
<schmancy-virtual-list
|
|
687
|
-
.items=${this.longList}
|
|
688
|
-
.renderItem=${(item) => html`
|
|
689
|
-
<schmancy-list-item>${item.name}</schmancy-list-item>
|
|
690
|
-
`}
|
|
691
|
-
></schmancy-virtual-list>
|
|
692
|
-
</schmancy-content-drawer-sheet>
|
|
693
|
-
```
|
|
694
|
-
|
|
695
|
-
## 🎯 Best Practices
|
|
696
|
-
|
|
697
|
-
1. **Mobile First**: Design drawer content for mobile screens first
|
|
698
|
-
2. **Accessibility**: Include proper ARIA labels and keyboard navigation
|
|
699
|
-
3. **Performance**: Lazy load heavy content and use virtual scrolling for lists
|
|
700
|
-
4. **Responsive**: Use persistent variant for desktop, modal for mobile
|
|
701
|
-
5. **Context**: Use drawer context for complex multi-drawer scenarios
|
|
702
|
-
6. **Testing**: Test swipe gestures on actual devices
|
|
703
|
-
|
|
704
|
-
## 🔗 Related Components
|
|
705
|
-
|
|
706
|
-
- [Sheet](../sheet) - Standalone bottom sheet component
|
|
707
|
-
- [Navigation Drawer](../nav-drawer) - Specialized navigation drawer
|
|
708
|
-
- [Dialog](../dialog) - Modal dialogs
|
|
709
|
-
- [Layout](../layout) - Layout utilities
|