@mhmo91/schmancy 0.9.27 → 0.10.1
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/custom-elements.json +987 -2259
- package/dist/active-host-0of-L858.cjs +1 -0
- package/dist/active-host-0of-L858.cjs.map +1 -0
- package/dist/active-host-D-a1X-nq.js +57 -0
- package/dist/active-host-D-a1X-nq.js.map +1 -0
- package/dist/agent/{flow-CvG1fLW5.js.map → flow-CaPi2G8y.js.map} +1 -1
- package/dist/agent/{rolldown-runtime-BIIoCavz.js → rolldown-runtime-DsMetpgY.js} +2 -9
- package/dist/agent/schmancy.agent.js +6465 -7794
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +262 -1462
- package/dist/agent/{vendor-highlight-Dow87ZL_.js → vendor-highlight-CHJZQQB7.js} +85 -90
- package/dist/agent/{vendor-highlight-Dow87ZL_.js.map → vendor-highlight-CHJZQQB7.js.map} +1 -1
- package/dist/agent/{vendor-jsqr-Bl4iAtKC.js → vendor-jsqr-r7GNh4P3.js} +1 -1
- package/dist/agent/{vendor-jsqr-Bl4iAtKC.js.map → vendor-jsqr-r7GNh4P3.js.map} +1 -1
- package/dist/agent/{vendor-material-color-DcL7ZPxx.js.map → vendor-material-color-Be96dpGE.js.map} +1 -1
- package/dist/{animation-hXFClrIn.js.map → animation-BK-8BwY8.js.map} +1 -1
- package/dist/{animation-CQRdLgzX.cjs.map → animation-CO_Csq84.cjs.map} +1 -1
- package/dist/{area-BGBCMC79.js → area-C_J4qxKO.js} +20 -15
- package/dist/area-C_J4qxKO.js.map +1 -0
- package/dist/area-ISC8Mdkh.cjs +12 -0
- package/dist/area-ISC8Mdkh.cjs.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +2 -2
- package/dist/{audio-Dvr-RBzE.cjs → audio-DZN8HsSS.cjs} +1 -1
- package/dist/{audio-Dvr-RBzE.cjs.map → audio-DZN8HsSS.cjs.map} +1 -1
- package/dist/{audio-ql6nvY0y.js → audio-Tmre4WyL.js} +1 -1
- package/dist/{audio-ql6nvY0y.js.map → audio-Tmre4WyL.js.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-BDF85W0J.cjs +115 -0
- package/dist/autocomplete-BDF85W0J.cjs.map +1 -0
- package/dist/{autocomplete-C2P0Soht.js → autocomplete-CM8VqW9S.js} +29 -26
- package/dist/autocomplete-CM8VqW9S.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +7 -0
- package/dist/avatar.cjs.map +1 -0
- package/dist/avatar.js +87 -0
- package/dist/avatar.js.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/boat-CpXe-Qto.cjs +80 -0
- package/dist/boat-CpXe-Qto.cjs.map +1 -0
- package/dist/{boat-DXZ0k7oa.js → boat-DxYNK4xT.js} +43 -54
- package/dist/boat-DxYNK4xT.js.map +1 -0
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +4 -4
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +16 -11
- package/dist/breadcrumb.js.map +1 -1
- package/dist/{busy-iRjq6Nvd.js → busy-CP-gRfAP.js} +14 -9
- package/dist/busy-CP-gRfAP.js.map +1 -0
- package/dist/{busy-DGYhpTnO.cjs → busy-Dma4gtnz.cjs} +4 -4
- package/dist/busy-Dma4gtnz.cjs.map +1 -0
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +24 -24
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +42 -37
- package/dist/button.js.map +1 -1
- package/dist/{card-wUTjx0EC.js → card-Bv--HeGO.js} +41 -30
- package/dist/card-Bv--HeGO.js.map +1 -0
- package/dist/{card-DjYnCckw.cjs → card-ClroODSK.cjs} +6 -6
- package/dist/card-ClroODSK.cjs.map +1 -0
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +5 -5
- package/dist/charts.cjs.map +1 -1
- package/dist/charts.js +21 -16
- package/dist/charts.js.map +1 -1
- package/dist/{checkbox-VBSenxgb.js → checkbox-1gQOOcja.js} +86 -82
- package/dist/checkbox-1gQOOcja.js.map +1 -0
- package/dist/checkbox-DvTZXN1Y.cjs +39 -0
- package/dist/checkbox-DvTZXN1Y.cjs.map +1 -0
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-D6ptH5re.cjs → chips-Bw7FNDpX.cjs} +19 -19
- package/dist/chips-Bw7FNDpX.cjs.map +1 -0
- package/dist/{chips-BDS9lkPa.js → chips-wkfKzf_e.js} +146 -136
- package/dist/chips-wkfKzf_e.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-BzRmBZzz.cjs → code-highlight-CJzuds4c.cjs} +15 -15
- package/dist/code-highlight-CJzuds4c.cjs.map +1 -0
- package/dist/{code-highlight-Bi91XHJN.js → code-highlight-CcdCFMrn.js} +37 -40
- package/dist/code-highlight-CcdCFMrn.js.map +1 -0
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/connectivity.cjs +2 -2
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +10 -7
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +2 -2
- package/dist/context-Bdu1xt0W.js +3 -0
- package/dist/{context-BerzpUhI.js.map → context-Bdu1xt0W.js.map} +1 -1
- package/dist/context-daN5G6HS.cjs +1 -0
- package/dist/{context-C6dHUHhi.cjs.map → context-daN5G6HS.cjs.map} +1 -1
- package/dist/{cursor-glow-BydlDInj.js → cursor-glow-Ah7VXSj7.js} +1 -1
- package/dist/{cursor-glow-BydlDInj.js.map → cursor-glow-Ah7VXSj7.js.map} +1 -1
- package/dist/{cursor-glow-Duw9jHmh.cjs → cursor-glow-Bulq-38P.cjs} +1 -1
- package/dist/{cursor-glow-Duw9jHmh.cjs.map → cursor-glow-Bulq-38P.cjs.map} +1 -1
- package/dist/{date-range-ClTMg1AB.js → date-range-BDHz_Olm.js} +16 -17
- package/dist/date-range-BDHz_Olm.js.map +1 -0
- package/dist/date-range-BsPW60vp.cjs +131 -0
- package/dist/date-range-BsPW60vp.cjs.map +1 -0
- package/dist/{date-range-inline-CpKG6qt2.js → date-range-inline-1NmZE_Xr.js} +5 -5
- package/dist/{date-range-inline-CpKG6qt2.js.map → date-range-inline-1NmZE_Xr.js.map} +1 -1
- package/dist/date-range-inline-BsjNNGFR.cjs +43 -0
- package/dist/{date-range-inline-B9Dp2z6C.cjs.map → date-range-inline-BsjNNGFR.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.cjs +9 -1
- package/dist/delay.cjs.map +1 -0
- package/dist/delay.js +77 -2
- package/dist/delay.js.map +1 -0
- package/dist/{details-CPjlqQD4.js → details-BEp2s2ca.js} +19 -18
- package/dist/details-BEp2s2ca.js.map +1 -0
- package/dist/{details-Cz9ok9si.cjs → details-BtUNqzn8.cjs} +9 -9
- package/dist/details-BtUNqzn8.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-service-DH-tjPuE.js → dialog-service-DI9PPy4H.js} +2 -2
- package/dist/dialog-service-DI9PPy4H.js.map +1 -0
- package/dist/{dialog-service-CzDO08Gy.cjs → dialog-service-DJd5L0f5.cjs} +1 -1
- package/dist/dialog-service-DJd5L0f5.cjs.map +1 -0
- package/dist/dialog.cjs +2 -2
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +13 -14
- package/dist/dialog.js.map +1 -1
- package/dist/directives.cjs +2 -11
- package/dist/directives.cjs.map +1 -1
- package/dist/directives.js +141 -227
- package/dist/directives.js.map +1 -1
- package/dist/discovery.cjs +1 -1
- package/dist/discovery.cjs.map +1 -1
- package/dist/discovery.js +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/{divider-CILo3_vi.cjs → divider-CpNT11Iy.cjs} +3 -3
- package/dist/divider-CpNT11Iy.cjs.map +1 -0
- package/dist/{divider-ghgyw5CU.js → divider-VxpjZ8hk.js} +11 -9
- package/dist/divider-VxpjZ8hk.js.map +1 -0
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +29 -28
- package/dist/dropdown.js.map +1 -1
- package/dist/expand-05azMpho.cjs +141 -0
- package/dist/expand-05azMpho.cjs.map +1 -0
- package/dist/{expand-CbjBr_Ds.js → expand-CRUl3-mN.js} +24 -20
- package/dist/expand-CRUl3-mN.js.map +1 -0
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-BZeZOMBI.cjs → extra-CyERULfm.cjs} +6 -6
- package/dist/extra-CyERULfm.cjs.map +1 -0
- package/dist/{extra-DK9MQtPJ.js → extra-aNV1fO6W.js} +19 -14
- package/dist/extra-aNV1fO6W.js.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/float-DRET9mVZ.cjs +1 -0
- package/dist/{float-CuZ8LOgB.cjs.map → float-DRET9mVZ.cjs.map} +1 -1
- package/dist/{float-BfCvGeY9.js → float-N3qhNET_.js} +2 -2
- package/dist/{float-BfCvGeY9.js.map → float-N3qhNET_.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-rCZqoAoK.js → form-BtwOBMZ9.js} +1 -1
- package/dist/form-BtwOBMZ9.js.map +1 -0
- package/dist/{form-wI58M85H.cjs → form-CSJp687X.cjs} +1 -1
- package/dist/form-CSJp687X.cjs.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/handover/claude-design-brief.md +19 -54
- package/dist/handover/claude-design-setup.md +57 -0
- package/dist/{hashContent-B2IntJQf.js.map → hashContent-1ARKIsx9.js.map} +1 -1
- package/dist/{hashContent-CahnEuut.cjs.map → hashContent-Bp5S6T4U.cjs.map} +1 -1
- package/dist/{icons-Drq4kKy2.js → icons-BBJqwT_B.js} +27 -24
- package/dist/icons-BBJqwT_B.js.map +1 -0
- package/dist/icons-CNixJ6kL.cjs +52 -0
- package/dist/icons-CNixJ6kL.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BmyHW8km.js → iframe-DoN_toqE.js} +17 -11
- package/dist/iframe-DoN_toqE.js.map +1 -0
- package/dist/iframe-g-4DjAD7.cjs +24 -0
- package/dist/iframe-g-4DjAD7.cjs.map +1 -0
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +77 -77
- package/dist/{input-Bc3bVISm.js → input-ClnkMJgh.js} +30 -30
- package/dist/input-ClnkMJgh.js.map +1 -0
- package/dist/{input-BGNZlfL8.cjs → input-CwFslLcF.cjs} +14 -14
- package/dist/input-CwFslLcF.cjs.map +1 -0
- package/dist/{input-chip-DN-cwf11.cjs → input-chip-DMXRT7bK.cjs} +2 -2
- package/dist/input-chip-DMXRT7bK.cjs.map +1 -0
- package/dist/{input-chip-BQrjpjaQ.js → input-chip-DwSyFv1x.js} +7 -4
- package/dist/input-chip-DwSyFv1x.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +7 -5
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +2 -2
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +9 -7
- package/dist/kbd.js.map +1 -1
- package/dist/{layout-fjM1DWlF.js → layout-BghHmee6.js} +1 -1
- package/dist/{layout-fjM1DWlF.js.map → layout-BghHmee6.js.map} +1 -1
- package/dist/{layout-CTfRXQoz.cjs → layout-VmxXuGGp.cjs} +1 -1
- package/dist/{layout-CTfRXQoz.cjs.map → layout-VmxXuGGp.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -3
- package/dist/{lazy-D6R5N5v4.js.map → lazy-B0ia54tT.js.map} +1 -1
- package/dist/{lazy-BDNnH_r7.cjs.map → lazy-Dq9mRRjT.cjs.map} +1 -1
- package/dist/{lightbox-CY52Z_ig.js → lightbox-IleIcq19.js} +13 -12
- package/dist/lightbox-IleIcq19.js.map +1 -0
- package/dist/lightbox-m5FLmYlv.cjs +202 -0
- package/dist/lightbox-m5FLmYlv.cjs.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-D7wUxu1C.js → list-BlXJlm16.js} +26 -21
- package/dist/list-BlXJlm16.js.map +1 -0
- package/dist/list-C-b9p1yi.cjs +40 -0
- package/dist/list-C-b9p1yi.cjs.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{magnetic-CVXEkYTA.cjs → magnetic-BH0TsofV.cjs} +1 -1
- package/dist/{magnetic-CVXEkYTA.cjs.map → magnetic-BH0TsofV.cjs.map} +1 -1
- package/dist/{magnetic-BhXebqF3.js → magnetic-BZGFxAWG.js} +2 -2
- package/dist/{magnetic-BhXebqF3.js.map → magnetic-BZGFxAWG.js.map} +1 -1
- package/dist/{mailbox-DLiBGJhY.cjs → mailbox-B0hZLpF1.cjs} +64 -66
- package/dist/mailbox-B0hZLpF1.cjs.map +1 -0
- package/dist/{mailbox--EN-JhjV.js → mailbox-DAmejcKa.js} +137 -126
- package/dist/mailbox-DAmejcKa.js.map +1 -0
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-B0S_q3ma.js → map-BoIu47qU.js} +11 -9
- package/dist/map-BoIu47qU.js.map +1 -0
- package/dist/map-CZ0816EI.cjs +80 -0
- package/dist/map-CZ0816EI.cjs.map +1 -0
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-3edZGQ1x.cjs → menu-BFHBnp5M.cjs} +5 -5
- package/dist/menu-BFHBnp5M.cjs.map +1 -0
- package/dist/{menu-COeFpb6n.js → menu-BV9_8ys8.js} +15 -10
- package/dist/menu-BV9_8ys8.js.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-BIXF7xkF.cjs +298 -0
- package/dist/mixins-BIXF7xkF.cjs.map +1 -0
- package/dist/mixins-CL1krSOE.js +627 -0
- package/dist/mixins-CL1krSOE.js.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -87
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +2 -2
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +3 -3
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +15 -16
- package/dist/navigation-rail.js.map +1 -1
- package/dist/notification-CigTy3ia.cjs +23 -0
- package/dist/notification-CigTy3ia.cjs.map +1 -0
- package/dist/{notification-CC-TFN5v.js → notification-Dzm6zWxX.js} +40 -38
- package/dist/notification-Dzm6zWxX.js.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/option-BfvzzkzM.cjs +43 -0
- package/dist/option-BfvzzkzM.cjs.map +1 -0
- package/dist/{option-BwAF4nAw.js → option-Dyb0Q45u.js} +9 -7
- package/dist/option-Dyb0Q45u.js.map +1 -0
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-7bs4ZNnh.cjs → overlay-stack-BprhAE9a.cjs} +1 -1
- package/dist/{overlay-stack-7bs4ZNnh.cjs.map → overlay-stack-BprhAE9a.cjs.map} +1 -1
- package/dist/{overlay-stack-DXPYHPhk.js → overlay-stack-CAQno0CK.js} +1 -1
- package/dist/{overlay-stack-DXPYHPhk.js.map → overlay-stack-CAQno0CK.js.map} +1 -1
- package/dist/overlay.cjs +43 -45
- package/dist/overlay.cjs.map +1 -1
- package/dist/overlay.js +684 -268
- package/dist/overlay.js.map +1 -1
- package/dist/page.cjs +3 -3
- package/dist/page.cjs.map +1 -1
- package/dist/page.js +15 -13
- package/dist/page.js.map +1 -1
- package/dist/payment-card-form-CQ6sLlrh.cjs +73 -0
- package/dist/{components-DkmEgyAc.cjs.map → payment-card-form-CQ6sLlrh.cjs.map} +1 -1
- package/dist/{components-DZgJWHdZ.js → payment-card-form-D9N2Q0wM.js} +21 -22
- package/dist/{components-DZgJWHdZ.js.map → payment-card-form-D9N2Q0wM.js.map} +1 -1
- package/dist/payment-card-form.cjs +1 -0
- package/dist/payment-card-form.js +2 -0
- package/dist/{progress-Yz6EMNSu.cjs → progress-Dyri7dc2.cjs} +3 -3
- package/dist/progress-Dyri7dc2.cjs.map +1 -0
- package/dist/{progress-Bk_Q1Shy.js → progress-LPwPfzBi.js} +16 -13
- package/dist/progress-LPwPfzBi.js.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/qr-scanner.cjs +5 -5
- package/dist/qr-scanner.cjs.map +1 -1
- package/dist/qr-scanner.js +14 -15
- package/dist/qr-scanner.js.map +1 -1
- package/dist/radio-group-DK-T6jGy.cjs +40 -0
- package/dist/radio-group-DK-T6jGy.cjs.map +1 -0
- package/dist/{radio-group-BcdcjLNC.js → radio-group-DqP886F-.js} +14 -12
- package/dist/radio-group-DqP886F-.js.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +2 -2
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +9 -7
- package/dist/range.js.map +1 -1
- package/dist/{reduced-motion-BZTLqAyl.js.map → reduced-motion-D-L12p7G.js.map} +1 -1
- package/dist/{reduced-motion-9RjNnhIg.cjs.map → reduced-motion-Ds-HjMzn.cjs.map} +1 -1
- package/dist/{rxjs-utils-DJbZRjp3.cjs.map → rxjs-utils-Csnks202.cjs.map} +1 -1
- package/dist/{rxjs-utils-CKTnEKUH.js.map → rxjs-utils-d-ivVN84.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-DXQv0ejL.js → scroll-BD82ANjm.js} +9 -7
- package/dist/scroll-BD82ANjm.js.map +1 -0
- package/dist/scroll-yfNU0zNO.cjs +26 -0
- package/dist/scroll-yfNU0zNO.cjs.map +1 -0
- package/dist/search-BLCRsxIC.cjs +1 -0
- package/dist/{search-CwMav5QB.cjs.map → search-BLCRsxIC.cjs.map} +1 -1
- package/dist/{search-CvUZRLF1.js → search-BTz7-Rev.js} +1 -1
- package/dist/{search-CvUZRLF1.js.map → search-BTz7-Rev.js.map} +1 -1
- package/dist/{select-BV4lK2zy.cjs → select-BR3r3SZe.cjs} +6 -6
- package/dist/select-BR3r3SZe.cjs.map +1 -0
- package/dist/{select-DKyGWDsG.js → select-GONAphZI.js} +23 -20
- package/dist/select-GONAphZI.js.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-C3TLKItO.js → sheet-C4sAGqTf.js} +22 -20
- package/dist/sheet-C4sAGqTf.js.map +1 -0
- package/dist/sheet-D9pZMrzs.cjs +35 -0
- package/dist/sheet-D9pZMrzs.cjs.map +1 -0
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Dlv20Zfc.js → sheet.service-B7h_-e-q.js} +3 -3
- package/dist/{sheet.service-Dlv20Zfc.js.map → sheet.service-B7h_-e-q.js.map} +1 -1
- package/dist/sheet.service-C1J0-i4d.cjs +1 -0
- package/dist/{sheet.service-RcDBwHmv.cjs.map → sheet.service-C1J0-i4d.cjs.map} +1 -1
- package/dist/skeleton.cjs +2 -2
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +9 -7
- package/dist/skeleton.js.map +1 -1
- package/dist/skills/INDEX.md +1 -1
- package/dist/skills/SKILL.md +17 -5
- package/dist/skills/mixins.md +78 -20
- package/dist/skills/schmancy/INDEX.md +1 -1
- package/dist/skills/schmancy/SKILL.md +17 -5
- package/dist/skills/schmancy/mixins.md +78 -20
- package/dist/skills/schmancy/state.md +501 -0
- package/dist/skills/schmancy/theme.md +15 -0
- package/dist/skills/schmancy/timeline-tile.md +95 -0
- package/dist/skills/state.md +501 -0
- package/dist/skills/theme.md +15 -0
- package/dist/skills/timeline-tile.md +95 -0
- package/dist/slider.cjs +5 -5
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +18 -13
- package/dist/slider.js.map +1 -1
- package/dist/{sound.service-DWZe6swU.js → sound.service-Ba_HNBLD.js} +3 -3
- package/dist/sound.service-Ba_HNBLD.js.map +1 -0
- package/dist/sound.service-CvdB2yUJ.cjs +1 -0
- package/dist/sound.service-CvdB2yUJ.cjs.map +1 -0
- package/dist/{splash-screen-DbI5RgBf.js → splash-screen-BGMZmQRT.js} +12 -9
- package/dist/splash-screen-BGMZmQRT.js.map +1 -0
- package/dist/splash-screen-DqULOTZ0.cjs +41 -0
- package/dist/splash-screen-DqULOTZ0.cjs.map +1 -0
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-00DfxCJq.js → src-CHM4hrEr.js} +299 -351
- package/dist/src-CHM4hrEr.js.map +1 -0
- package/dist/src-DzFcGdcn.cjs +263 -0
- package/dist/src-DzFcGdcn.cjs.map +1 -0
- package/dist/state-BAW3C11I.cjs +1 -0
- package/dist/state-BAW3C11I.cjs.map +1 -0
- package/dist/state-ClRXrqDA.js +846 -0
- package/dist/state-ClRXrqDA.js.map +1 -0
- package/dist/state.cjs +1 -0
- package/dist/state.js +3 -0
- package/dist/steps.cjs +10 -10
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +29 -24
- package/dist/steps.js.map +1 -1
- package/dist/surface-BHJgIDz9.js +24 -0
- package/dist/surface-BHJgIDz9.js.map +1 -0
- package/dist/surface-DW78bc8W.cjs +7 -0
- package/dist/surface-DW78bc8W.cjs.map +1 -0
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +2 -2
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +7 -5
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +72 -1
- package/dist/table.cjs.map +1 -0
- package/dist/table.js +174 -2
- package/dist/table.js.map +1 -0
- package/dist/{tabs-Ce55RbwF.js → tabs-BCRVyQU1.js} +22 -22
- package/dist/tabs-BCRVyQU1.js.map +1 -0
- package/dist/tabs-EIEhkEUb.cjs +31 -0
- package/dist/tabs-EIEhkEUb.cjs.map +1 -0
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +2 -2
- package/dist/{textarea-DjN1D9u0.js → textarea-DApOhSAL.js} +30 -28
- package/dist/textarea-DApOhSAL.js.map +1 -0
- package/dist/textarea-zxNlRLVm.cjs +39 -0
- package/dist/textarea-zxNlRLVm.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-pbxlt72h.js → theme-BCUjQH6-.js} +45 -41
- package/dist/{theme-pbxlt72h.js.map → theme-BCUjQH6-.js.map} +1 -1
- package/dist/theme-Z43TLE61.cjs +181 -0
- package/dist/{theme-B-IJ2r7Q.cjs.map → theme-Z43TLE61.cjs.map} +1 -1
- package/dist/theme-button-Czsdp3o1.cjs +8 -0
- package/dist/theme-button-Czsdp3o1.cjs.map +1 -0
- package/dist/{theme-button-CEMeAUOL.js → theme-button-DdSbcivT.js} +3 -4
- package/dist/theme-button-DdSbcivT.js.map +1 -0
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.events-NuihzD_p.js.map → theme.events-Cv7N4Toe.js.map} +1 -1
- package/dist/{theme.events-DakXxZeP.cjs.map → theme.events-DM4H5F2d.cjs.map} +1 -1
- package/dist/{theme.interface-DTwkuAKJ.cjs.map → theme.interface-D9l33b-M.cjs.map} +1 -1
- package/dist/{theme.interface-Buged9Cg.js.map → theme.interface-DnVNre4O.js.map} +1 -1
- package/dist/theme.js +5 -5
- package/dist/{theme.service-cOfPrtfe.js → theme.service-9clsqyee.js} +4 -4
- package/dist/theme.service-9clsqyee.js.map +1 -0
- package/dist/theme.service-CP71ojp6.cjs +1 -0
- package/dist/theme.service-CP71ojp6.cjs.map +1 -0
- package/dist/timeline.cjs +277 -0
- package/dist/timeline.cjs.map +1 -0
- package/dist/timeline.js +326 -0
- package/dist/timeline.js.map +1 -0
- package/dist/tree.cjs +2 -2
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +15 -13
- package/dist/tree.js.map +1 -1
- package/dist/typewriter.cjs +10 -123
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js +90 -212
- package/dist/typewriter.js.map +1 -1
- package/dist/typography.cjs +3 -3
- package/dist/typography.cjs.map +1 -1
- package/dist/typography.js +18 -112
- package/dist/typography.js.map +1 -1
- package/dist/utils-Cr-YO4Np.cjs +1 -0
- package/dist/utils-Cr-YO4Np.cjs.map +1 -0
- package/dist/{utils-Bp2jhyZc.js → utils-hp-DnFf5.js} +16 -6
- package/dist/utils-hp-DnFf5.js.map +1 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +4 -5
- package/dist/visually-hidden.cjs +2 -2
- package/dist/visually-hidden.cjs.map +1 -1
- package/dist/visually-hidden.js +7 -5
- package/dist/visually-hidden.js.map +1 -1
- package/dist/window-DTgKAQgz.cjs +59 -0
- package/dist/window-DTgKAQgz.cjs.map +1 -0
- package/dist/{window-CrjZdf7Y.js → window-moDKyGLZ.js} +28 -30
- package/dist/window-moDKyGLZ.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +14 -2
- package/plugins/vite-plugin-schmancy-auto-import.ts +143 -0
- package/plugins/vite-plugin-schmancy-manifest.ts +438 -0
- package/skills/schmancy/INDEX.md +1 -1
- package/skills/schmancy/SKILL.md +17 -5
- package/skills/schmancy/mixins.md +78 -20
- package/skills/schmancy/state.md +501 -0
- package/skills/schmancy/theme.md +15 -0
- package/skills/schmancy/timeline-tile.md +95 -0
- package/src/agent/agent-bundle.test.ts +0 -49
- package/src/agent/agent-entry.ts +4 -3
- package/src/agent/helpers.ts +1 -95
- package/src/agent/schmancy-skill.ts +2 -5
- package/src/agent/virtual-manifest.d.ts +1 -12
- package/src/area/area.component.ts +7 -19
- package/src/area/area.service.test.ts +4 -5
- package/src/area/area.service.ts +4 -3
- package/src/area/route.component.ts +17 -4
- package/src/area/utils.ts +3 -2
- package/src/audio/sound.service.ts +7 -11
- package/src/autocomplete/autocomplete.ts +18 -21
- package/src/{avatar.ts → avatar/avatar.ts} +2 -2
- package/src/avatar/index.ts +1 -0
- package/src/badge/badge.ts +4 -3
- package/src/boat/boat.ts +28 -36
- package/src/breadcrumb/breadcrumb.ts +11 -19
- package/src/busy/busy.ts +4 -3
- package/src/busy/spinner.ts +4 -3
- package/src/button/button.ts +6 -11
- package/src/button/icon-button.ts +8 -12
- package/src/card/actions.ts +4 -12
- package/src/card/card.ts +5 -23
- package/src/card/content.ts +4 -12
- package/src/card/media.ts +4 -9
- package/src/charts/area-chart.ts +7 -4
- package/src/charts/pills.ts +6 -4
- package/src/checkbox/checkbox.test.ts +2 -2
- package/src/checkbox/checkbox.ts +3 -9
- package/src/chips/assist-chip.ts +6 -14
- package/src/chips/chips.ts +7 -21
- package/src/chips/filter-chip.ts +4 -3
- package/src/chips/input-chip.ts +10 -9
- package/src/chips/suggestion-chip.ts +10 -12
- package/src/code-highlight/code-highlight.ts +28 -59
- package/src/code-highlight/code-preview.ts +11 -9
- package/src/connectivity/connectivity-status.ts +4 -3
- package/src/content-drawer/drawer.ts +5 -3
- package/src/content-drawer/main.ts +5 -3
- package/src/content-drawer/sheet.ts +6 -4
- package/src/date-range/date-range-dialog.ts +2 -2
- package/src/date-range/date-range.ts +3 -2
- package/src/delay/delay.ts +2 -2
- package/src/details/details.ts +4 -17
- package/src/dialog/dialog-service.ts +2 -0
- package/src/dialog/dialog.component.ts +9 -9
- package/src/directives/drag.ts +1 -9
- package/src/directives/index.ts +0 -1
- package/src/discovery/discovery.service.ts +1 -1
- package/src/divider/divider.ts +5 -14
- package/src/dropdown/dropdown-component.ts +5 -16
- package/src/dropdown/dropdown-content.ts +7 -14
- package/src/expand/expand-root.component.ts +5 -15
- package/src/expand/expand.component.ts +4 -17
- package/src/extra/countries/countries.ts +5 -13
- package/src/extra/timezone/timezone.ts +7 -12
- package/src/form/form.test.ts +2 -2
- package/src/form/form.ts +2 -9
- package/src/icons/icon.ts +4 -3
- package/src/iframe/iframe.ts +13 -4
- package/src/index.ts +3 -3
- package/src/input/input.ts +4 -11
- package/src/json/json.ts +4 -3
- package/src/kbd/kbd.ts +4 -3
- package/src/layout/index.ts +1 -5
- package/src/layout/scroll/scroll.ts +5 -8
- package/src/lightbox/flip-directive.ts +1 -1
- package/src/lightbox/lightbox.ts +5 -14
- package/src/list/list-item.ts +4 -13
- package/src/list/list.ts +12 -10
- package/src/mailbox/email-editor.ts +17 -11
- package/src/mailbox/email-layout-selector.ts +2 -2
- package/src/mailbox/email-recipients.ts +13 -8
- package/src/mailbox/email-template-picker.ts +6 -5
- package/src/mailbox/email-viewer.ts +5 -3
- package/src/mailbox/mailbox.ts +6 -5
- package/src/map/map.ts +8 -6
- package/src/menu/menu-item.ts +5 -16
- package/src/menu/menu.ts +27 -13
- package/src/nav-drawer/appbar.ts +4 -14
- package/src/nav-drawer/content.ts +5 -14
- package/src/nav-drawer/drawer.ts +5 -18
- package/src/nav-drawer/navbar.ts +3 -17
- package/src/navigation-bar/navigation-bar-item.ts +8 -6
- package/src/navigation-bar/navigation-bar.ts +19 -19
- package/src/navigation-rail/navigation-rail-item.ts +9 -5
- package/src/navigation-rail/navigation-rail.ts +10 -14
- package/src/notification/notification.ts +6 -3
- package/src/option/option.ts +4 -3
- package/src/overlay/overlay.animations.ts +196 -25
- package/src/overlay/overlay.component.ts +397 -190
- package/src/overlay/overlay.confirm-body.ts +21 -7
- package/src/overlay/overlay.gestures.ts +72 -36
- package/src/overlay/overlay.layout.ts +103 -1
- package/src/overlay/overlay.positioning.ts +301 -0
- package/src/overlay/overlay.service.ts +81 -3
- package/src/overlay/overlay.stack.ts +8 -4
- package/src/overlay/overlay.types.ts +83 -5
- package/src/page/page.ts +16 -11
- package/src/payment-card-form/index.ts +1 -0
- package/src/{components/form-elements → payment-card-form}/payment-card-form.ts +23 -23
- package/src/progress/progress.ts +5 -3
- package/src/qr-scanner/qr-scanner.ts +7 -30
- package/src/radio-group/radio-button.ts +3 -13
- package/src/radio-group/radio-group.ts +5 -22
- package/src/range/range.ts +4 -3
- package/src/rxjs-utils/waitForElements.ts +1 -1
- package/src/rxjs-utils/waitForElementsAll.ts +1 -1
- package/src/select/select.ts +10 -18
- package/src/sheet/hook.ts +1 -1
- package/src/sheet/sheet.ts +5 -20
- package/src/skeleton/skeleton.ts +4 -3
- package/src/slider/slide.ts +5 -3
- package/src/slider/slider.ts +5 -3
- package/src/splash-screen/splash-screen.ts +5 -3
- package/src/state/CLAUDE.md +161 -0
- package/src/state/MIGRATION.md +258 -0
- package/src/state/SCOPING.md +134 -0
- package/src/state/active-host.ts +156 -0
- package/src/state/index.ts +877 -0
- package/src/state/persist.ts +208 -0
- package/src/state/schmancy-context.ts +84 -0
- package/src/state/state.test-d.ts +227 -0
- package/src/state/state.test.ts +820 -0
- package/src/steps/schmancy-step.ts +5 -3
- package/src/steps/schmancy-steps-container.ts +5 -3
- package/src/surface/surface.ts +14 -9
- package/src/switch/switch.test.ts +2 -2
- package/src/switch/switch.ts +8 -10
- package/src/table/row.ts +7 -4
- package/src/table/table.ts +17 -14
- package/src/tabs/index.ts +0 -2
- package/src/tabs/tab.ts +2 -2
- package/src/tabs/tabs-group.ts +7 -4
- package/src/teleport/teleport.component.ts +5 -3
- package/src/textarea/textarea.ts +6 -12
- package/src/theme/theme-audio-player.ts +7 -5
- package/src/theme/theme-controller.ts +2 -2
- package/src/theme/theme.component.ts +22 -15
- package/src/theme/theme.service.ts +6 -7
- package/src/theme/theme.style.css +1 -0
- package/src/theme-button/theme-button.ts +2 -2
- package/src/timeline/index.ts +1 -0
- package/src/timeline/timeline-tile.ts +431 -0
- package/src/tree/tree.ts +4 -16
- package/src/typewriter/index.ts +1 -1
- package/src/typography/typography.ts +5 -98
- package/src/utils/intersection.ts +5 -1
- package/src/utils/overlay-stack.ts +1 -1
- package/src/utils/search.ts +2 -2
- package/src/visually-hidden/visually-hidden.ts +4 -3
- package/src/window/window-position.ts +3 -6
- package/src/window/window.ts +9 -7
- package/types/mixins/SchmancyElement.d.ts +49 -0
- package/types/mixins/formField.mixin.d.ts +4 -2
- package/types/mixins/index.d.ts +1 -0
- package/types/mixins/litElement.mixin.d.ts +11 -0
- package/types/src/agent/agent-entry.d.ts +1 -1
- package/types/src/agent/helpers.d.ts +0 -26
- package/types/src/agent/schmancy-skill.d.ts +3 -5
- package/types/src/area/area.component.d.ts +3 -17
- package/types/src/area/route.component.d.ts +14 -4
- package/types/src/autocomplete/autocomplete.d.ts +4 -15
- package/types/src/{avatar.d.ts → avatar/avatar.d.ts} +2 -3
- package/types/src/avatar/index.d.ts +1 -0
- package/types/src/badge/badge.d.ts +3 -3
- package/types/src/boat/boat.d.ts +3 -2
- package/types/src/breadcrumb/breadcrumb.d.ts +9 -19
- package/types/src/busy/busy.d.ts +3 -3
- package/types/src/busy/spinner.d.ts +3 -3
- package/types/src/button/button.d.ts +4 -10
- package/types/src/button/icon-button.d.ts +5 -11
- package/types/src/card/actions.d.ts +3 -12
- package/types/src/card/card.d.ts +4 -24
- package/types/src/card/content.d.ts +3 -12
- package/types/src/card/media.d.ts +3 -9
- package/types/src/charts/area-chart.d.ts +3 -3
- package/types/src/charts/pills.d.ts +3 -3
- package/types/src/checkbox/checkbox.d.ts +3 -10
- package/types/src/chips/assist-chip.d.ts +5 -15
- package/types/src/chips/chips.d.ts +3 -17
- package/types/src/chips/filter-chip.d.ts +3 -3
- package/types/src/chips/input-chip.d.ts +9 -10
- package/types/src/chips/suggestion-chip.d.ts +9 -13
- package/types/src/code-highlight/code-highlight.d.ts +4 -11
- package/types/src/code-highlight/code-preview.d.ts +3 -3
- package/types/src/connectivity/connectivity-status.d.ts +3 -3
- package/types/src/content-drawer/drawer.d.ts +4 -4
- package/types/src/content-drawer/main.d.ts +3 -3
- package/types/src/content-drawer/sheet.d.ts +4 -4
- package/types/src/date-range/date-range-dialog.d.ts +2 -3
- package/types/src/date-range/date-range.d.ts +2 -3
- package/types/src/delay/delay.d.ts +2 -3
- package/types/src/details/details.d.ts +3 -14
- package/types/src/dialog/dialog.component.d.ts +9 -9
- package/types/src/directives/drag.d.ts +1 -3
- package/types/src/directives/index.d.ts +0 -1
- package/types/src/divider/divider.d.ts +3 -14
- package/types/src/dropdown/dropdown-component.d.ts +4 -17
- package/types/src/dropdown/dropdown-content.d.ts +6 -14
- package/types/src/expand/expand-root.component.d.ts +4 -14
- package/types/src/expand/expand.component.d.ts +3 -17
- package/types/src/extra/countries/countries.d.ts +3 -13
- package/types/src/extra/timezone/timezone.d.ts +4 -11
- package/types/src/form/form.d.ts +2 -9
- package/types/src/icons/icon.d.ts +3 -3
- package/types/src/iframe/iframe.d.ts +5 -3
- package/types/src/index.d.ts +3 -3
- package/types/src/input/input.d.ts +4 -11
- package/types/src/json/json.d.ts +3 -3
- package/types/src/kbd/kbd.d.ts +3 -3
- package/types/src/layout/index.d.ts +0 -4
- package/types/src/layout/scroll/scroll.d.ts +4 -8
- package/types/src/lightbox/lightbox.d.ts +3 -14
- package/types/src/list/list-item.d.ts +3 -13
- package/types/src/list/list.d.ts +11 -10
- package/types/src/mailbox/email-editor.d.ts +3 -3
- package/types/src/mailbox/email-layout-selector.d.ts +2 -3
- package/types/src/mailbox/email-recipients.d.ts +7 -3
- package/types/src/mailbox/email-template-picker.d.ts +4 -4
- package/types/src/mailbox/email-viewer.d.ts +3 -3
- package/types/src/mailbox/mailbox.d.ts +4 -4
- package/types/src/map/map.d.ts +4 -3
- package/types/src/menu/menu-item.d.ts +3 -16
- package/types/src/menu/menu.d.ts +25 -13
- package/types/src/nav-drawer/appbar.d.ts +3 -14
- package/types/src/nav-drawer/content.d.ts +3 -14
- package/types/src/nav-drawer/drawer.d.ts +3 -18
- package/types/src/nav-drawer/navbar.d.ts +3 -18
- package/types/src/navigation-bar/navigation-bar-item.d.ts +7 -6
- package/types/src/navigation-bar/navigation-bar.d.ts +13 -7
- package/types/src/navigation-rail/navigation-rail-item.d.ts +9 -6
- package/types/src/navigation-rail/navigation-rail.d.ts +10 -15
- package/types/src/notification/notification.d.ts +3 -3
- package/types/src/option/option.d.ts +3 -3
- package/types/src/overlay/overlay.animations.d.ts +54 -5
- package/types/src/overlay/overlay.component.d.ts +39 -15
- package/types/src/overlay/overlay.confirm-body.d.ts +4 -4
- package/types/src/overlay/overlay.gestures.d.ts +26 -17
- package/types/src/overlay/overlay.layout.d.ts +27 -1
- package/types/src/overlay/overlay.positioning.d.ts +87 -0
- package/types/src/overlay/overlay.types.d.ts +59 -5
- package/types/src/page/page.d.ts +14 -11
- package/types/src/{components/form-elements → payment-card-form}/payment-card-form.d.ts +2 -3
- package/types/src/progress/progress.d.ts +3 -3
- package/types/src/qr-scanner/qr-scanner.d.ts +3 -3
- package/types/src/radio-group/radio-button.d.ts +3 -12
- package/types/src/radio-group/radio-group.d.ts +4 -20
- package/types/src/range/range.d.ts +3 -3
- package/types/src/rxjs-utils/waitForElements.d.ts +1 -1
- package/types/src/rxjs-utils/waitForElementsAll.d.ts +1 -1
- package/types/src/select/select.d.ts +4 -15
- package/types/src/sheet/sheet.d.ts +3 -20
- package/types/src/skeleton/skeleton.d.ts +3 -3
- package/types/src/slider/slide.d.ts +3 -2
- package/types/src/slider/slider.d.ts +3 -3
- package/types/src/splash-screen/splash-screen.d.ts +3 -3
- package/types/src/state/active-host.d.ts +18 -0
- package/types/src/state/index.d.ts +145 -0
- package/types/src/state/persist.d.ts +14 -0
- package/types/src/state/schmancy-context.d.ts +31 -0
- package/types/src/state/state.test-d.d.ts +131 -0
- package/types/src/state/state.test.d.ts +1 -0
- package/types/src/steps/schmancy-step.d.ts +3 -3
- package/types/src/steps/schmancy-steps-container.d.ts +3 -3
- package/types/src/surface/surface.d.ts +13 -5
- package/types/src/switch/switch.d.ts +7 -11
- package/types/src/table/row.d.ts +2 -3
- package/types/src/table/table.d.ts +4 -11
- package/types/src/tabs/index.d.ts +0 -2
- package/types/src/tabs/tab.d.ts +2 -3
- package/types/src/tabs/tabs-group.d.ts +3 -3
- package/types/src/teleport/teleport.component.d.ts +3 -3
- package/types/src/textarea/textarea.d.ts +5 -12
- package/types/src/theme/theme-audio-player.d.ts +3 -3
- package/types/src/theme/theme-controller.d.ts +2 -2
- package/types/src/theme/theme.component.d.ts +18 -13
- package/types/src/theme-button/theme-button.d.ts +2 -3
- package/types/src/timeline/index.d.ts +1 -0
- package/types/src/timeline/timeline-tile.d.ts +44 -0
- package/types/src/tree/tree.d.ts +3 -16
- package/types/src/typewriter/index.d.ts +1 -1
- package/types/src/typography/typography.d.ts +3 -36
- package/types/src/visually-hidden/visually-hidden.d.ts +3 -3
- package/types/src/window/window.d.ts +3 -3
- package/dist/agent/index.es-Dymj8REP.js +0 -489
- package/dist/agent/index.es-Dymj8REP.js.map +0 -1
- package/dist/area-BGBCMC79.js.map +0 -1
- package/dist/area-D7l9KR2N.cjs +0 -12
- package/dist/area-D7l9KR2N.cjs.map +0 -1
- package/dist/autocomplete-BPD5uraA.cjs +0 -115
- package/dist/autocomplete-BPD5uraA.cjs.map +0 -1
- package/dist/autocomplete-C2P0Soht.js.map +0 -1
- package/dist/boat-BkIO-0No.cjs +0 -80
- package/dist/boat-BkIO-0No.cjs.map +0 -1
- package/dist/boat-DXZ0k7oa.js.map +0 -1
- package/dist/busy-DGYhpTnO.cjs.map +0 -1
- package/dist/busy-iRjq6Nvd.js.map +0 -1
- package/dist/card-DjYnCckw.cjs.map +0 -1
- package/dist/card-wUTjx0EC.js.map +0 -1
- package/dist/checkbox-CiYEtw9F.cjs +0 -39
- package/dist/checkbox-CiYEtw9F.cjs.map +0 -1
- package/dist/checkbox-VBSenxgb.js.map +0 -1
- package/dist/chips-BDS9lkPa.js.map +0 -1
- package/dist/chips-D6ptH5re.cjs.map +0 -1
- package/dist/code-highlight-Bi91XHJN.js.map +0 -1
- package/dist/code-highlight-BzRmBZzz.cjs.map +0 -1
- package/dist/components-DkmEgyAc.cjs +0 -73
- package/dist/components.cjs +0 -1
- package/dist/components.js +0 -2
- package/dist/context-BerzpUhI.js +0 -3
- package/dist/context-C6dHUHhi.cjs +0 -1
- package/dist/date-range-BmFxTXiU.cjs +0 -131
- package/dist/date-range-BmFxTXiU.cjs.map +0 -1
- package/dist/date-range-ClTMg1AB.js.map +0 -1
- package/dist/date-range-inline-B9Dp2z6C.cjs +0 -43
- package/dist/delay-BHODnTg-.cjs +0 -9
- package/dist/delay-BHODnTg-.cjs.map +0 -1
- package/dist/delay-Dlk0A3he.js +0 -347
- package/dist/delay-Dlk0A3he.js.map +0 -1
- package/dist/details-CPjlqQD4.js.map +0 -1
- package/dist/details-Cz9ok9si.cjs.map +0 -1
- package/dist/dialog-service-CzDO08Gy.cjs.map +0 -1
- package/dist/dialog-service-DH-tjPuE.js.map +0 -1
- package/dist/divider-CILo3_vi.cjs.map +0 -1
- package/dist/divider-ghgyw5CU.js.map +0 -1
- package/dist/expand-CbjBr_Ds.js.map +0 -1
- package/dist/expand-r3OrSoDk.cjs +0 -141
- package/dist/expand-r3OrSoDk.cjs.map +0 -1
- package/dist/extra-BZeZOMBI.cjs.map +0 -1
- package/dist/extra-DK9MQtPJ.js.map +0 -1
- package/dist/float-CuZ8LOgB.cjs +0 -1
- package/dist/flow-BPDtbhLe.js +0 -386
- package/dist/flow-BPDtbhLe.js.map +0 -1
- package/dist/flow-Dn9AZktE.cjs +0 -1
- package/dist/flow-Dn9AZktE.cjs.map +0 -1
- package/dist/form-rCZqoAoK.js.map +0 -1
- package/dist/form-wI58M85H.cjs.map +0 -1
- package/dist/handover/agent-runtime-v2-loopback.md +0 -71
- package/dist/handover/claude-design-v2-paste.md +0 -42
- package/dist/icons-Drq4kKy2.js.map +0 -1
- package/dist/icons-DtdhaZdc.cjs +0 -52
- package/dist/icons-DtdhaZdc.cjs.map +0 -1
- package/dist/iframe-BkwwWIbQ.cjs +0 -24
- package/dist/iframe-BkwwWIbQ.cjs.map +0 -1
- package/dist/iframe-BmyHW8km.js.map +0 -1
- package/dist/index.es-BgmFX1JM.cjs +0 -1
- package/dist/index.es-BgmFX1JM.cjs.map +0 -1
- package/dist/index.es-CLyb_o3Y.js +0 -489
- package/dist/index.es-CLyb_o3Y.js.map +0 -1
- package/dist/input-BGNZlfL8.cjs.map +0 -1
- package/dist/input-Bc3bVISm.js.map +0 -1
- package/dist/input-chip-BQrjpjaQ.js.map +0 -1
- package/dist/input-chip-DN-cwf11.cjs.map +0 -1
- package/dist/intersection-BrXp4YTO.js +0 -12
- package/dist/intersection-BrXp4YTO.js.map +0 -1
- package/dist/intersection-DqBqnpgh.cjs +0 -1
- package/dist/intersection-DqBqnpgh.cjs.map +0 -1
- package/dist/layout-7eyMBmZk.cjs +0 -17
- package/dist/layout-7eyMBmZk.cjs.map +0 -1
- package/dist/layout-Ox6nJkzC.js +0 -268
- package/dist/layout-Ox6nJkzC.js.map +0 -1
- package/dist/lightbox-CY52Z_ig.js.map +0 -1
- package/dist/lightbox-H8Uq3AXy.cjs +0 -202
- package/dist/lightbox-H8Uq3AXy.cjs.map +0 -1
- package/dist/list-BGjVo6zb.cjs +0 -40
- package/dist/list-BGjVo6zb.cjs.map +0 -1
- package/dist/list-D7wUxu1C.js.map +0 -1
- package/dist/litElement.mixin-CszkJuNl.js +0 -12
- package/dist/litElement.mixin-CszkJuNl.js.map +0 -1
- package/dist/litElement.mixin-qh5-IIUq.cjs +0 -1
- package/dist/litElement.mixin-qh5-IIUq.cjs.map +0 -1
- package/dist/mailbox--EN-JhjV.js.map +0 -1
- package/dist/mailbox-DLiBGJhY.cjs.map +0 -1
- package/dist/map-B0S_q3ma.js.map +0 -1
- package/dist/map-EDQN0I6e.cjs +0 -80
- package/dist/map-EDQN0I6e.cjs.map +0 -1
- package/dist/menu-3edZGQ1x.cjs.map +0 -1
- package/dist/menu-COeFpb6n.js.map +0 -1
- package/dist/metric.cjs +0 -69
- package/dist/metric.cjs.map +0 -1
- package/dist/metric.js +0 -93
- package/dist/metric.js.map +0 -1
- package/dist/mixins.cjs.map +0 -1
- package/dist/mixins.js.map +0 -1
- package/dist/notification-CC-TFN5v.js.map +0 -1
- package/dist/notification-P4c-kFdH.cjs +0 -23
- package/dist/notification-P4c-kFdH.cjs.map +0 -1
- package/dist/option-BwAF4nAw.js.map +0 -1
- package/dist/option-Cu0ertuF.cjs +0 -43
- package/dist/option-Cu0ertuF.cjs.map +0 -1
- package/dist/progress-Bk_Q1Shy.js.map +0 -1
- package/dist/progress-Yz6EMNSu.cjs.map +0 -1
- package/dist/provide-CYgj58u_.cjs +0 -1
- package/dist/provide-CYgj58u_.cjs.map +0 -1
- package/dist/provide-ydIskwf2.js +0 -107
- package/dist/provide-ydIskwf2.js.map +0 -1
- package/dist/radio-group-BcdcjLNC.js.map +0 -1
- package/dist/radio-group-BpBz5tRA.cjs +0 -40
- package/dist/radio-group-BpBz5tRA.cjs.map +0 -1
- package/dist/scroll-DXQv0ejL.js.map +0 -1
- package/dist/scroll-DbZMTv0K.cjs +0 -26
- package/dist/scroll-DbZMTv0K.cjs.map +0 -1
- package/dist/search-CwMav5QB.cjs +0 -1
- package/dist/select-BV4lK2zy.cjs.map +0 -1
- package/dist/select-DKyGWDsG.js.map +0 -1
- package/dist/sheet-BAI_jH1t.cjs +0 -35
- package/dist/sheet-BAI_jH1t.cjs.map +0 -1
- package/dist/sheet-C3TLKItO.js.map +0 -1
- package/dist/sheet.service-RcDBwHmv.cjs +0 -1
- package/dist/skills/schmancy/store.md +0 -126
- package/dist/skills/store.md +0 -126
- package/dist/sound.service-BEN6Xjy_.cjs +0 -1
- package/dist/sound.service-BEN6Xjy_.cjs.map +0 -1
- package/dist/sound.service-DWZe6swU.js.map +0 -1
- package/dist/splash-screen-DbI5RgBf.js.map +0 -1
- package/dist/splash-screen-DoHRTHi8.cjs +0 -41
- package/dist/splash-screen-DoHRTHi8.cjs.map +0 -1
- package/dist/src-00DfxCJq.js.map +0 -1
- package/dist/src-C_JjQovE.cjs +0 -269
- package/dist/src-C_JjQovE.cjs.map +0 -1
- package/dist/store-CjFHCSDb.cjs +0 -1
- package/dist/store-CjFHCSDb.cjs.map +0 -1
- package/dist/store-CjzZDQt8.js +0 -1654
- package/dist/store-CjzZDQt8.js.map +0 -1
- package/dist/store.cjs +0 -1
- package/dist/store.js +0 -2
- package/dist/surface-D-GWBcsh.cjs +0 -7
- package/dist/surface-D-GWBcsh.cjs.map +0 -1
- package/dist/surface-D23JtxYP.js +0 -22
- package/dist/surface-D23JtxYP.js.map +0 -1
- package/dist/surface.mixin-DqMwoddO.js +0 -320
- package/dist/surface.mixin-DqMwoddO.js.map +0 -1
- package/dist/surface.mixin-DxOi-xo0.cjs +0 -297
- package/dist/surface.mixin-DxOi-xo0.cjs.map +0 -1
- package/dist/table-C7b73kdg.cjs +0 -63
- package/dist/table-C7b73kdg.cjs.map +0 -1
- package/dist/table-CTrhV9-k.js +0 -631
- package/dist/table-CTrhV9-k.js.map +0 -1
- package/dist/tabs-Ce55RbwF.js.map +0 -1
- package/dist/tabs-DAzB8O7w.cjs +0 -31
- package/dist/tabs-DAzB8O7w.cjs.map +0 -1
- package/dist/tailwind.mixin-DRI1oTYQ.cjs +0 -2
- package/dist/tailwind.mixin-DRI1oTYQ.cjs.map +0 -1
- package/dist/tailwind.mixin-mdQR3BEO.js +0 -219
- package/dist/tailwind.mixin-mdQR3BEO.js.map +0 -1
- package/dist/textarea-DjN1D9u0.js.map +0 -1
- package/dist/textarea-PuHxBvJA.cjs +0 -39
- package/dist/textarea-PuHxBvJA.cjs.map +0 -1
- package/dist/theme-B-IJ2r7Q.cjs +0 -181
- package/dist/theme-button-BSbYmS4p.cjs +0 -8
- package/dist/theme-button-BSbYmS4p.cjs.map +0 -1
- package/dist/theme-button-CEMeAUOL.js.map +0 -1
- package/dist/theme.service-DxJPUGlu.cjs +0 -1
- package/dist/theme.service-DxJPUGlu.cjs.map +0 -1
- package/dist/theme.service-cOfPrtfe.js.map +0 -1
- package/dist/tslib.es6-Cnt75pb6.cjs +0 -1
- package/dist/tslib.es6-Cnt75pb6.cjs.map +0 -1
- package/dist/tslib.es6-DMzzJKHV.js +0 -7
- package/dist/tslib.es6-DMzzJKHV.js.map +0 -1
- package/dist/utils-Bp2jhyZc.js.map +0 -1
- package/dist/utils-CBPQvxNW.cjs +0 -1
- package/dist/utils-CBPQvxNW.cjs.map +0 -1
- package/dist/window-CrjZdf7Y.js.map +0 -1
- package/dist/window-DTUARSrU.cjs +0 -59
- package/dist/window-DTUARSrU.cjs.map +0 -1
- package/skills/schmancy/store.md +0 -126
- package/src/components/form-elements/index.ts +0 -1
- package/src/components/index.ts +0 -1
- package/src/layout/flex/flex.scss +0 -4
- package/src/layout/flex/flex.ts +0 -74
- package/src/layout/flex/index.ts +0 -1
- package/src/layout/grid/.readme +0 -79
- package/src/layout/grid/grid.scss +0 -5
- package/src/layout/grid/grid.ts +0 -121
- package/src/layout/grid/index.ts +0 -1
- package/src/layout/layout.ts +0 -122
- package/src/layout/v2/flex.ts +0 -243
- package/src/layout/v2/index.ts +0 -1
- package/src/metric/index.ts +0 -1
- package/src/metric/metric.ts +0 -127
- package/src/store/context-array.ts +0 -358
- package/src/store/context-collection.ts +0 -218
- package/src/store/context-create.ts +0 -284
- package/src/store/context-object.ts +0 -298
- package/src/store/filter-directive.ts +0 -614
- package/src/store/index.ts +0 -10
- package/src/store/selector-hook.ts +0 -259
- package/src/store/selectors.ts +0 -289
- package/src/store/storage-manager.ts +0 -269
- package/src/store/store.class.ts +0 -239
- package/src/store/types.ts +0 -327
- package/src/tabs/tabs-compatibility.ts +0 -20
- package/src/typewriter/typewriter.ts +0 -410
- package/types/src/area/route.test.d.ts +0 -20
- package/types/src/button/button.test.d.ts +0 -1
- package/types/src/chips/chip.d.ts +0 -3
- package/types/src/components/index.d.ts +0 -1
- package/types/src/content-drawer/$sheet.d.ts +0 -14
- package/types/src/dialog/dailog.d.ts +0 -116
- package/types/src/dialog/dialog-content.d.ts +0 -17
- package/types/src/directives/guard.d.ts +0 -1
- package/types/src/directives/visibility.d.ts +0 -11
- package/types/src/form/form-v2.d.ts +0 -22
- package/types/src/input/input-v2.d.ts +0 -250
- package/types/src/layout/flex/flex.d.ts +0 -26
- package/types/src/layout/flex/index.d.ts +0 -1
- package/types/src/layout/grid/grid.d.ts +0 -39
- package/types/src/layout/grid/index.d.ts +0 -1
- package/types/src/layout/layout.d.ts +0 -59
- package/types/src/layout/v2/flex.d.ts +0 -65
- package/types/src/layout/v2/grid.d.ts +0 -51
- package/types/src/layout/v2/index.d.ts +0 -1
- package/types/src/lightbox/flip.directive.d.ts +0 -22
- package/types/src/metric/index.d.ts +0 -1
- package/types/src/metric/metric.d.ts +0 -39
- package/types/src/notification/outlet.d.ts +0 -10
- package/types/src/sheet/header.d.ts +0 -10
- package/types/src/store/context-array.d.ts +0 -83
- package/types/src/store/context-collection.d.ts +0 -74
- package/types/src/store/context-create.d.ts +0 -43
- package/types/src/store/context-object.d.ts +0 -46
- package/types/src/store/filter-directive.d.ts +0 -116
- package/types/src/store/immer-integration.d.ts +0 -54
- package/types/src/store/index.d.ts +0 -10
- package/types/src/store/selector-hook.d.ts +0 -46
- package/types/src/store/selectors.d.ts +0 -90
- package/types/src/store/storage-manager.d.ts +0 -48
- package/types/src/store/store.class.d.ts +0 -73
- package/types/src/store/types.d.ts +0 -241
- package/types/src/tabs/tabs-compatibility.d.ts +0 -13
- package/types/src/theme/theme.elevation.d.ts +0 -131
- package/types/src/theme/theme.motion.d.ts +0 -198
- package/types/src/theme/theme.shape.d.ts +0 -144
- package/types/src/theme/theme.state.d.ts +0 -546
- package/types/src/theme/theme.typography.d.ts +0 -74
- package/types/src/tooltip/tooltip.d.ts +0 -33
- package/types/src/typewriter/typewriter.d.ts +0 -94
- /package/dist/agent/{flow-CvG1fLW5.js → flow-CaPi2G8y.js} +0 -0
- /package/dist/agent/{vendor-material-color-DcL7ZPxx.js → vendor-material-color-Be96dpGE.js} +0 -0
- /package/dist/{animation-hXFClrIn.js → animation-BK-8BwY8.js} +0 -0
- /package/dist/{animation-CQRdLgzX.cjs → animation-CO_Csq84.cjs} +0 -0
- /package/dist/{decorate-D_utPUsC.js → decorate-23nYs4Le.js} +0 -0
- /package/dist/{decorate-F9CuyeHg.cjs → decorate-DpFmy0nm.cjs} +0 -0
- /package/dist/{hashContent-B2IntJQf.js → hashContent-1ARKIsx9.js} +0 -0
- /package/dist/{hashContent-CahnEuut.cjs → hashContent-Bp5S6T4U.cjs} +0 -0
- /package/dist/{lazy-D6R5N5v4.js → lazy-B0ia54tT.js} +0 -0
- /package/dist/{lazy-BDNnH_r7.cjs → lazy-Dq9mRRjT.cjs} +0 -0
- /package/dist/{reduced-motion-BZTLqAyl.js → reduced-motion-D-L12p7G.js} +0 -0
- /package/dist/{reduced-motion-9RjNnhIg.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
- /package/dist/{rxjs-utils-DJbZRjp3.cjs → rxjs-utils-Csnks202.cjs} +0 -0
- /package/dist/{rxjs-utils-CKTnEKUH.js → rxjs-utils-d-ivVN84.js} +0 -0
- /package/dist/{theme.events-NuihzD_p.js → theme.events-Cv7N4Toe.js} +0 -0
- /package/dist/{theme.events-DakXxZeP.cjs → theme.events-DM4H5F2d.cjs} +0 -0
- /package/dist/{theme.interface-DTwkuAKJ.cjs → theme.interface-D9l33b-M.cjs} +0 -0
- /package/dist/{theme.interface-Buged9Cg.js → theme.interface-DnVNre4O.js} +0 -0
- /package/src/{directives/typewriter.ts → typewriter/typewriter.directive.ts} +0 -0
- /package/types/src/{components/form-elements → payment-card-form}/index.d.ts +0 -0
- /package/types/src/{directives/typewriter.d.ts → typewriter/typewriter.directive.d.ts} +0 -0
|
@@ -8,7 +8,7 @@ import observeOnMutation from './mutation-observer'
|
|
|
8
8
|
* @example waitForElements(['button', 'input']).subscribe(([button, input]) => button.click())
|
|
9
9
|
* @returns
|
|
10
10
|
*/
|
|
11
|
-
export default function waitForElements
|
|
11
|
+
export default function waitForElements(
|
|
12
12
|
/**
|
|
13
13
|
* @param selectors The selectors to use to find the elements
|
|
14
14
|
* @type { string[] }
|
|
@@ -8,7 +8,7 @@ import observeOnMutation from './mutation-observer'
|
|
|
8
8
|
* @example waitForElements(['button', 'input']).subscribe(([button, input]) => button.click())
|
|
9
9
|
* @returns
|
|
10
10
|
*/
|
|
11
|
-
export default function waitForElementsAll
|
|
11
|
+
export default function waitForElementsAll(
|
|
12
12
|
/**
|
|
13
13
|
* @param selectors The selectors to use to find the elements
|
|
14
14
|
* @type { string[] }
|
package/src/select/select.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'
|
|
2
|
-
import {
|
|
2
|
+
import { SchmancyElement } from '@mixins/index'
|
|
3
3
|
import { color } from '@schmancy/directives'
|
|
4
4
|
import SchmancyInput from '@schmancy/input/input'
|
|
5
5
|
import SchmancyOption from '@schmancy/option/option'
|
|
@@ -7,6 +7,7 @@ import { SchmancyTheme } from '@schmancy/theme/theme.interface'
|
|
|
7
7
|
import { css, html, PropertyValues, TemplateResult } from 'lit'
|
|
8
8
|
import { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'
|
|
9
9
|
import { classMap } from 'lit/directives/class-map.js'
|
|
10
|
+
import { ifDefined } from 'lit/directives/if-defined.js'
|
|
10
11
|
import { BehaviorSubject, combineLatest, fromEvent, Subject, takeUntil } from 'rxjs'
|
|
11
12
|
import { tap, withLatestFrom } from 'rxjs/operators'
|
|
12
13
|
|
|
@@ -15,18 +16,7 @@ export type SchmancySelectChangeEvent = CustomEvent<{
|
|
|
15
16
|
}>
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* @element schmancy-select
|
|
21
|
-
* @summary Material Design dropdown with type-to-filter, keyboard nav, single or multi-select. Options are declared as `<schmancy-option>` children; value / values props sync with selection.
|
|
22
|
-
* @example
|
|
23
|
-
* <schmancy-select name="priority" label="Priority" value="medium">
|
|
24
|
-
* <schmancy-option value="low">Low</schmancy-option>
|
|
25
|
-
* <schmancy-option value="medium">Medium</schmancy-option>
|
|
26
|
-
* <schmancy-option value="high">High</schmancy-option>
|
|
27
|
-
* </schmancy-select>
|
|
28
|
-
* @platform select change - Floating-UI-positioned listbox. Degrades to native `<select>` styled via Tailwind if the tag never registers, though multi-select UX is lost.
|
|
29
|
-
* @fires change - `SchmancySelectChangeEvent` with `{ value }` (single) or `{ value: string[] }` (multi).
|
|
19
|
+
* Select dropdown component with single and multi-select support.
|
|
30
20
|
*
|
|
31
21
|
* @prop {string} name - Name attribute for form submission
|
|
32
22
|
* @prop {string} label - Label text displayed above the select
|
|
@@ -37,7 +27,8 @@ export type SchmancySelectChangeEvent = CustomEvent<{
|
|
|
37
27
|
* @prop {string[]} values - Selected values (multi-select mode)
|
|
38
28
|
*/
|
|
39
29
|
@customElement('schmancy-select')
|
|
40
|
-
export class SchmancySelect extends
|
|
30
|
+
export class SchmancySelect extends SchmancyElement {
|
|
31
|
+
static styles = [css`
|
|
41
32
|
:host {
|
|
42
33
|
display: block;
|
|
43
34
|
position: relative;
|
|
@@ -47,7 +38,8 @@ export class SchmancySelect extends $LitElement(css`
|
|
|
47
38
|
overflow-y: auto;
|
|
48
39
|
outline: none;
|
|
49
40
|
}
|
|
50
|
-
`
|
|
41
|
+
`]
|
|
42
|
+
|
|
51
43
|
// Form association setup
|
|
52
44
|
static formAssociated = true
|
|
53
45
|
private internals?: ElementInternals
|
|
@@ -692,7 +684,7 @@ export class SchmancySelect extends $LitElement(css`
|
|
|
692
684
|
return html`
|
|
693
685
|
<div class="relative ${this.disabled ? 'opacity-60 cursor-not-allowed' : ''}">
|
|
694
686
|
<sch-input
|
|
695
|
-
.name=${this.name}
|
|
687
|
+
.name=${this.name ?? ''}
|
|
696
688
|
tabIndex=${this.disabled ? '-1' : '0'}
|
|
697
689
|
class="trigger"
|
|
698
690
|
role="combobox"
|
|
@@ -701,7 +693,7 @@ export class SchmancySelect extends $LitElement(css`
|
|
|
701
693
|
aria-controls="options"
|
|
702
694
|
aria-autocomplete="none"
|
|
703
695
|
aria-required=${this.required}
|
|
704
|
-
aria-activedescendant=${this._focusedOptionId || undefined}
|
|
696
|
+
aria-activedescendant=${ifDefined(this._focusedOptionId || undefined)}
|
|
705
697
|
aria-disabled=${this.disabled}
|
|
706
698
|
.label=${this.label}
|
|
707
699
|
.placeholder=${this.placeholder}
|
|
@@ -712,7 +704,7 @@ export class SchmancySelect extends $LitElement(css`
|
|
|
712
704
|
.error=${showErrors}
|
|
713
705
|
.validateOn=${this.validateOn}
|
|
714
706
|
.size=${this.size}
|
|
715
|
-
readonly
|
|
707
|
+
.readonly=${true}
|
|
716
708
|
clickable
|
|
717
709
|
@click=${(e: MouseEvent) => {
|
|
718
710
|
// Don't process clicks if disabled
|
package/src/sheet/hook.ts
CHANGED
package/src/sheet/sheet.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchmancyElement } from '@mixins/index'
|
|
2
2
|
import { area } from '../area'
|
|
3
3
|
import { html, css } from 'lit'
|
|
4
4
|
import { customElement, property, query } from 'lit/decorators.js'
|
|
@@ -7,25 +7,9 @@ import { on } from './hook'
|
|
|
7
7
|
import { SchmancySheetPosition, sheet } from './sheet.service'
|
|
8
8
|
import { BLACKBIRD_EASING, DURATION_ENTER, DURATION_EXIT, DURATION_BACKDROP, EASE_OUT, EASE_IN } from '../utils/animation'
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* Side-docked or bottom-docked panel — a dialog variant that slides in from an edge. Driven imperatively by the `sheet` service; rarely instantiated directly.
|
|
12
|
-
*
|
|
13
|
-
* @element schmancy-sheet
|
|
14
|
-
* @summary Prefer `sheet.open({ component, position })` over placing this element declaratively — the service handles stacking, focus, close on outside-click, ESC, and router integration.
|
|
15
|
-
* @example
|
|
16
|
-
* import { sheet, SchmancySheetPosition } from '@mhmo91/schmancy'
|
|
17
|
-
* sheet.open({
|
|
18
|
-
* component: new MyEditorElement(),
|
|
19
|
-
* position: SchmancySheetPosition.Side,
|
|
20
|
-
* title: 'Edit item',
|
|
21
|
-
* })
|
|
22
|
-
* @platform dialog close - Positioned-fixed panel with backdrop. Degrades to a `<dialog>` if the tag never registers — loses slide animation, keeps focus trap + dismiss.
|
|
23
|
-
* @attr position - `'side' | 'bottom'`. Which edge the sheet docks to.
|
|
24
|
-
* @attr open - Boolean; sheet is visible when true.
|
|
25
|
-
* @fires close - When the sheet is dismissed (backdrop click, close button, ESC).
|
|
26
|
-
*/
|
|
27
10
|
@customElement('schmancy-sheet')
|
|
28
|
-
export default class SchmancySheet extends
|
|
11
|
+
export default class SchmancySheet extends SchmancyElement {
|
|
12
|
+
static styles = [css`
|
|
29
13
|
:host {
|
|
30
14
|
position: fixed;
|
|
31
15
|
inset: 0;
|
|
@@ -48,7 +32,8 @@ export default class SchmancySheet extends $LitElement(css`
|
|
|
48
32
|
@media (prefers-reduced-motion: reduce) {
|
|
49
33
|
.content { box-shadow: var(--schmancy-sys-elevation-3); }
|
|
50
34
|
}
|
|
51
|
-
`
|
|
35
|
+
`]
|
|
36
|
+
|
|
52
37
|
// uid is inherited from $LitElement mixin - auto-generated or set via attribute
|
|
53
38
|
@property({ type: Boolean, reflect: true }) open = false
|
|
54
39
|
@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side
|
package/src/skeleton/skeleton.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchmancyElement } from '@mixins/index'
|
|
2
2
|
import { css, html } from 'lit'
|
|
3
3
|
import { customElement, property } from 'lit/decorators.js'
|
|
4
4
|
|
|
@@ -14,7 +14,8 @@ import { customElement, property } from 'lit/decorators.js'
|
|
|
14
14
|
* @csspart surface - The shimmering surface element.
|
|
15
15
|
*/
|
|
16
16
|
@customElement('schmancy-skeleton')
|
|
17
|
-
export class SchmancySkeleton extends
|
|
17
|
+
export class SchmancySkeleton extends SchmancyElement {
|
|
18
|
+
static styles = [css`
|
|
18
19
|
:host {
|
|
19
20
|
display: block;
|
|
20
21
|
width: var(--_sw, 100%);
|
|
@@ -46,7 +47,7 @@ export class SchmancySkeleton extends TailwindElement(css`
|
|
|
46
47
|
background: var(--schmancy-sys-color-surface-containerHighest, #e6e6e6);
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
|
-
`
|
|
50
|
+
`];
|
|
50
51
|
@property({ type: String, reflect: true }) shape: 'rect' | 'circle' | 'text' = 'rect'
|
|
51
52
|
@property({ type: String }) width = ''
|
|
52
53
|
@property({ type: String }) height = ''
|
package/src/slider/slide.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchmancyElement } from '@mixins/index'
|
|
2
2
|
import { css, html } from 'lit'
|
|
3
3
|
import { customElement, property } from 'lit/decorators.js'
|
|
4
4
|
import { cache } from 'lit/directives/cache.js'
|
|
@@ -18,7 +18,8 @@ type SlideType = 'image' | 'video' | 'content'
|
|
|
18
18
|
type ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'
|
|
19
19
|
|
|
20
20
|
@customElement('schmancy-slide')
|
|
21
|
-
export class SchmancySlide extends
|
|
21
|
+
export class SchmancySlide extends SchmancyElement {
|
|
22
|
+
static styles = [css`
|
|
22
23
|
:host {
|
|
23
24
|
display: block;
|
|
24
25
|
scroll-snap-align: center; /* If your slider uses scroll-snap */
|
|
@@ -30,7 +31,8 @@ export class SchmancySlide extends $LitElement(css`
|
|
|
30
31
|
height: auto;
|
|
31
32
|
object-fit: var(--object-fit, cover);
|
|
32
33
|
}
|
|
33
|
-
`
|
|
34
|
+
`]
|
|
35
|
+
|
|
34
36
|
/**
|
|
35
37
|
* Determines how this slide should be rendered.
|
|
36
38
|
* Defaults to 'content' if not provided.
|
package/src/slider/slider.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchmancyElement } from '@mixins/index'
|
|
2
2
|
import { css, html } from 'lit'
|
|
3
3
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
|
4
4
|
import { fromEvent } from 'rxjs'
|
|
5
5
|
import { throttleTime } from 'rxjs/operators'
|
|
6
6
|
|
|
7
7
|
@customElement('schmancy-slider')
|
|
8
|
-
export class SchmancySlider extends
|
|
8
|
+
export class SchmancySlider extends SchmancyElement {
|
|
9
|
+
static styles = [css`
|
|
9
10
|
.slider {
|
|
10
11
|
/* Lay out slides horizontally, one after another */
|
|
11
12
|
display: flex;
|
|
@@ -30,7 +31,8 @@ export class SchmancySlider extends $LitElement(css`
|
|
|
30
31
|
flex: 0 0 100%;
|
|
31
32
|
box-sizing: border-box;
|
|
32
33
|
}
|
|
33
|
-
`
|
|
34
|
+
`]
|
|
35
|
+
|
|
34
36
|
/**
|
|
35
37
|
* Currently centered slide index
|
|
36
38
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchmancyElement } from '@mixins/index'
|
|
2
2
|
import { css, html } from 'lit'
|
|
3
3
|
import { customElement, property, state } from 'lit/decorators.js'
|
|
4
4
|
import { styleMap } from 'lit/directives/style-map.js'
|
|
@@ -30,7 +30,8 @@ export type SchmancySplashScreenDoneEvent = CustomEvent<void>
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
@customElement('schmancy-splash-screen')
|
|
33
|
-
export default class SchmancySplashScreen extends
|
|
33
|
+
export default class SchmancySplashScreen extends SchmancyElement {
|
|
34
|
+
static styles = [css`
|
|
34
35
|
:host {
|
|
35
36
|
display: block;
|
|
36
37
|
position: relative;
|
|
@@ -56,7 +57,8 @@ export default class SchmancySplashScreen extends $LitElement(css`
|
|
|
56
57
|
width: 100%;
|
|
57
58
|
transition: opacity var(--schmancy-splash-transition, 500ms) ease-in-out;
|
|
58
59
|
}
|
|
59
|
-
`
|
|
60
|
+
`]
|
|
61
|
+
|
|
60
62
|
/**
|
|
61
63
|
* Minimum duration (ms) the splash layer stays visible. Prevents a flash
|
|
62
64
|
* when the app loads faster than expected.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Agent brief — `@mhmo91/schmancy/state`
|
|
2
|
+
|
|
3
|
+
When you're touching anything in this directory or anything that imports
|
|
4
|
+
from `@mhmo91/schmancy/state`, read this first.
|
|
5
|
+
|
|
6
|
+
## What this module is
|
|
7
|
+
|
|
8
|
+
A reactive state primitive for the schmancy library:
|
|
9
|
+
|
|
10
|
+
- `state(namespace).memory(initial)` / `.local()` / `.session()` / `.idb()`
|
|
11
|
+
→ returns a module-scoped singleton with a TC39 signal, an RxJS
|
|
12
|
+
Observable, sync getter, microtask-debounced persistence, and a
|
|
13
|
+
Disposable + (for `idb`) AsyncDisposable lifecycle.
|
|
14
|
+
- `computed(fn)` — re-export of `@lit-labs/signals/computed`.
|
|
15
|
+
- `effect(fn)` — runs `fn` whenever any signal it reads changes;
|
|
16
|
+
returns a `Disposable` for cleanup.
|
|
17
|
+
- `observe(source)` — legacy property decorator. One-way binds a class
|
|
18
|
+
field to a state for the host's lifetime. Use only when the value is
|
|
19
|
+
needed AS a class field (event handlers, derived methods, DevTools).
|
|
20
|
+
- `bindState(host, source)` — `ReactiveController` helper. Same
|
|
21
|
+
guarantees as `@observe`, no decorator. Use when the host isn't a
|
|
22
|
+
`$LitElement` subclass.
|
|
23
|
+
- `stateFromObservable(observable, namespace, initial)` — bridges an
|
|
24
|
+
RxJS source into a `state()`.
|
|
25
|
+
|
|
26
|
+
The module ships `Signal` (TC39 polyfill) and `StorageBackend` as named
|
|
27
|
+
type exports.
|
|
28
|
+
|
|
29
|
+
## Default subscription pattern
|
|
30
|
+
|
|
31
|
+
`$LitElement()` already composes `SignalWatcher` over its mixin chain.
|
|
32
|
+
Every signal read inside `render()` auto-tracks. **The default consumer
|
|
33
|
+
needs zero binding code:**
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
@customElement('cart-view')
|
|
37
|
+
class CartView extends $LitElement() {
|
|
38
|
+
render() { return html`Items: ${cart.value.items.length}` }
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The imported `cart` singleton IS the binding. Only reach for `@observe`
|
|
43
|
+
or `bindState` when you need the value as a class field.
|
|
44
|
+
|
|
45
|
+
## Scoping (`<schmancy-context provides>`)
|
|
46
|
+
|
|
47
|
+
The default state is a module-scoped singleton. `<schmancy-context>` is
|
|
48
|
+
the **only** way to scope a state per subtree. Reads and writes inside
|
|
49
|
+
the element auto-resolve to a per-element isolated copy via the
|
|
50
|
+
`@lit/context` request protocol; outside, they read the global.
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
<schmancy-context .provides=${[cart]}>
|
|
54
|
+
<cart-view></cart-view> <!-- isolated -->
|
|
55
|
+
</schmancy-context>
|
|
56
|
+
<cart-summary></cart-summary> <!-- module-scoped global -->
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Two infrastructure files own the mechanics:
|
|
60
|
+
|
|
61
|
+
- `state/active-host.ts` — `_activeHost` Variable + `Promise.then`
|
|
62
|
+
patch + `resolveActiveHost()` 4-tier fallback (stack →
|
|
63
|
+
`window.event` → `document.activeElement` → undefined). Hand-rolled
|
|
64
|
+
TC39 AsyncContext.Variable polyfill (~30 lines). The patch is
|
|
65
|
+
idempotent and uses `_origThen.call(this, …)` so Promise subclassing
|
|
66
|
+
/ `Symbol.species` are untouched. Decommissions the day a real
|
|
67
|
+
polyfill or native AsyncContext lands — drop the file, swap the
|
|
68
|
+
`_activeHost` export.
|
|
69
|
+
- `state/schmancy-context.ts` — the `<schmancy-context>` element. One
|
|
70
|
+
`ContextProvider` per state in `provides`; all destroyed on
|
|
71
|
+
disconnect.
|
|
72
|
+
|
|
73
|
+
`mixins/SchmancyElement.ts` carries the integration points: prototype-
|
|
74
|
+
chain wrap of every concrete subclass at first construction (caches in
|
|
75
|
+
a `WeakSet`), and `addEventListener` / `removeEventListener` overrides
|
|
76
|
+
that wrap host listeners.
|
|
77
|
+
|
|
78
|
+
Inline arrow handlers in templates (`@click=${() => …}`) are not
|
|
79
|
+
wrapped — they attach to child elements, not the host. They resolve
|
|
80
|
+
via the `window.event.composedPath()` fallback.
|
|
81
|
+
|
|
82
|
+
## Rules for code in this directory
|
|
83
|
+
|
|
84
|
+
- **One file by default.** `state/index.ts` holds the factory, types,
|
|
85
|
+
variant write APIs, persistence-debouncing wrapper, RxJS interop,
|
|
86
|
+
decorator, and helpers. `persist.ts`, `active-host.ts`, and
|
|
87
|
+
`schmancy-context.ts` are the only siblings — they own storage
|
|
88
|
+
adapters / the JSON tunnel, the host tracker / `Promise.then` patch,
|
|
89
|
+
and the scoping element respectively. Do not split further until a
|
|
90
|
+
second consumer of an internal helper emerges.
|
|
91
|
+
- **Every read and write on a global instance routes through
|
|
92
|
+
`resolveContextual`.** Don't add a fast path that bypasses it — the
|
|
93
|
+
whole point of the scoping primitive is that consumer code is
|
|
94
|
+
unchanged whether or not a `<schmancy-context>` ancestor exists.
|
|
95
|
+
- **Isolated copies are direct-access.** They serve as resolution
|
|
96
|
+
targets and must not themselves call `resolveContextual` (would
|
|
97
|
+
recurse). The `{ isolated: true }` branch in `createInstance`
|
|
98
|
+
preserves this invariant.
|
|
99
|
+
- **Don't extend the `Promise.prototype.then` patch.** It is the
|
|
100
|
+
minimum surface needed for await propagation. New schedulers
|
|
101
|
+
(custom queueMicrotask wrappers, etc.) should be solved by routing
|
|
102
|
+
through Promise, not by adding more patches.
|
|
103
|
+
- **No tsconfig flip.** Schmancy stays on `experimentalDecorators: true`.
|
|
104
|
+
Any new decorator in this module is a legacy property/method
|
|
105
|
+
decorator, same shape as `@property`/`@state`/`@query`.
|
|
106
|
+
- **No `accessor` keyword.** Implied by the line above — but call it
|
|
107
|
+
out so a reviewer doesn't miss it. The schmancy codebase doesn't use
|
|
108
|
+
`accessor`; this module follows the same convention.
|
|
109
|
+
- **Brand symbols are plain `Symbol(...)` constants** (`stateBrand`,
|
|
110
|
+
`namespaceBrand`). They are private to the module and not exported.
|
|
111
|
+
Do not export them; consumers use the `State<>` type for nominal
|
|
112
|
+
identity.
|
|
113
|
+
- **Microtask-coalesced writes.** Every persistent backend wraps writes
|
|
114
|
+
in a per-instance microtask debouncer. Multiple `set`/`update`/
|
|
115
|
+
`replace` calls in the same task collapse to one `save()`. Do not
|
|
116
|
+
bypass — write through the variant API.
|
|
117
|
+
- **`signal-polyfill` is the runtime contract.** `@lit-labs/signals` is
|
|
118
|
+
the canonical import; it re-exports the polyfill plus
|
|
119
|
+
`SignalWatcher`. Do not import `signal-polyfill` directly.
|
|
120
|
+
|
|
121
|
+
## Rules for tests
|
|
122
|
+
|
|
123
|
+
- **Vitest browser mode (Chromium via Playwright).** Real DOM, real
|
|
124
|
+
IndexedDB, real localStorage. Imported via the schmancy
|
|
125
|
+
`vitest.config.ts`.
|
|
126
|
+
- **Static namespaces in tests.** The factory's `${string}/${string}`
|
|
127
|
+
template literal rejects dynamic strings. Use literal namespaces like
|
|
128
|
+
`'test/foo'` so type inference works without casts.
|
|
129
|
+
- **`using` for test-scoped state.** `using cart = state(...).memory(...)`
|
|
130
|
+
disposes on scope exit, including failure cases. Use plain `const`
|
|
131
|
+
for module-scope state in production.
|
|
132
|
+
- **Microtask draining.** Signal-to-Observable emission and write
|
|
133
|
+
coalescing both use `queueMicrotask`. After `state.set(...)`, call
|
|
134
|
+
`await settle()` (two microtask drains) before asserting derived
|
|
135
|
+
state, then `await el.updateComplete` for any host re-render.
|
|
136
|
+
|
|
137
|
+
## Rules for behaviour changes
|
|
138
|
+
|
|
139
|
+
- **Public surface is committed.** `value`, `signal`, `$`, `ready`,
|
|
140
|
+
`loaded`, `defaultValue`, `namespace`, `storage`, `destroy`,
|
|
141
|
+
`[Symbol.dispose]`, `[Symbol.asyncDispose]` (idb only), variant
|
|
142
|
+
write methods. Don't rename, don't shape-shift. Add new things;
|
|
143
|
+
don't change existing ones.
|
|
144
|
+
- **Variant API dispatch is `Kind<T>`-driven.** Don't add separate
|
|
145
|
+
`mapState()` / `setState()` factories. If a new shape comes up,
|
|
146
|
+
extend the `Kind<T>` classifier and add a matching variant API
|
|
147
|
+
interface.
|
|
148
|
+
- **Storage keys are namespace strings.** `state('hannah/cart').local(...)`
|
|
149
|
+
uses `'hannah/cart'` as the storage key. Don't expose a separate
|
|
150
|
+
key parameter; the namespace IS the key.
|
|
151
|
+
|
|
152
|
+
## Pointers
|
|
153
|
+
|
|
154
|
+
- **State plan and Phase 0 findings:** the original implementation plan
|
|
155
|
+
lives in `~/.claude/plans/indexed-twirling-stroustrup.md`; spike
|
|
156
|
+
artifacts and findings are at
|
|
157
|
+
`packages/schmancy/_scratch/spikes/findings.md` (gitignored).
|
|
158
|
+
- **Skill doc for downstream consumers:**
|
|
159
|
+
`packages/schmancy/skills/schmancy/state.md`.
|
|
160
|
+
- **Migration cheatsheet** for moving off the v1 `createContext`:
|
|
161
|
+
`packages/schmancy/src/state/MIGRATION.md`.
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Migrating from `createContext` to `state()`
|
|
2
|
+
|
|
3
|
+
Cheatsheet for moving call sites off the v1 `createContext` /
|
|
4
|
+
`@select` / `createCompoundSelector` / `selectItem` family to
|
|
5
|
+
`@mhmo91/schmancy/state`.
|
|
6
|
+
|
|
7
|
+
The v1 surface has been deleted from `@mhmo91/schmancy`. There is no
|
|
8
|
+
parallel API; every consumer needs to switch.
|
|
9
|
+
|
|
10
|
+
## Imports
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
// Before
|
|
14
|
+
import { createContext, select, selectItem, createCompoundSelector } from '@mhmo91/schmancy'
|
|
15
|
+
|
|
16
|
+
// After
|
|
17
|
+
import { state, computed, observe, bindState, stateFromObservable } from '@mhmo91/schmancy/state'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Defining a state
|
|
21
|
+
|
|
22
|
+
| v1 | v2 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| `createContext<T>(initial, 'memory', 'foo')` | `state<T>('feature/foo').memory(initial)` |
|
|
25
|
+
| `createContext<T>(initial, 'session', 'foo')` | `state<T>('feature/foo').session(initial)` |
|
|
26
|
+
| `createContext<T>(initial, 'local', 'foo')` | `state<T>('feature/foo').local(initial)` |
|
|
27
|
+
| `createContext<T>(initial, 'indexeddb', 'foo')` | `state<T>('feature/foo').idb(initial)` |
|
|
28
|
+
|
|
29
|
+
The string namespace replaces the v1 third-argument storage key. It
|
|
30
|
+
must contain a `/` (compile-time enforced via the
|
|
31
|
+
`${string}/${string}` template literal). Storage is keyed off the
|
|
32
|
+
namespace string.
|
|
33
|
+
|
|
34
|
+
If your file already declares the initial value in a typed const, drop
|
|
35
|
+
the type arg:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const initial: CartState = { items: [], total: 0 }
|
|
39
|
+
const cart = state('hannah/cart').session(initial) // T inferred from `initial`
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Reading
|
|
43
|
+
|
|
44
|
+
| v1 | v2 |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `cart.value` | `cart.value` (unchanged) |
|
|
47
|
+
| `cart.$.subscribe(...)` | `cart.$.subscribe(...)` (unchanged) |
|
|
48
|
+
| `cart.ready` (boolean) | `cart.loaded` (boolean) + `await cart.ready` (Promise<void>) |
|
|
49
|
+
|
|
50
|
+
`cart.ready` is now a Promise that resolves when initial load completes
|
|
51
|
+
(success or fallback). `cart.loaded` is the boolean runtime flag. Use
|
|
52
|
+
whichever fits the call site.
|
|
53
|
+
|
|
54
|
+
## Writing
|
|
55
|
+
|
|
56
|
+
| v1 | v2 |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `cart.set({ total: 12 })` | `cart.set({ total: 12 })` (unchanged) |
|
|
59
|
+
| `cart.set({ items: [] }, false)` | `cart.set({ items: [] }, false)` (unchanged) |
|
|
60
|
+
| `cart.replace(next)` | `cart.replace(next)` (unchanged) |
|
|
61
|
+
| `cart.delete('total')` | `cart.delete('total')` (unchanged) |
|
|
62
|
+
| Manual `replace({ ...current, ...patch })` cascade | `cart.update(d => { … })` — immer recipe, single notification |
|
|
63
|
+
|
|
64
|
+
For `Map<K, V>` shapes:
|
|
65
|
+
|
|
66
|
+
| v1 | v2 |
|
|
67
|
+
|---|---|
|
|
68
|
+
| `docs.set('id', doc)` | `docs.set('id', doc)` (unchanged — MapAPI dispatch) |
|
|
69
|
+
|
|
70
|
+
For `Set<U>`:
|
|
71
|
+
|
|
72
|
+
| v1 | v2 |
|
|
73
|
+
|---|---|
|
|
74
|
+
| Manual `replace(new Set([...current, item]))` | `sel.add('item')` |
|
|
75
|
+
| Manual replace-without-item | `sel.delete('item')` (returns boolean) |
|
|
76
|
+
| | `sel.toggle('item')` (new) |
|
|
77
|
+
|
|
78
|
+
For arrays:
|
|
79
|
+
|
|
80
|
+
| v1 | v2 |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `array.push(...items)` | `array.push(...items)` (unchanged) |
|
|
83
|
+
| Manual `replace(current.filter(...))` | `array.update(d => d.splice(...))` (immer) |
|
|
84
|
+
|
|
85
|
+
For nullable references and primitives:
|
|
86
|
+
|
|
87
|
+
| v1 | v2 |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `editing.set({ id: 'x' })` then `editing.set(null)` | Same (ScalarAPI accepts the union directly) |
|
|
90
|
+
|
|
91
|
+
## Subscribing in a component
|
|
92
|
+
|
|
93
|
+
The v1 `@select` decorator is gone. Three options in v2, in order of
|
|
94
|
+
preference:
|
|
95
|
+
|
|
96
|
+
### (1) Default — direct read in render (zero ceremony)
|
|
97
|
+
|
|
98
|
+
`$LitElement()` composes `SignalWatcher`, so signal reads in `render()`
|
|
99
|
+
auto-track. Just import the state and use it inline:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
@customElement('cart-view')
|
|
103
|
+
class CartView extends $LitElement() {
|
|
104
|
+
render() { return html`Items: ${cart.value.items.length}` }
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
No decorator, no field, no binding code. The imported `cart` singleton
|
|
109
|
+
IS the binding.
|
|
110
|
+
|
|
111
|
+
### (2) `@observe(source)` — when you need a class field
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
class CartView extends $LitElement() {
|
|
115
|
+
@observe(cart) cart!: CartState
|
|
116
|
+
|
|
117
|
+
onClick() {
|
|
118
|
+
console.log(this.cart) // event handler needs `this.cart`
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
render() {
|
|
122
|
+
return html`Items: ${this.cart.items.length}`
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Reads return the latest value. Caller writes are dropped with a dev
|
|
128
|
+
warning. Same decorator shape as `@property` — works under the existing
|
|
129
|
+
tsconfig.
|
|
130
|
+
|
|
131
|
+
### (3) `bindState(host, source)` — for hosts that aren't `$LitElement`
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
class CustomHost extends LitElement {
|
|
135
|
+
cart = bindState(this, cart)
|
|
136
|
+
render() { return html`Items: ${this.cart.value.items.length}` }
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Compound selectors → `computed`
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
// Before
|
|
144
|
+
const cartItemCount = createCompoundSelector(
|
|
145
|
+
[cartContext],
|
|
146
|
+
[cart => cart.items.length],
|
|
147
|
+
count => count,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
// After
|
|
151
|
+
import { computed } from '@mhmo91/schmancy/state'
|
|
152
|
+
const cartItemCount = computed(() => cart.value.items.length)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Cross-state composition just works:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
const orderTotal = computed(() => cart.value.subtotal + tip.value.amount)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Reading any `state.value` inside `computed(fn)` auto-tracks. No
|
|
162
|
+
explicit dependency array.
|
|
163
|
+
|
|
164
|
+
## Side effects → `effect`
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
import { effect } from '@mhmo91/schmancy/state'
|
|
168
|
+
|
|
169
|
+
const stop = effect(() => {
|
|
170
|
+
document.title = `${cart.value.items.length} items`
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
// later, when no longer needed:
|
|
174
|
+
stop[Symbol.dispose]()
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Eager run + microtask-coalesced re-runs. Returns a `Disposable`.
|
|
178
|
+
|
|
179
|
+
## Observable bridges
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
// Before
|
|
183
|
+
const userPresence$ = new BehaviorSubject({ online: false, since: 0 })
|
|
184
|
+
// (read with .value, subscribe with .$, no persistence story)
|
|
185
|
+
|
|
186
|
+
// After
|
|
187
|
+
import { stateFromObservable } from '@mhmo91/schmancy/state'
|
|
188
|
+
|
|
189
|
+
const userPresence = stateFromObservable(
|
|
190
|
+
presence$, // Observable<PresenceState>
|
|
191
|
+
'app/presence',
|
|
192
|
+
{ online: false, since: 0 },
|
|
193
|
+
)
|
|
194
|
+
// userPresence has .value, .$, all variant API methods, lifecycle.
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Lifecycle / disposal
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
// Module scope — same as v1
|
|
201
|
+
export const cart = state('hannah/cart').session(initial)
|
|
202
|
+
|
|
203
|
+
// Test scope — using
|
|
204
|
+
it('cart updates total on add', () => {
|
|
205
|
+
using cart = state('test/cart').memory(initial)
|
|
206
|
+
cart.update(d => { d.items.push(item) })
|
|
207
|
+
expect(cart.value.total).toBe(item.price)
|
|
208
|
+
}) // [Symbol.dispose] runs here, even on assertion failure
|
|
209
|
+
|
|
210
|
+
// IDB-backed in tests — await using flushes pending writes
|
|
211
|
+
it('persists across reloads', async () => {
|
|
212
|
+
await using cart = state('test/cart').idb(initial)
|
|
213
|
+
// ...
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
// Imperative cleanup (samwa back-compat alias)
|
|
217
|
+
cart.destroy()
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Things that went away
|
|
221
|
+
|
|
222
|
+
- **`createCompoundSelector`** — use `computed()`.
|
|
223
|
+
- **`@select` and `@selectItem` decorators** — use direct render reads
|
|
224
|
+
via `$LitElement` (default), `@observe` (field-level), or `bindState`
|
|
225
|
+
(non-Lit hosts).
|
|
226
|
+
- **`IStore` / `ICollectionStore` / `IArrayStore` interfaces** — no
|
|
227
|
+
longer needed. The variant write API dispatch is type-level.
|
|
228
|
+
- **`error$` per-store Subject** — errors flow through console + the
|
|
229
|
+
`StateStorageError` thrown from `save()` for IDB write failures.
|
|
230
|
+
- **Tree-scoped `<state-provider>`** — replaced by
|
|
231
|
+
`<schmancy-context provides={[…]}>`. Same intent (per-subtree
|
|
232
|
+
isolation of a state), different API: in v1 the provider was a
|
|
233
|
+
primitive; in v2 the state surface stays unchanged and the
|
|
234
|
+
`<schmancy-context>` element is what scopes a subtree. Consumer
|
|
235
|
+
code (`cart.value`, `cart.set(...)`) is identical inside and
|
|
236
|
+
outside the element. See `SCOPING.md` for the details.
|
|
237
|
+
|
|
238
|
+
## Footguns
|
|
239
|
+
|
|
240
|
+
- **Don't use `using` at module scope.** It disposes on module GC,
|
|
241
|
+
which is roughly never until the tab closes. Plain `const` for
|
|
242
|
+
module singletons, `using` for test/function scope only.
|
|
243
|
+
- **Namespaces always contain `/`.** `state('cart')` is a TypeError;
|
|
244
|
+
use `state('feature/cart')`.
|
|
245
|
+
- **Don't `state.signal.set(...)` directly.** Go through the variant
|
|
246
|
+
API so write-coalescing and persistence stay coherent.
|
|
247
|
+
- **Inline literals without a typed const narrow T.**
|
|
248
|
+
`state('app/x').memory({ items: [], total: 0 })` infers
|
|
249
|
+
`{ items: never[]; total: number }`. Either use a typed const first
|
|
250
|
+
or pass the type arg: `state<CartState>('app/x').memory({...})`.
|
|
251
|
+
|
|
252
|
+
## Pointers
|
|
253
|
+
|
|
254
|
+
- Skill / API reference: `packages/schmancy/skills/schmancy/state.md`
|
|
255
|
+
- Agent brief: `packages/schmancy/src/state/CLAUDE.md`
|
|
256
|
+
- Tree-scoping reference: `packages/schmancy/src/state/SCOPING.md`
|
|
257
|
+
- Original plan: `~/.claude/plans/indexed-twirling-stroustrup.md`
|
|
258
|
+
- Scoping plan: `~/.claude/plans/federated-petting-penguin.md`
|