@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
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
# Schmancy Autocomplete Component
|
|
2
|
-
|
|
3
|
-
A powerful, accessible autocomplete component with fuzzy search, multi-select support, and Gmail-style chip input display.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The `schmancy-autocomplete` component provides an intelligent dropdown search interface with:
|
|
8
|
-
- **Fuzzy search** with configurable similarity threshold
|
|
9
|
-
- **Multi-select mode** with inline chip display (Gmail-style)
|
|
10
|
-
- **Auto-select behavior** on blur for improved UX
|
|
11
|
-
- **Debounced filtering** for performance optimization
|
|
12
|
-
- **Form association** with native HTML form support
|
|
13
|
-
- **Complete keyboard navigation** and accessibility
|
|
14
|
-
- **TypeScript support** with proper typing
|
|
15
|
-
- **Reactive state management** with RxJS
|
|
16
|
-
|
|
17
|
-
## Installation
|
|
18
|
-
|
|
19
|
-
```typescript
|
|
20
|
-
import '@schmancy/autocomplete/autocomplete'
|
|
21
|
-
// or
|
|
22
|
-
import { SchmancyAutocomplete } from '@schmancy/autocomplete/autocomplete'
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Basic Usage
|
|
26
|
-
|
|
27
|
-
### Single Select with Filtering
|
|
28
|
-
|
|
29
|
-
```html
|
|
30
|
-
<schmancy-autocomplete
|
|
31
|
-
name="employee"
|
|
32
|
-
label="Select Employee"
|
|
33
|
-
placeholder="Type to search..."
|
|
34
|
-
required
|
|
35
|
-
>
|
|
36
|
-
<schmancy-option value="john-doe">John Doe</schmancy-option>
|
|
37
|
-
<schmancy-option value="jane-smith">Jane Smith</schmancy-option>
|
|
38
|
-
<schmancy-option value="bob-johnson">Bob Johnson</schmancy-option>
|
|
39
|
-
<schmancy-option value="alice-williams">Alice Williams</schmancy-option>
|
|
40
|
-
</schmancy-autocomplete>
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
// Setting value programmatically
|
|
45
|
-
const autocomplete = document.querySelector('schmancy-autocomplete')
|
|
46
|
-
autocomplete.value = 'john-doe'
|
|
47
|
-
|
|
48
|
-
// Getting value
|
|
49
|
-
console.log(autocomplete.value) // 'john-doe'
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Multi-Select Usage with Chips
|
|
53
|
-
|
|
54
|
-
### Using the `.values` Property (Recommended for Arrays)
|
|
55
|
-
|
|
56
|
-
The `.values` property provides a consistent API with `schmancy-select` for working with arrays in multi-select mode. Selected items are displayed as removable chips inline with the input field, similar to Gmail's recipient selection.
|
|
57
|
-
|
|
58
|
-
```html
|
|
59
|
-
<schmancy-autocomplete
|
|
60
|
-
multi
|
|
61
|
-
name="tags"
|
|
62
|
-
label="Add Tags"
|
|
63
|
-
placeholder="Type to add tags..."
|
|
64
|
-
similarityThreshold="0.2"
|
|
65
|
-
>
|
|
66
|
-
<schmancy-option value="javascript">JavaScript</schmancy-option>
|
|
67
|
-
<schmancy-option value="typescript">TypeScript</schmancy-option>
|
|
68
|
-
<schmancy-option value="react">React</schmancy-option>
|
|
69
|
-
<schmancy-option value="vue">Vue</schmancy-option>
|
|
70
|
-
<schmancy-option value="angular">Angular</schmancy-option>
|
|
71
|
-
<schmancy-option value="svelte">Svelte</schmancy-option>
|
|
72
|
-
</schmancy-autocomplete>
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
// Setting values using the .values property (RECOMMENDED)
|
|
77
|
-
const autocomplete = document.querySelector('schmancy-autocomplete')
|
|
78
|
-
autocomplete.values = ['javascript', 'typescript', 'react']
|
|
79
|
-
|
|
80
|
-
// Getting values as an array
|
|
81
|
-
console.log(autocomplete.values) // ['javascript', 'typescript', 'react']
|
|
82
|
-
|
|
83
|
-
// The .value property still works but returns comma-separated string
|
|
84
|
-
console.log(autocomplete.value) // 'javascript,typescript,react'
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Multi-Select Value Handling
|
|
88
|
-
|
|
89
|
-
The component provides two ways to work with multi-select values, consistent with `schmancy-select`:
|
|
90
|
-
|
|
91
|
-
1. **`.values` property (Recommended)**: Works directly with arrays
|
|
92
|
-
- Setter accepts: `string[]`
|
|
93
|
-
- Getter returns: `string[]`
|
|
94
|
-
- Cleaner API for array manipulation
|
|
95
|
-
|
|
96
|
-
2. **`.value` property**: Maintains backward compatibility
|
|
97
|
-
- Setter accepts: `string | string[]` (arrays are converted internally)
|
|
98
|
-
- Getter returns: comma-separated `string` for multi-select
|
|
99
|
-
- Useful for form submissions that expect string values
|
|
100
|
-
|
|
101
|
-
## Properties
|
|
102
|
-
|
|
103
|
-
| Property | Type | Default | Description |
|
|
104
|
-
|----------|------|---------|-------------|
|
|
105
|
-
| `name` | `string` | `''` | Form field name for submission |
|
|
106
|
-
| `value` | `string` | `''` | Current selected value(s). Returns comma-separated string for multi-select |
|
|
107
|
-
| `values` | `string[]` | `[]` | Array of selected values for multi-select mode (preferred for arrays) |
|
|
108
|
-
| `multi` | `boolean` | `false` | Enable multi-select mode with chip display |
|
|
109
|
-
| `required` | `boolean` | `false` | Make field required for form validation |
|
|
110
|
-
| `placeholder` | `string` | `''` | Placeholder text when no selection |
|
|
111
|
-
| `label` | `string` | `''` | Field label |
|
|
112
|
-
| `description` | `string` | `''` | Helper text for accessibility |
|
|
113
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size variant of the autocomplete |
|
|
114
|
-
| `autocomplete` | `string` | `'off'` | HTML autocomplete attribute |
|
|
115
|
-
| `debounceMs` | `number` | `200` | Debounce delay for filtering in milliseconds |
|
|
116
|
-
| `similarityThreshold` | `number` | `0.3` | Minimum similarity score (0-1) to show option |
|
|
117
|
-
| `maxHeight` | `string` | `'300px'` | Maximum height of the dropdown |
|
|
118
|
-
| `error` | `boolean` | `false` | Show error state |
|
|
119
|
-
| `validationMessage` | `string` | `''` | Custom validation message to display |
|
|
120
|
-
|
|
121
|
-
## Events
|
|
122
|
-
|
|
123
|
-
### SchmancyAutocompleteChangeEvent
|
|
124
|
-
|
|
125
|
-
The component dispatches a `change` event when the selection changes:
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
interface SchmancyAutocompleteChangeEvent extends CustomEvent {
|
|
129
|
-
detail: {
|
|
130
|
-
value: string | string[] // string for single, comma-separated string for multi
|
|
131
|
-
values?: string[] // Array of values for multi-select mode
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
```typescript
|
|
137
|
-
// Event handling
|
|
138
|
-
autocomplete.addEventListener('change', (e: SchmancyAutocompleteChangeEvent) => {
|
|
139
|
-
if (autocomplete.multi) {
|
|
140
|
-
console.log('Selected values:', e.detail.values) // string[]
|
|
141
|
-
console.log('As string:', e.detail.value) // comma-separated string
|
|
142
|
-
} else {
|
|
143
|
-
console.log('Selected value:', e.detail.value) // string
|
|
144
|
-
}
|
|
145
|
-
})
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
## Methods
|
|
149
|
-
|
|
150
|
-
### checkValidity()
|
|
151
|
-
Checks if the current value satisfies validation constraints.
|
|
152
|
-
|
|
153
|
-
```typescript
|
|
154
|
-
const isValid = autocomplete.checkValidity()
|
|
155
|
-
console.log(isValid) // true or false
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### reportValidity()
|
|
159
|
-
Checks validity and reports validation state to the user.
|
|
160
|
-
|
|
161
|
-
```typescript
|
|
162
|
-
// Will show validation error if invalid
|
|
163
|
-
const isValid = autocomplete.reportValidity()
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## Filtering and Search Behavior
|
|
167
|
-
|
|
168
|
-
### Fuzzy Search Algorithm
|
|
169
|
-
|
|
170
|
-
The component uses a sophisticated similarity algorithm to match user input against options:
|
|
171
|
-
|
|
172
|
-
- **Label prioritization**: Option labels are given slightly higher weight than values
|
|
173
|
-
- **Fuzzy matching**: Handles typos and partial matches intelligently
|
|
174
|
-
- **Relevance sorting**: Results are automatically sorted by match score
|
|
175
|
-
- **Configurable threshold**: Use `similarityThreshold` to control match sensitivity
|
|
176
|
-
|
|
177
|
-
```html
|
|
178
|
-
<!-- More permissive matching (shows more results) -->
|
|
179
|
-
<schmancy-autocomplete similarityThreshold="0.2">
|
|
180
|
-
<!-- options -->
|
|
181
|
-
</schmancy-autocomplete>
|
|
182
|
-
|
|
183
|
-
<!-- Stricter matching (shows fewer, more relevant results) -->
|
|
184
|
-
<schmancy-autocomplete similarityThreshold="0.5">
|
|
185
|
-
<!-- options -->
|
|
186
|
-
</schmancy-autocomplete>
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### Auto-Select Behavior
|
|
190
|
-
|
|
191
|
-
When the user types and then blurs the input (tabs or clicks away), the component will automatically select the best matching option if:
|
|
192
|
-
1. The component is in single-select mode
|
|
193
|
-
2. There is typed text in the input
|
|
194
|
-
3. At least one option meets the similarity threshold
|
|
195
|
-
4. The dropdown was open
|
|
196
|
-
|
|
197
|
-
This behavior improves UX by reducing the need for explicit selection when the user's intent is clear.
|
|
198
|
-
|
|
199
|
-
### Debounced Filtering
|
|
200
|
-
|
|
201
|
-
Filtering is debounced by default (200ms) to improve performance with large option lists:
|
|
202
|
-
|
|
203
|
-
```html
|
|
204
|
-
<!-- Faster response for smaller lists -->
|
|
205
|
-
<schmancy-autocomplete debounceMs="100">
|
|
206
|
-
<!-- options -->
|
|
207
|
-
</schmancy-autocomplete>
|
|
208
|
-
|
|
209
|
-
<!-- Slower response for better performance with huge lists -->
|
|
210
|
-
<schmancy-autocomplete debounceMs="500">
|
|
211
|
-
<!-- options -->
|
|
212
|
-
</schmancy-autocomplete>
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## Styling Options
|
|
216
|
-
|
|
217
|
-
### Size Variants
|
|
218
|
-
|
|
219
|
-
The component supports three size variants that affect the input height, padding, and font size:
|
|
220
|
-
|
|
221
|
-
```html
|
|
222
|
-
<!-- Small (40px height, 14px font) -->
|
|
223
|
-
<schmancy-autocomplete size="sm" label="Small">
|
|
224
|
-
<!-- options -->
|
|
225
|
-
</schmancy-autocomplete>
|
|
226
|
-
|
|
227
|
-
<!-- Medium (50px height, 16px font) - Default -->
|
|
228
|
-
<schmancy-autocomplete size="md" label="Medium">
|
|
229
|
-
<!-- options -->
|
|
230
|
-
</schmancy-autocomplete>
|
|
231
|
-
|
|
232
|
-
<!-- Large (60px height, 18px font) -->
|
|
233
|
-
<schmancy-autocomplete size="lg" label="Large">
|
|
234
|
-
<!-- options -->
|
|
235
|
-
</schmancy-autocomplete>
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### Multi-Select Chip Display
|
|
239
|
-
|
|
240
|
-
In multi-select mode, selected values are displayed as inline chips within the input field:
|
|
241
|
-
|
|
242
|
-
- **Gmail-style interface**: Chips appear inline with the text input
|
|
243
|
-
- **Backspace removal**: Press backspace with empty input to remove the last chip
|
|
244
|
-
- **Click to remove**: Each chip has a remove button
|
|
245
|
-
- **Responsive placeholder**: Changes to "Add more..." when items are selected
|
|
246
|
-
|
|
247
|
-
## Accessibility Features
|
|
248
|
-
|
|
249
|
-
### Keyboard Navigation
|
|
250
|
-
|
|
251
|
-
- **Tab**: Move focus to/from the autocomplete
|
|
252
|
-
- **Arrow Down**: Open dropdown or move to next option
|
|
253
|
-
- **Arrow Up**: Move to previous option
|
|
254
|
-
- **Home**: Move to first visible option
|
|
255
|
-
- **End**: Move to last visible option
|
|
256
|
-
- **Enter/Space**: Select focused option
|
|
257
|
-
- **Escape**: Close dropdown and restore previous value
|
|
258
|
-
- **Backspace** (multi-select): Remove last chip when input is empty
|
|
259
|
-
- **Type to search**: Real-time filtering as you type
|
|
260
|
-
|
|
261
|
-
### ARIA Attributes
|
|
262
|
-
|
|
263
|
-
The component automatically manages all necessary ARIA attributes:
|
|
264
|
-
- `role="combobox"` on the input
|
|
265
|
-
- `role="listbox"` on the dropdown
|
|
266
|
-
- `role="option"` on each option
|
|
267
|
-
- `aria-expanded` state management
|
|
268
|
-
- `aria-selected` on options
|
|
269
|
-
- `aria-multiselectable` for multi-select mode
|
|
270
|
-
- `aria-autocomplete="list"` for search behavior
|
|
271
|
-
- Live region announcements for screen readers
|
|
272
|
-
|
|
273
|
-
### Screen Reader Support
|
|
274
|
-
|
|
275
|
-
Full screen reader compatibility with proper announcements for:
|
|
276
|
-
- Number of available options after filtering
|
|
277
|
-
- Selected values and changes
|
|
278
|
-
- Chip additions and removals in multi-select
|
|
279
|
-
- "No results found" when filtering yields no matches
|
|
280
|
-
|
|
281
|
-
## TypeScript Usage
|
|
282
|
-
|
|
283
|
-
```typescript
|
|
284
|
-
import {
|
|
285
|
-
SchmancyAutocomplete,
|
|
286
|
-
SchmancyAutocompleteChangeEvent
|
|
287
|
-
} from '@schmancy/autocomplete/autocomplete'
|
|
288
|
-
|
|
289
|
-
// Get typed reference
|
|
290
|
-
const autocomplete = document.querySelector<SchmancyAutocomplete>('schmancy-autocomplete')
|
|
291
|
-
|
|
292
|
-
// Type-safe value setting for multi-select
|
|
293
|
-
if (autocomplete) {
|
|
294
|
-
// Using .values for arrays (recommended)
|
|
295
|
-
autocomplete.values = ['option1', 'option2']
|
|
296
|
-
|
|
297
|
-
// Or using .value (backward compatible)
|
|
298
|
-
autocomplete.value = ['option1', 'option2'] // Internally converted
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// Typed event handling
|
|
302
|
-
autocomplete?.addEventListener('change', (event: SchmancyAutocompleteChangeEvent) => {
|
|
303
|
-
if (autocomplete.multi && event.detail.values) {
|
|
304
|
-
const selectedValues: string[] = event.detail.values
|
|
305
|
-
console.log('Multiple selected:', selectedValues)
|
|
306
|
-
} else {
|
|
307
|
-
const selectedValue = event.detail.value as string
|
|
308
|
-
console.log('Single selected:', selectedValue)
|
|
309
|
-
}
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
// Form validation with types
|
|
313
|
-
const isValid: boolean = autocomplete?.checkValidity() ?? false
|
|
314
|
-
const reported: boolean = autocomplete?.reportValidity() ?? false
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
## Form Integration
|
|
318
|
-
|
|
319
|
-
The component fully supports HTML form integration:
|
|
320
|
-
|
|
321
|
-
```html
|
|
322
|
-
<form id="searchForm">
|
|
323
|
-
<schmancy-autocomplete
|
|
324
|
-
name="assignee"
|
|
325
|
-
label="Assign to"
|
|
326
|
-
required
|
|
327
|
-
error="${hasError}"
|
|
328
|
-
validationMessage="Please select an assignee"
|
|
329
|
-
>
|
|
330
|
-
<schmancy-option value="user1">Alice Johnson</schmancy-option>
|
|
331
|
-
<schmancy-option value="user2">Bob Smith</schmancy-option>
|
|
332
|
-
<schmancy-option value="user3">Charlie Brown</schmancy-option>
|
|
333
|
-
</schmancy-autocomplete>
|
|
334
|
-
|
|
335
|
-
<schmancy-autocomplete
|
|
336
|
-
multi
|
|
337
|
-
name="tags"
|
|
338
|
-
label="Tags"
|
|
339
|
-
placeholder="Add tags..."
|
|
340
|
-
>
|
|
341
|
-
<schmancy-option value="bug">Bug</schmancy-option>
|
|
342
|
-
<schmancy-option value="feature">Feature</schmancy-option>
|
|
343
|
-
<schmancy-option value="enhancement">Enhancement</schmancy-option>
|
|
344
|
-
</schmancy-autocomplete>
|
|
345
|
-
|
|
346
|
-
<button type="submit">Submit</button>
|
|
347
|
-
</form>
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
```typescript
|
|
351
|
-
// Form submission handling
|
|
352
|
-
document.getElementById('searchForm').addEventListener('submit', (e) => {
|
|
353
|
-
e.preventDefault()
|
|
354
|
-
const formData = new FormData(e.target)
|
|
355
|
-
|
|
356
|
-
console.log({
|
|
357
|
-
assignee: formData.get('assignee'),
|
|
358
|
-
tags: formData.get('tags')?.split(',') // Convert back to array
|
|
359
|
-
})
|
|
360
|
-
})
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
## Advanced Examples
|
|
364
|
-
|
|
365
|
-
### Dynamic Options with Filtering
|
|
366
|
-
|
|
367
|
-
```typescript
|
|
368
|
-
// Populate options dynamically from API
|
|
369
|
-
const autocomplete = document.querySelector<SchmancyAutocomplete>('schmancy-autocomplete')
|
|
370
|
-
|
|
371
|
-
async function loadUsers() {
|
|
372
|
-
const users = await fetch('/api/users').then(r => r.json())
|
|
373
|
-
|
|
374
|
-
// Clear existing options
|
|
375
|
-
autocomplete.innerHTML = ''
|
|
376
|
-
|
|
377
|
-
// Add new options
|
|
378
|
-
users.forEach(user => {
|
|
379
|
-
const option = document.createElement('schmancy-option')
|
|
380
|
-
option.value = user.id
|
|
381
|
-
option.textContent = user.name
|
|
382
|
-
option.setAttribute('label', user.name) // For better search matching
|
|
383
|
-
autocomplete.appendChild(option)
|
|
384
|
-
})
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// Configure for optimal search experience
|
|
388
|
-
autocomplete.similarityThreshold = 0.25 // More permissive for names
|
|
389
|
-
autocomplete.debounceMs = 150 // Faster response
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### Email Recipient Selection (Gmail-style)
|
|
393
|
-
|
|
394
|
-
```html
|
|
395
|
-
<schmancy-autocomplete
|
|
396
|
-
multi
|
|
397
|
-
name="recipients"
|
|
398
|
-
label="To"
|
|
399
|
-
placeholder="Type email or name..."
|
|
400
|
-
similarityThreshold="0.2"
|
|
401
|
-
size="lg"
|
|
402
|
-
>
|
|
403
|
-
<schmancy-option value="john@example.com" label="John Doe">
|
|
404
|
-
John Doe <john@example.com>
|
|
405
|
-
</schmancy-option>
|
|
406
|
-
<schmancy-option value="jane@example.com" label="Jane Smith">
|
|
407
|
-
Jane Smith <jane@example.com>
|
|
408
|
-
</schmancy-option>
|
|
409
|
-
<schmancy-option value="team@example.com" label="Team Mailing List">
|
|
410
|
-
Team Mailing List <team@example.com>
|
|
411
|
-
</schmancy-option>
|
|
412
|
-
</schmancy-autocomplete>
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
### Custom Validation
|
|
416
|
-
|
|
417
|
-
```typescript
|
|
418
|
-
const autocomplete = document.querySelector<SchmancyAutocomplete>('schmancy-autocomplete')
|
|
419
|
-
|
|
420
|
-
// Multi-select validation
|
|
421
|
-
autocomplete?.addEventListener('change', (e: SchmancyAutocompleteChangeEvent) => {
|
|
422
|
-
if (autocomplete.multi && e.detail.values) {
|
|
423
|
-
const values = e.detail.values
|
|
424
|
-
|
|
425
|
-
if (values.length < 2) {
|
|
426
|
-
autocomplete.error = true
|
|
427
|
-
autocomplete.validationMessage = 'Please select at least 2 items'
|
|
428
|
-
} else if (values.length > 10) {
|
|
429
|
-
autocomplete.error = true
|
|
430
|
-
autocomplete.validationMessage = 'Maximum 10 items allowed'
|
|
431
|
-
} else {
|
|
432
|
-
autocomplete.error = false
|
|
433
|
-
autocomplete.validationMessage = ''
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
})
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
## Performance Considerations
|
|
440
|
-
|
|
441
|
-
### Large Option Lists
|
|
442
|
-
|
|
443
|
-
For lists with hundreds or thousands of options:
|
|
444
|
-
|
|
445
|
-
1. **Increase debounce delay**: `debounceMs="300"` or higher
|
|
446
|
-
2. **Adjust similarity threshold**: Higher values (0.4-0.5) show fewer results
|
|
447
|
-
3. **Consider lazy loading**: Load options on-demand
|
|
448
|
-
4. **Use option labels**: Improves search accuracy
|
|
449
|
-
|
|
450
|
-
```html
|
|
451
|
-
<!-- Optimized for large lists -->
|
|
452
|
-
<schmancy-autocomplete
|
|
453
|
-
debounceMs="400"
|
|
454
|
-
similarityThreshold="0.4"
|
|
455
|
-
maxHeight="400px"
|
|
456
|
-
>
|
|
457
|
-
<!-- Many options -->
|
|
458
|
-
</schmancy-autocomplete>
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
### Memory Management
|
|
462
|
-
|
|
463
|
-
The component automatically:
|
|
464
|
-
- Cleans up event listeners on disconnect
|
|
465
|
-
- Unsubscribes from RxJS observables
|
|
466
|
-
- Manages DOM references efficiently
|
|
467
|
-
- Debounces expensive operations
|
|
468
|
-
|
|
469
|
-
## Browser Support
|
|
470
|
-
|
|
471
|
-
The component uses modern web standards and requires browsers that support:
|
|
472
|
-
- Custom Elements v1
|
|
473
|
-
- Shadow DOM v1
|
|
474
|
-
- ES2015+
|
|
475
|
-
- CSS Custom Properties
|
|
476
|
-
- CSS Flexbox
|
|
477
|
-
|
|
478
|
-
For older browsers, consider using appropriate polyfills.
|
|
479
|
-
|
|
480
|
-
## Related Components
|
|
481
|
-
|
|
482
|
-
- `schmancy-option` - Option component for use within autocomplete
|
|
483
|
-
- `schmancy-input-chip` - Chip component used in multi-select mode
|
|
484
|
-
- `schmancy-select` - Standard select dropdown without search
|
|
485
|
-
- `schmancy-input` - Text input component with validation
|