@mhmo91/schmancy 0.9.28 → 0.10.2
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 +1005 -2215
- package/dist/active-host-CcIa2tmW.cjs +1 -0
- package/dist/active-host-CcIa2tmW.cjs.map +1 -0
- package/dist/active-host-CvNYoprt.js +57 -0
- package/dist/active-host-CvNYoprt.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 +12678 -7791
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +265 -1453
- 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-DHVANBbr.js} +20 -15
- package/dist/area-DHVANBbr.js.map +1 -0
- package/dist/area-ZupIezvU.cjs +12 -0
- package/dist/area-ZupIezvU.cjs.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +2 -2
- package/dist/{audio-Dvr-RBzE.cjs → audio-CluX8Qpq.cjs} +1 -1
- package/dist/{audio-Dvr-RBzE.cjs.map → audio-CluX8Qpq.cjs.map} +1 -1
- package/dist/{audio-ql6nvY0y.js → audio-DcXphulJ.js} +1 -1
- package/dist/{audio-ql6nvY0y.js.map → audio-DcXphulJ.js.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-Bn525CTp.cjs +115 -0
- package/dist/autocomplete-Bn525CTp.cjs.map +1 -0
- package/dist/{autocomplete-C2P0Soht.js → autocomplete-pHvsyfbH.js} +29 -26
- package/dist/autocomplete-pHvsyfbH.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-IyEtsNI4.cjs +80 -0
- package/dist/boat-IyEtsNI4.cjs.map +1 -0
- package/dist/{boat-DXZ0k7oa.js → boat-_Yv3M6YM.js} +43 -54
- package/dist/boat-_Yv3M6YM.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-DGYhpTnO.cjs → busy-CjM39APN.cjs} +4 -4
- package/dist/busy-CjM39APN.cjs.map +1 -0
- package/dist/{busy-iRjq6Nvd.js → busy-Ck2IXJ4r.js} +14 -9
- package/dist/busy-Ck2IXJ4r.js.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-DjYnCckw.cjs → card-DIxDuuth.cjs} +6 -6
- package/dist/card-DIxDuuth.cjs.map +1 -0
- package/dist/{card-wUTjx0EC.js → card-DUWZmMHc.js} +41 -30
- package/dist/card-DUWZmMHc.js.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-CGdFXuWQ.cjs +39 -0
- package/dist/checkbox-CGdFXuWQ.cjs.map +1 -0
- package/dist/{checkbox-VBSenxgb.js → checkbox-DPS1mWG-.js} +86 -82
- package/dist/checkbox-DPS1mWG-.js.map +1 -0
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BDS9lkPa.js → chips-BnnXQSA-.js} +146 -136
- package/dist/chips-BnnXQSA-.js.map +1 -0
- package/dist/{chips-D6ptH5re.cjs → chips-UoFbwmlG.cjs} +19 -19
- package/dist/chips-UoFbwmlG.cjs.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-BzRmBZzz.cjs → code-highlight-CMilN0B8.cjs} +15 -15
- package/dist/code-highlight-CMilN0B8.cjs.map +1 -0
- package/dist/{code-highlight-Bi91XHJN.js → code-highlight-kFUJ1Eet.js} +37 -40
- package/dist/code-highlight-kFUJ1Eet.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-BIyrzTRZ.cjs +131 -0
- package/dist/date-range-BIyrzTRZ.cjs.map +1 -0
- package/dist/{date-range-ClTMg1AB.js → date-range-DOstCIg8.js} +16 -17
- package/dist/date-range-DOstCIg8.js.map +1 -0
- package/dist/date-range-inline-4P7zqeVe.cjs +43 -0
- package/dist/{date-range-inline-B9Dp2z6C.cjs.map → date-range-inline-4P7zqeVe.cjs.map} +1 -1
- package/dist/{date-range-inline-CpKG6qt2.js → date-range-inline-BVycTWLb.js} +5 -5
- package/dist/{date-range-inline-CpKG6qt2.js.map → date-range-inline-BVycTWLb.js.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-Cz9ok9si.cjs → details-BJBbZOO6.cjs} +9 -9
- package/dist/details-BJBbZOO6.cjs.map +1 -0
- package/dist/{details-CPjlqQD4.js → details-DPc5GxPa.js} +19 -18
- package/dist/details-DPc5GxPa.js.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-ghgyw5CU.js → divider-BvJsmSPH.js} +11 -9
- package/dist/divider-BvJsmSPH.js.map +1 -0
- package/dist/{divider-CILo3_vi.cjs → divider-DPT3XnG5.cjs} +3 -3
- package/dist/divider-DPT3XnG5.cjs.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-CbjBr_Ds.js → expand-BMzocdtj.js} +24 -20
- package/dist/expand-BMzocdtj.js.map +1 -0
- package/dist/expand-CTqBWVXo.cjs +141 -0
- package/dist/expand-CTqBWVXo.cjs.map +1 -0
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-DK9MQtPJ.js → extra-BeHlUhzv.js} +19 -14
- package/dist/extra-BeHlUhzv.js.map +1 -0
- package/dist/{extra-BZeZOMBI.cjs → extra-h_cuxRII.cjs} +6 -6
- package/dist/extra-h_cuxRII.cjs.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-BfCvGeY9.js → float-CTc1xxqH.js} +2 -2
- package/dist/{float-BfCvGeY9.js.map → float-CTc1xxqH.js.map} +1 -1
- package/dist/float-CwVBs11k.cjs +1 -0
- package/dist/{float-CuZ8LOgB.cjs.map → float-CwVBs11k.cjs.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-BbCVrcas.js} +27 -24
- package/dist/icons-BbCVrcas.js.map +1 -0
- package/dist/icons-qEQW4pjM.cjs +52 -0
- package/dist/icons-qEQW4pjM.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BmyHW8km.js → iframe-BJfDIEJf.js} +17 -11
- package/dist/iframe-BJfDIEJf.js.map +1 -0
- package/dist/iframe-D6HTruav.cjs +24 -0
- package/dist/iframe-D6HTruav.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-LTK3cctF.js} +34 -34
- package/dist/input-LTK3cctF.js.map +1 -0
- package/dist/input-U26axtcs.cjs +51 -0
- package/dist/input-U26axtcs.cjs.map +1 -0
- package/dist/{input-chip-DN-cwf11.cjs → input-chip-CADXt0X5.cjs} +2 -2
- package/dist/input-chip-CADXt0X5.cjs.map +1 -0
- package/dist/{input-chip-BQrjpjaQ.js → input-chip-Ch-aCs3c.js} +7 -4
- package/dist/input-chip-Ch-aCs3c.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-C4xmnU4n.js} +1 -1
- package/dist/{layout-fjM1DWlF.js.map → layout-C4xmnU4n.js.map} +1 -1
- package/dist/{layout-CTfRXQoz.cjs → layout-Dmh6fxh0.cjs} +1 -1
- package/dist/{layout-CTfRXQoz.cjs.map → layout-Dmh6fxh0.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-DbYUSfVl.cjs +202 -0
- package/dist/lightbox-DbYUSfVl.cjs.map +1 -0
- package/dist/{lightbox-CY52Z_ig.js → lightbox-DqG2z3Cn.js} +13 -12
- package/dist/lightbox-DqG2z3Cn.js.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/list-CLX4sSAw.cjs +40 -0
- package/dist/list-CLX4sSAw.cjs.map +1 -0
- package/dist/{list-D7wUxu1C.js → list-D6-_E5ZD.js} +26 -21
- package/dist/list-D6-_E5ZD.js.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-Ct6iYe-4.cjs} +64 -66
- package/dist/mailbox-Ct6iYe-4.cjs.map +1 -0
- package/dist/{mailbox--EN-JhjV.js → mailbox-DsPII8HR.js} +137 -126
- package/dist/mailbox-DsPII8HR.js.map +1 -0
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-B0S_q3ma.js → map-Dhy3ta9v.js} +11 -9
- package/dist/map-Dhy3ta9v.js.map +1 -0
- package/dist/map-WXeVkx2K.cjs +80 -0
- package/dist/map-WXeVkx2K.cjs.map +1 -0
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-COeFpb6n.js → menu-Bhd3EapX.js} +15 -10
- package/dist/menu-Bhd3EapX.js.map +1 -0
- package/dist/{menu-3edZGQ1x.cjs → menu-Cg2aaDjs.cjs} +5 -5
- package/dist/menu-Cg2aaDjs.cjs.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-CcIWET41.js +627 -0
- package/dist/mixins-CcIWET41.js.map +1 -0
- package/dist/mixins-De3xfjrm.cjs +298 -0
- package/dist/mixins-De3xfjrm.cjs.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-CC-TFN5v.js → notification-CVLqQ8c_.js} +40 -38
- package/dist/notification-CVLqQ8c_.js.map +1 -0
- package/dist/notification-D_PQjBSf.cjs +23 -0
- package/dist/notification-D_PQjBSf.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/option-DDU_goh1.cjs +43 -0
- package/dist/option-DDU_goh1.cjs.map +1 -0
- package/dist/{option-BwAF4nAw.js → option-rm4HebVs.js} +9 -7
- package/dist/option-rm4HebVs.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/{components-DZgJWHdZ.js → payment-card-form-C0dHYZIv.js} +21 -22
- package/dist/{components-DZgJWHdZ.js.map → payment-card-form-C0dHYZIv.js.map} +1 -1
- package/dist/payment-card-form-DNvmZxs4.cjs +73 -0
- package/dist/{components-DkmEgyAc.cjs.map → payment-card-form-DNvmZxs4.cjs.map} +1 -1
- package/dist/payment-card-form.cjs +1 -0
- package/dist/payment-card-form.js +2 -0
- package/dist/{progress-Bk_Q1Shy.js → progress-BRerM5Bn.js} +16 -13
- package/dist/progress-BRerM5Bn.js.map +1 -0
- package/dist/{progress-Yz6EMNSu.cjs → progress-U3LQkpM2.cjs} +3 -3
- package/dist/progress-U3LQkpM2.cjs.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-BcdcjLNC.js → radio-group-BZ2WoOXJ.js} +14 -12
- package/dist/radio-group-BZ2WoOXJ.js.map +1 -0
- package/dist/radio-group-D7mm-yvJ.cjs +40 -0
- package/dist/radio-group-D7mm-yvJ.cjs.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-DJTjNIT_.cjs +26 -0
- package/dist/scroll-DJTjNIT_.cjs.map +1 -0
- package/dist/{scroll-DXQv0ejL.js → scroll-qL-HkMdP.js} +9 -7
- package/dist/scroll-qL-HkMdP.js.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-BvA7v-gL.cjs} +6 -6
- package/dist/select-BvA7v-gL.cjs.map +1 -0
- package/dist/{select-DKyGWDsG.js → select-CnPXUeSf.js} +23 -20
- package/dist/select-CnPXUeSf.js.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-C3TLKItO.js → sheet-BRL07BB4.js} +22 -20
- package/dist/sheet-BRL07BB4.js.map +1 -0
- package/dist/sheet-BYQJAHQn.cjs +35 -0
- package/dist/sheet-BYQJAHQn.cjs.map +1 -0
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/sheet.service-B25bsrYG.cjs +1 -0
- package/dist/{sheet.service-RcDBwHmv.cjs.map → sheet.service-B25bsrYG.cjs.map} +1 -1
- package/dist/{sheet.service-Dlv20Zfc.js → sheet.service-SPQ8oLCi.js} +3 -3
- package/dist/{sheet.service-Dlv20Zfc.js.map → sheet.service-SPQ8oLCi.js.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-BGs6m0Cm.cjs +1 -0
- package/dist/sound.service-BGs6m0Cm.cjs.map +1 -0
- package/dist/{sound.service-DWZe6swU.js → sound.service-kKfsN0m-.js} +3 -3
- package/dist/sound.service-kKfsN0m-.js.map +1 -0
- package/dist/splash-screen-BDt4PInk.cjs +41 -0
- package/dist/splash-screen-BDt4PInk.cjs.map +1 -0
- package/dist/{splash-screen-DbI5RgBf.js → splash-screen-C8JCqX5L.js} +12 -9
- package/dist/splash-screen-C8JCqX5L.js.map +1 -0
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/src-CpRNClhg.cjs +263 -0
- package/dist/src-CpRNClhg.cjs.map +1 -0
- package/dist/{src-00DfxCJq.js → src-CqdnWGgr.js} +299 -351
- package/dist/src-CqdnWGgr.js.map +1 -0
- package/dist/state-BusMG6sM.js +868 -0
- package/dist/state-BusMG6sM.js.map +1 -0
- package/dist/state-DNdCPITt.cjs +1 -0
- package/dist/state-DNdCPITt.cjs.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-C8jQy8Ym.js +24 -0
- package/dist/surface-C8jQy8Ym.js.map +1 -0
- package/dist/surface-Du2Y4vXd.cjs +7 -0
- package/dist/surface-Du2Y4vXd.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-0RfeCa00.cjs +31 -0
- package/dist/tabs-0RfeCa00.cjs.map +1 -0
- package/dist/{tabs-Ce55RbwF.js → tabs-Cyahh9Q6.js} +22 -22
- package/dist/tabs-Cyahh9Q6.js.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-CXCcTVnf.js} +30 -28
- package/dist/textarea-CXCcTVnf.js.map +1 -0
- package/dist/textarea-jqRrLxmo.cjs +39 -0
- package/dist/textarea-jqRrLxmo.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-pbxlt72h.js → theme-2KZW2Rfs.js} +45 -41
- package/dist/{theme-pbxlt72h.js.map → theme-2KZW2Rfs.js.map} +1 -1
- package/dist/theme-Hjz9sCN-.cjs +181 -0
- package/dist/{theme-B-IJ2r7Q.cjs.map → theme-Hjz9sCN-.cjs.map} +1 -1
- package/dist/{theme-button-CEMeAUOL.js → theme-button-9uF1eoHz.js} +3 -4
- package/dist/theme-button-9uF1eoHz.js.map +1 -0
- package/dist/theme-button-C7QIbke1.cjs +8 -0
- package/dist/theme-button-C7QIbke1.cjs.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-BrUbGoeQ.cjs +1 -0
- package/dist/theme.service-BrUbGoeQ.cjs.map +1 -0
- package/dist/{theme.service-cOfPrtfe.js → theme.service-CmbOGMA8.js} +4 -4
- package/dist/theme.service-CmbOGMA8.js.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-CrjZdf7Y.js → window-C7yY9yp5.js} +28 -30
- package/dist/window-C7yY9yp5.js.map +1 -0
- package/dist/window-DtUOWiAj.cjs +59 -0
- package/dist/window-DtUOWiAj.cjs.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +15 -4
- 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 +71 -54
- package/src/agent/agent-entry.ts +5 -21
- package/src/agent/helpers.ts +159 -0
- package/src/agent/schmancy-skill.ts +71 -0
- 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/emotional-sounds.ts +0 -2
- package/src/audio/sound.service.ts +7 -13
- 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 +6 -13
- 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-service.ts +0 -2
- package/src/notification/notification.ts +6 -3
- package/src/option/option.ts +4 -3
- package/src/overlay/overlay.animations.ts +183 -37
- 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 -10
- 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 +190 -0
- package/src/state/index.ts +877 -0
- package/src/state/persist.ts +208 -0
- package/src/state/schmancy-context.ts +130 -0
- package/src/state/state.test-d.ts +227 -0
- package/src/state/state.test.ts +868 -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 +2 -19
- package/types/src/agent/helpers.d.ts +0 -27
- 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/audio/emotional-sounds.d.ts +0 -1
- package/types/src/audio/sound.service.d.ts +1 -1
- 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-service.d.ts +0 -1
- 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 -6
- 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.stack.d.ts +0 -2
- 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 +23 -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 +32 -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 +0 -51
- 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/agent/index.d.ts +0 -1
- 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
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
# State — `@mhmo91/schmancy/state`
|
|
2
|
+
|
|
3
|
+
Reactive state primitive. Module-scoped singletons keyed by namespace.
|
|
4
|
+
Every state exposes a TC39 signal, an RxJS Observable, a sync getter,
|
|
5
|
+
and a hydration promise — pick the surface that fits the call site.
|
|
6
|
+
|
|
7
|
+
This module replaced the v1 `createContext` / `@select` /
|
|
8
|
+
`createCompoundSelector` system. There is no parallel API; use `state()`
|
|
9
|
+
for everything.
|
|
10
|
+
|
|
11
|
+
## Quick reference
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { state, computed, bindState, stateFromObservable } from '@mhmo91/schmancy/state'
|
|
15
|
+
|
|
16
|
+
// Define
|
|
17
|
+
const cart = state<CartState>('hannah/cart').session({ items: [], total: 0 })
|
|
18
|
+
|
|
19
|
+
// Read
|
|
20
|
+
cart.value // CartState — sync getter
|
|
21
|
+
cart.signal.get() // CartState — raw TC39 signal
|
|
22
|
+
cart.$ // Observable<CartState> — RxJS, microtask-coalesced
|
|
23
|
+
await cart.ready // resolves when initial load completes
|
|
24
|
+
cart.loaded // boolean — true after first load
|
|
25
|
+
|
|
26
|
+
// Write (ObjectAPI dispatch — see "Variant write APIs" below)
|
|
27
|
+
cart.set({ total: 12 }) // partial merge
|
|
28
|
+
cart.replace({ items: [], total: 0 })
|
|
29
|
+
cart.update(d => { d.items.push(item) }) // immer
|
|
30
|
+
cart.delete('total')
|
|
31
|
+
|
|
32
|
+
// Subscribe in a $LitElement — direct read auto-tracks via SignalWatcher
|
|
33
|
+
class CartView extends $LitElement() {
|
|
34
|
+
render() { return html`Items: ${cart.value.items.length}` }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Derived
|
|
38
|
+
const lineCount = computed(() => cart.value.items.length)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Three call shapes
|
|
42
|
+
|
|
43
|
+
The factory has three overloads. Pick the shape that fits the file.
|
|
44
|
+
|
|
45
|
+
### (1) Typed-const — recommended default
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
const initial: CartState = { items: [], total: 0 }
|
|
49
|
+
export const cart = state('hannah/cart').session(initial)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Type comes from the typed const. No type-arg, no registry augmentation.
|
|
53
|
+
Three lines, no casts. Use this for most modules.
|
|
54
|
+
|
|
55
|
+
**Note:** an inline literal without a typed const narrows T to the literal's
|
|
56
|
+
exact type (`{ items: never[]; total: number }`). For inline literals use
|
|
57
|
+
form (2) or (3).
|
|
58
|
+
|
|
59
|
+
### (2) Inline — explicit type-arg
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
export const cart = state<CartState>('hannah/cart').session({ items: [], total: 0 })
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
For inline declarations or one-off namespaces. The literal is contextually
|
|
66
|
+
typed against `CartState`; `[]` widens to `CartItem[]` correctly.
|
|
67
|
+
|
|
68
|
+
### (3) Registry-augmented — typo-safe, no type-arg
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
declare module '@mhmo91/schmancy/state' {
|
|
72
|
+
interface SchmancyStateRegistry {
|
|
73
|
+
'hannah/cart': CartState
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const cart = state('hannah/cart').session({ items: [], total: 0 })
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
What the augmentation buys per namespace:
|
|
81
|
+
|
|
82
|
+
- **Typo prevention** at the type level for that exact namespace string
|
|
83
|
+
- **Autocomplete** — typing `state('` suggests every registered namespace
|
|
84
|
+
- **Catalog** — `SchmancyStateRegistry` is the index of registered states
|
|
85
|
+
- **Duplicate detection** — TS interface-merging fails on conflicting
|
|
86
|
+
`'hannah/cart': X` / `'hannah/cart': Y` declarations across files
|
|
87
|
+
|
|
88
|
+
Per-namespace opt-in. Files that augment get the strict path; files that
|
|
89
|
+
don't keep using forms (1) or (2). No global on/off switch.
|
|
90
|
+
|
|
91
|
+
## Namespace convention
|
|
92
|
+
|
|
93
|
+
Every namespace MUST contain a `/`. The factory enforces this at compile
|
|
94
|
+
time via the `${string}/${string}` template.
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
state('cart') // ❌ TypeError at runtime + compile error
|
|
98
|
+
state('hannah/cart') // ✅
|
|
99
|
+
state('pam/payouts/docs') // ✅ — multiple slashes are fine
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Convention: `<feature>/<name>`. The feature prefix groups related states.
|
|
103
|
+
|
|
104
|
+
## Storage backends
|
|
105
|
+
|
|
106
|
+
| Method | Backing | Survives refresh | Survives close | Lifecycle |
|
|
107
|
+
|--------|---------|------------------|----------------|-----------|
|
|
108
|
+
| `.memory(initial)` | JS heap | ❌ | ❌ | `Disposable` |
|
|
109
|
+
| `.session(initial)` | `sessionStorage` | ✅ | ❌ (per-tab) | `Disposable` |
|
|
110
|
+
| `.local(initial)` | `localStorage` | ✅ | ✅ | `Disposable` |
|
|
111
|
+
| `.idb(initial)` | IndexedDB | ✅ | ✅ | `Disposable & AsyncDisposable` |
|
|
112
|
+
|
|
113
|
+
Web-storage backends round-trip `Map` and `Set` through a JSON tunnel
|
|
114
|
+
(serialized as `{ $kind: 'Map' | 'Set', … }`). IDB stores native objects
|
|
115
|
+
and skips the tunnel.
|
|
116
|
+
|
|
117
|
+
All persistent backends batch writes through a microtask-coalesced queue
|
|
118
|
+
per state — multiple `set` / `replace` / `update` calls in the same task
|
|
119
|
+
collapse to one `save()` invocation with the latest value.
|
|
120
|
+
|
|
121
|
+
## Variant write APIs (`Kind<T>` dispatch)
|
|
122
|
+
|
|
123
|
+
The write surface is determined by `T` automatically — no separate
|
|
124
|
+
`mapState()` / `setState()` factories.
|
|
125
|
+
|
|
126
|
+
### `ObjectAPI<T>` — plain objects
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
const cart = state<CartState>('hannah/cart').session(initial)
|
|
130
|
+
cart.set({ total: 12 }) // partial merge (default)
|
|
131
|
+
cart.set({ items: [] }, false) // replace (no merge)
|
|
132
|
+
cart.replace({ items: [], total: 0 }) // full replace
|
|
133
|
+
cart.update(d => { d.items.push(item) }) // immer recipe
|
|
134
|
+
cart.delete('total') // typed: K extends keyof T
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### `MapAPI<T>` — `Map<K, V>`
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
const docs = state<Map<string, Doc>>('pam/payouts/docs').idb(new Map())
|
|
141
|
+
docs.set('doc-1', doc) // (key, value) — not partial
|
|
142
|
+
docs.delete('doc-1')
|
|
143
|
+
docs.replace(new Map(entries))
|
|
144
|
+
docs.clear()
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### `SetAPI<T>` — `Set<U>`
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
const sel = state<Set<string>>('pam/payouts/sel').memory(new Set())
|
|
151
|
+
sel.add('id')
|
|
152
|
+
sel.toggle('id') // add if absent, remove if present
|
|
153
|
+
sel.delete('id') // returns boolean (was-present)
|
|
154
|
+
sel.replace(new Set(initial))
|
|
155
|
+
sel.clear()
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### `ArrayAPI<T>` — arrays
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
const items = state<Item[]>('feature/items').memory([])
|
|
162
|
+
items.push(a, b, c)
|
|
163
|
+
items.update(d => { d.push(x) }) // immer
|
|
164
|
+
items.replace(next)
|
|
165
|
+
items.clear()
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### `ScalarAPI<T>` — primitives + nullable references
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
const editing = state<Doc | null>('pam/edit').memory(null)
|
|
172
|
+
editing.set(doc) // single-arg setter (Partial<T|null> → T|null)
|
|
173
|
+
editing.set(null)
|
|
174
|
+
editing.replace(doc)
|
|
175
|
+
|
|
176
|
+
const flag = state<boolean>('pam/footer').memory(false)
|
|
177
|
+
flag.set(true)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The `Kind<T>` classifier routes:
|
|
181
|
+
|
|
182
|
+
- `Map<K, V>` → `MapAPI`
|
|
183
|
+
- `Set<U>` → `SetAPI`
|
|
184
|
+
- `T[]` / `readonly T[]` → `ArrayAPI`
|
|
185
|
+
- `string | number | boolean | bigint | symbol` → `ScalarAPI`
|
|
186
|
+
- Any union containing `null` or `undefined` → `ScalarAPI`
|
|
187
|
+
- All other objects → `ObjectAPI`
|
|
188
|
+
|
|
189
|
+
## Reading state
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
cart.value // T — current value, sync getter
|
|
193
|
+
cart.signal.get() // T — same value via the raw TC39 signal
|
|
194
|
+
cart.signal // Signal.State<T> — for use inside computed()
|
|
195
|
+
cart.$ // Observable<T> — emits initial + on every change
|
|
196
|
+
cart.ready // Promise<void> — resolves once load completes
|
|
197
|
+
cart.loaded // boolean — true after first load attempt
|
|
198
|
+
cart.namespace // 'hannah/cart' (literal type preserved)
|
|
199
|
+
cart.storage // 'session' (literal type preserved)
|
|
200
|
+
cart.defaultValue // the initial passed to the factory
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Subscribing in a component
|
|
204
|
+
|
|
205
|
+
Three options, in order of preference. The first covers the 80% case
|
|
206
|
+
with zero ceremony.
|
|
207
|
+
|
|
208
|
+
### (1) Default — direct read inside `render()`
|
|
209
|
+
|
|
210
|
+
`$LitElement()` composes `SignalWatcher` from `@lit-labs/signals`.
|
|
211
|
+
Every signal read inside `render()` auto-tracks; the host re-renders
|
|
212
|
+
on change. No decorator, no field, no binding code.
|
|
213
|
+
|
|
214
|
+
```ts
|
|
215
|
+
import { LitElement, html } from 'lit'
|
|
216
|
+
import { customElement } from 'lit/decorators.js'
|
|
217
|
+
import { $LitElement } from '@mixins/index'
|
|
218
|
+
import { cart } from './cart.context'
|
|
219
|
+
|
|
220
|
+
@customElement('cart-view')
|
|
221
|
+
export class CartView extends $LitElement() {
|
|
222
|
+
render() {
|
|
223
|
+
return html`<span>Items: ${cart.value.items.length}</span>`
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
The imported `cart` singleton IS the binding. Reading `cart.value`
|
|
229
|
+
(or `cart.signal.get()` directly) inside render registers the
|
|
230
|
+
component as a subscriber for the host's lifetime. On `cart.set(...)`,
|
|
231
|
+
the host re-renders.
|
|
232
|
+
|
|
233
|
+
Use this for:
|
|
234
|
+
- Any component that just renders state into the template.
|
|
235
|
+
- Computed expressions over multiple states: `${cart.value.total + tip.value.amount}`.
|
|
236
|
+
|
|
237
|
+
### (2) `@observe(source) field!: T` — field-level binding
|
|
238
|
+
|
|
239
|
+
When the value needs to be a class field — for event handlers,
|
|
240
|
+
derived methods, DevTools inspection, or readability:
|
|
241
|
+
|
|
242
|
+
```ts
|
|
243
|
+
import { observe } from '@mhmo91/schmancy/state'
|
|
244
|
+
|
|
245
|
+
@customElement('cart-view')
|
|
246
|
+
export class CartView extends $LitElement() {
|
|
247
|
+
@observe(cart) cart!: CartState
|
|
248
|
+
|
|
249
|
+
onClick() {
|
|
250
|
+
console.log('current cart:', this.cart) // field access in handlers
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
render() {
|
|
254
|
+
return html`<span>Items: ${this.cart.items.length}</span>`
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Reads return the latest emitted value (falls back to `source.value`
|
|
260
|
+
before the first emission lands). Caller writes are dropped with a
|
|
261
|
+
dev-mode warning — the source is the single source of truth.
|
|
262
|
+
|
|
263
|
+
Wiring uses Lit's static `addInitializer` to install a
|
|
264
|
+
`ReactiveController` per instance. Multiple `@observe` decorators on
|
|
265
|
+
the same class register independent controllers; they compose without
|
|
266
|
+
ordering concerns. Same decorator shape as `@property`/`@state`/`@query` —
|
|
267
|
+
works under the existing tsconfig with no migration.
|
|
268
|
+
|
|
269
|
+
### (3) `bindState(host, source)` — imperative form
|
|
270
|
+
|
|
271
|
+
For hosts that aren't `$LitElement` subclasses (rare):
|
|
272
|
+
|
|
273
|
+
```ts
|
|
274
|
+
import { bindState } from '@mhmo91/schmancy/state'
|
|
275
|
+
|
|
276
|
+
class CustomHost extends LitElement { // not a $LitElement subclass
|
|
277
|
+
cart = bindState(this, cart)
|
|
278
|
+
render() {
|
|
279
|
+
return html`<span>Items: ${this.cart.value.items.length}</span>`
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Same lifecycle guarantees as `@observe`, no decorator. Returned
|
|
285
|
+
`BoundState<T>` exposes `.value` and `.$`.
|
|
286
|
+
|
|
287
|
+
## Derived state — `computed()`
|
|
288
|
+
|
|
289
|
+
`computed(fn)` is re-exported directly from `@lit-labs/signals`. Reading
|
|
290
|
+
any `state.value` or `signal.get()` inside the callback auto-tracks it
|
|
291
|
+
as a dependency.
|
|
292
|
+
|
|
293
|
+
```ts
|
|
294
|
+
import { computed } from '@mhmo91/schmancy/state'
|
|
295
|
+
|
|
296
|
+
const cartItemCount = computed(() => cart.value.items.length)
|
|
297
|
+
const orderTotal = computed(() => cart.value.total + tip.value.amount)
|
|
298
|
+
|
|
299
|
+
// Read with .get() — auto-tracks if called from within another computed
|
|
300
|
+
cartItemCount.get()
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
`computed()` defaults to reference-equality dedup. Pass a custom `equals`
|
|
304
|
+
through `Signal.Options<T>` if you need value-equality.
|
|
305
|
+
|
|
306
|
+
## Observable → state — `stateFromObservable`
|
|
307
|
+
|
|
308
|
+
Lift an RxJS source into a state.
|
|
309
|
+
|
|
310
|
+
```ts
|
|
311
|
+
import { stateFromObservable } from '@mhmo91/schmancy/state'
|
|
312
|
+
|
|
313
|
+
const userPresence = stateFromObservable(
|
|
314
|
+
presence$, // Observable<PresenceState>
|
|
315
|
+
'app/presence', // namespace
|
|
316
|
+
{ online: false, since: 0 }, // initial
|
|
317
|
+
)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The returned state is `'memory'`-backed by default (override via
|
|
321
|
+
`{ storage: 'session' | 'local' | 'indexeddb' }`). Subscription is
|
|
322
|
+
created once; cleanup on dispose unsubscribes the source.
|
|
323
|
+
|
|
324
|
+
## Lifecycle
|
|
325
|
+
|
|
326
|
+
### Module-scope singleton (most common)
|
|
327
|
+
|
|
328
|
+
```ts
|
|
329
|
+
// frontend/src/cart/cart.context.ts
|
|
330
|
+
export const cart = state<CartState>('hannah/cart').session(initial)
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Plain `const`. Lives for app lifetime.
|
|
334
|
+
|
|
335
|
+
**Footgun:** do **not** use `using` at module scope — it disposes when
|
|
336
|
+
the module record is GC'd, which is roughly never until the tab closes.
|
|
337
|
+
Reserve `using` / `await using` for test or function scope.
|
|
338
|
+
|
|
339
|
+
### Test-scoped — `using` / `await using`
|
|
340
|
+
|
|
341
|
+
```ts
|
|
342
|
+
import { it, expect } from 'vitest'
|
|
343
|
+
|
|
344
|
+
it('cart updates total on add', () => {
|
|
345
|
+
using cart = state<CartState>('test/cart').memory(initial)
|
|
346
|
+
cart.update(d => { d.items.push(item) })
|
|
347
|
+
expect(cart.value.total).toBe(item.price)
|
|
348
|
+
}) // [Symbol.dispose] runs here automatically — even on assertion failure.
|
|
349
|
+
|
|
350
|
+
it('persists across reloads', async () => {
|
|
351
|
+
await using cart = state<CartState>('test/cart').idb(initial)
|
|
352
|
+
// ... awaits IDB flush + close before the next test.
|
|
353
|
+
})
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### `destroy()` — imperative alias
|
|
357
|
+
|
|
358
|
+
`state.destroy()` is the imperative form (alias for `[Symbol.dispose]()`).
|
|
359
|
+
Use when working in a context where `using` isn't available. For IDB
|
|
360
|
+
states, `destroy()` fires `[Symbol.asyncDispose]` without awaiting —
|
|
361
|
+
fire-and-forget cleanup.
|
|
362
|
+
|
|
363
|
+
### What disposal does
|
|
364
|
+
|
|
365
|
+
- Drains pending writes (microtask-coalesced queue)
|
|
366
|
+
- Unsubscribes any `stateFromObservable` source
|
|
367
|
+
- Closes the IDB connection (for IDB-backed states)
|
|
368
|
+
- Releases the namespace claim — the same `'feature/name'` can be
|
|
369
|
+
re-registered after disposal
|
|
370
|
+
|
|
371
|
+
## Scoping — `<schmancy-context provides>`
|
|
372
|
+
|
|
373
|
+
The default state is a module-scoped singleton: `cart` is the same
|
|
374
|
+
instance everywhere. To **isolate** the same `cart` for a subtree —
|
|
375
|
+
two side-by-side checkout flows, an `<iframe>`-like wizard, an
|
|
376
|
+
embedded preview — wrap the subtree in `<schmancy-context>`.
|
|
377
|
+
|
|
378
|
+
```ts
|
|
379
|
+
class App extends $LitElement() {
|
|
380
|
+
render() {
|
|
381
|
+
return html`
|
|
382
|
+
<schmancy-context .provides=${[cart]}>
|
|
383
|
+
<cart-view></cart-view> <!-- isolated copy -->
|
|
384
|
+
</schmancy-context>
|
|
385
|
+
<cart-summary></cart-summary> <!-- module-scoped global -->
|
|
386
|
+
`
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Inside the element, `cart.value`, `cart.set(...)`, `cart.update(...)`,
|
|
392
|
+
and every other read/write resolve to a per-element isolated copy.
|
|
393
|
+
Outside, they continue to read the global. Nested
|
|
394
|
+
`<schmancy-context>` resolves to the **closest** provider per
|
|
395
|
+
namespace.
|
|
396
|
+
|
|
397
|
+
### What you write is unchanged
|
|
398
|
+
|
|
399
|
+
Consumers don't change. The same `cart.value` inside `render()`, the
|
|
400
|
+
same `cart.set(...)` in a click handler, the same `cart.update(...)`
|
|
401
|
+
after an `await fetch(...)` — all of it auto-resolves to the right
|
|
402
|
+
instance based on tree position.
|
|
403
|
+
|
|
404
|
+
```ts
|
|
405
|
+
class CartView extends $LitElement() {
|
|
406
|
+
render() {
|
|
407
|
+
return html`
|
|
408
|
+
<button @click=${() => cart.set({ total: 0 })}>Clear</button>
|
|
409
|
+
<button @click=${this.handleAdd}>Add</button>
|
|
410
|
+
Items: ${cart.value.items.length}
|
|
411
|
+
`
|
|
412
|
+
}
|
|
413
|
+
handleAdd() { cart.update(d => { d.items.push({}) }) }
|
|
414
|
+
async handleSubmit() {
|
|
415
|
+
const data = await fetch('/items').then(r => r.json())
|
|
416
|
+
cart.update(d => { d.items = data }) // resolves correctly after await
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
Coverage of the call paths is provided by `SchmancyElement`:
|
|
422
|
+
|
|
423
|
+
- `render()` and every Lit lifecycle hook — wrapped at construction.
|
|
424
|
+
- Class methods (`handleAdd`, `handleSubmit`) — wrapped at construction.
|
|
425
|
+
- `await` continuations inside class methods — propagated via the
|
|
426
|
+
`Promise.then` patch in `state/active-host.ts`.
|
|
427
|
+
- `addEventListener(type, fn)` on the host — wrapped (and unwrapped on
|
|
428
|
+
`removeEventListener`).
|
|
429
|
+
- Inline arrow handlers in templates (`@click=${() => …}`) — resolve
|
|
430
|
+
via the `window.event.composedPath()` fallback in
|
|
431
|
+
`resolveActiveHost()`.
|
|
432
|
+
|
|
433
|
+
Pure async callbacks with no DOM origin — a websocket `onmessage`,
|
|
434
|
+
`setInterval` with no triggering user event — fall through to the
|
|
435
|
+
module-scoped global. That is the correct semantic: those callbacks
|
|
436
|
+
have no tree position to resolve to.
|
|
437
|
+
|
|
438
|
+
### Lifecycle
|
|
439
|
+
|
|
440
|
+
- The isolated copy is created at `<schmancy-context>` connect and
|
|
441
|
+
seeded with the **current global value** at that moment.
|
|
442
|
+
- It is destroyed on `<schmancy-context>` disconnect (pending writes
|
|
443
|
+
flush, adapters close).
|
|
444
|
+
- Storage backend is always **memory** for isolated copies — they
|
|
445
|
+
share lifetime with the element, not with `localStorage` /
|
|
446
|
+
`sessionStorage` / IndexedDB. The global continues to persist on
|
|
447
|
+
whichever backend it was created with.
|
|
448
|
+
|
|
449
|
+
### `provides` shape
|
|
450
|
+
|
|
451
|
+
`provides` accepts the same state instances you import. Pass several:
|
|
452
|
+
|
|
453
|
+
```ts
|
|
454
|
+
<schmancy-context .provides=${[cart, menu, draft]}>...</schmancy-context>
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
States not listed in `provides` fall through to the global from inside
|
|
458
|
+
the element — useful when only one or two namespaces need scoping.
|
|
459
|
+
|
|
460
|
+
## Migration from v1 `createContext`
|
|
461
|
+
|
|
462
|
+
```ts
|
|
463
|
+
// v1
|
|
464
|
+
const cart = createContext<CartState>(initial, 'session', 'hannah_cart')
|
|
465
|
+
class CartView extends LitElement {
|
|
466
|
+
@select(cart) accessor cart!: CartState
|
|
467
|
+
}
|
|
468
|
+
const total = createCompoundSelector([cart], [c => c.total], t => t)
|
|
469
|
+
|
|
470
|
+
// v2
|
|
471
|
+
const cart = state<CartState>('hannah/cart').session(initial)
|
|
472
|
+
class CartView extends LitElement {
|
|
473
|
+
@observe(cart) cart!: CartState // or: cart = bindState(this, cart)
|
|
474
|
+
}
|
|
475
|
+
const total = computed(() => cart.value.total)
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
Surface-equivalent: `.value`, `.set(partial)`, `.replace(next)`, `.$`,
|
|
479
|
+
`.delete(key)` all map directly. Storage keys move from arbitrary
|
|
480
|
+
strings (`'hannah_cart'`) to namespace strings (`'hannah/cart'`).
|
|
481
|
+
|
|
482
|
+
## Rules
|
|
483
|
+
|
|
484
|
+
- **One state per namespace.** The factory throws on a duplicate
|
|
485
|
+
`state('hannah/cart')` until the first instance is disposed. Module-
|
|
486
|
+
scoped singletons are the assumption.
|
|
487
|
+
- **Namespaces always contain `/`.** Compile-time enforced.
|
|
488
|
+
- **No `using` at module scope.** Disposes never; use plain `const`.
|
|
489
|
+
- **No regex-parsing of LLM output**, no hand-written "please return
|
|
490
|
+
JSON" — same project rules as elsewhere. State surface only validates
|
|
491
|
+
types it constructed itself.
|
|
492
|
+
- **Treat `state.signal` as read access.** Don't `state.signal.set(…)`
|
|
493
|
+
directly — go through the variant API so write-through-persist and
|
|
494
|
+
observable emission stay coherent.
|
|
495
|
+
- **Don't cache `state.signal` / `state.$` across tree boundaries.**
|
|
496
|
+
Every read goes through context resolution; the underlying signal
|
|
497
|
+
(and Observable) returned by the getter is the *currently resolved*
|
|
498
|
+
instance. If you store `cart.signal` in a variable and the host
|
|
499
|
+
later moves into a different `<schmancy-context>` subtree, the
|
|
500
|
+
cached reference lags. Read inline (`cart.value`, `cart.$`) instead
|
|
501
|
+
of caching.
|
|
@@ -131,6 +131,21 @@ surface-inverse (inverse-surface) · surface-inverseOn (inverse-on-surface)
|
|
|
131
131
|
|
|
132
132
|
Only reach for `bg-[var(--schmancy-sys-color-X)]` when the token isn't aliased — e.g. a custom `--schmancy-*` property you've registered yourself.
|
|
133
133
|
|
|
134
|
+
## Typography override
|
|
135
|
+
|
|
136
|
+
`<schmancy-theme>` ships no font attribute. To swap the app's typeface, override `--schmancy-font-family` on `:root` in a consumer stylesheet. Schmancy's theme stylesheet reads it with a `sans-serif` fallback and fans it out to `--md-ref-typeface-brand`, `--md-ref-typeface-plain`, and `--default-font-family`, so every `<schmancy-*>` component picks it up via the cascade:
|
|
137
|
+
|
|
138
|
+
```css
|
|
139
|
+
:root {
|
|
140
|
+
--schmancy-font-family: 'Space Grotesk', sans-serif;
|
|
141
|
+
font-family: var(--schmancy-font-family);
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
The second line (`font-family: var(...)`) makes the typeface inherit by non-schmancy elements inside your app too — without it, plain `<div>`s use the browser default.
|
|
146
|
+
|
|
147
|
+
There is currently **no `--schmancy-font-mono` equivalent**. `--font-mono` in [theme.style.css](../../src/theme/theme.style.css) hardcodes Tailwind's default `ui-monospace, SFMono-Regular, …` stack. Consumers that want a custom monospace typeface either (a) use Tailwind's `font-mono` utility with the default stack and accept it, or (b) override `--font-mono` directly on `:root` with the same cascade pattern as the sans hook. Option (b) is a local escape hatch, not a schmancy-blessed API — expect future schmancy versions to add a proper `--schmancy-font-mono` hook instead.
|
|
148
|
+
|
|
134
149
|
## Notes
|
|
135
150
|
- Color and scheme persist to `sessionStorage` per instance
|
|
136
151
|
- Generates success/warning/info/error semantic color tokens automatically
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# schmancy-timeline-tile
|
|
2
|
+
|
|
3
|
+
> One cell in a procurement-stage timeline rail. Renders an empty / filled / stacked paper-card tile with a 2-letter glyph label, optional tooltip + caption, and a built-in fan-on-hover orchestration for stacked variants.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<!-- Empty cell (placeholder for a missing stage doc) -->
|
|
9
|
+
<schmancy-timeline-tile state="empty" glyph="PO"></schmancy-timeline-tile>
|
|
10
|
+
|
|
11
|
+
<!-- Single filled cell with tooltip + caption -->
|
|
12
|
+
<schmancy-timeline-tile
|
|
13
|
+
state="filled"
|
|
14
|
+
glyph="IN"
|
|
15
|
+
tooltip="INV-2025-0001"
|
|
16
|
+
caption="EUR 12,400"
|
|
17
|
+
@tile-click=${(e) => openInspect(e.detail)}
|
|
18
|
+
></schmancy-timeline-tile>
|
|
19
|
+
|
|
20
|
+
<!-- Stack of N revisions: wrapper carries `data-stack-id` + `--fan-count`,
|
|
21
|
+
stack-top sits on top with the ×N badge, siblings reveal on hover.
|
|
22
|
+
The wrapper toggles `data-fanned` automatically — no consumer
|
|
23
|
+
pointer wiring required. -->
|
|
24
|
+
<div
|
|
25
|
+
data-stack-id="po-123"
|
|
26
|
+
style="position: relative; width: 32px; height: 40px; --fan-count: 3;"
|
|
27
|
+
>
|
|
28
|
+
<schmancy-timeline-tile state="stack-sibling" glyph="PO" .index=${0}></schmancy-timeline-tile>
|
|
29
|
+
<schmancy-timeline-tile state="stack-sibling" glyph="PO" .index=${1}></schmancy-timeline-tile>
|
|
30
|
+
<schmancy-timeline-tile
|
|
31
|
+
state="stack-top"
|
|
32
|
+
glyph="PO"
|
|
33
|
+
.index=${2}
|
|
34
|
+
.stackCount=${3}
|
|
35
|
+
tooltip="PO-2025-0007 · rev 3"
|
|
36
|
+
caption="EUR 12,400"
|
|
37
|
+
></schmancy-timeline-tile>
|
|
38
|
+
</div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Properties
|
|
42
|
+
|
|
43
|
+
| Property | Type | Default | Description |
|
|
44
|
+
|----------|------|---------|-------------|
|
|
45
|
+
| `state` | `'empty' \| 'filled' \| 'stack-top' \| 'stack-sibling'` | `'empty'` | Render mode (reflected) |
|
|
46
|
+
| `glyph` | `string` | `''` | 2-letter stage label (e.g. `RQ`, `PO`, `OC`, `DN`, `IN`) |
|
|
47
|
+
| `stackCount` | `number?` | `undefined` | When `state="stack-top"` and > 1, renders the ×N badge |
|
|
48
|
+
| `index` | `number?` | `undefined` | Sibling position in the stack (drives `--i` for fan offset; reflected) |
|
|
49
|
+
| `tooltip` | `string?` | `undefined` | Tooltip text shown on hover / focus |
|
|
50
|
+
| `caption` | `string?` | `undefined` | Caption rendered below the tile (hidden on `stack-sibling`) |
|
|
51
|
+
|
|
52
|
+
## Events
|
|
53
|
+
|
|
54
|
+
| Event | Detail | Description |
|
|
55
|
+
|-------|--------|-------------|
|
|
56
|
+
| `tile-click` | `{ glyph, state }` | Fires on click for any non-`empty` state. Bubbles + composed. |
|
|
57
|
+
|
|
58
|
+
## Stack fan orchestration
|
|
59
|
+
|
|
60
|
+
When `state="stack-top"`, the component subscribes a `pointerover` pipe to its parent element (the stack wrapper). The pipe is hover-intent: `pointerover` events with a target that closest-matches `[data-stack-id]` immediately set `data-fanned` on the wrapper; leaving the wrapper waits 800 ms before clearing the attribute, so the cursor can cross the gap between fanned siblings without collapsing the stack. The attribute lifetime IS the fanned state — sibling tiles read it via the `:host-context([data-fanned])` selector and translate edge-to-edge.
|
|
61
|
+
|
|
62
|
+
The consumer's wrapper element MUST carry:
|
|
63
|
+
- `data-stack-id="<unique>"` so the pointerover pipe can match the target
|
|
64
|
+
- `position: relative` so the absolutely-positioned tiles align to it
|
|
65
|
+
- `width` + `height` matching `--schmancy-tile-w` / `--schmancy-tile-h` (default `32px` / `40px`)
|
|
66
|
+
- `--fan-count: <N>` so each tile knows the total stack size
|
|
67
|
+
|
|
68
|
+
`stack-sibling` tiles set `pointer-events: none` until the wrapper is fanned, then re-enable so the user can click any revision.
|
|
69
|
+
|
|
70
|
+
## Slots
|
|
71
|
+
|
|
72
|
+
None. Glyph and caption are props, not slot content — keeps the tile self-contained and addressable from a `repeat()` template.
|
|
73
|
+
|
|
74
|
+
## Accessibility
|
|
75
|
+
|
|
76
|
+
- Filled / stack tiles render a native `<button type="button">` with `tabindex="0"` and `role="button"`.
|
|
77
|
+
- `aria-label` is composed from `glyph`, `caption`, and `tooltip`.
|
|
78
|
+
- Empty tiles set `tabindex="-1"` and `aria-label="<glyph> · empty"`.
|
|
79
|
+
- Focus shows a 2px ring in `--schmancy-sys-color-primary-default` with a 3px offset.
|
|
80
|
+
|
|
81
|
+
## Tokens consumed
|
|
82
|
+
|
|
83
|
+
| Custom property | Source |
|
|
84
|
+
|-----------------|--------|
|
|
85
|
+
| `--schmancy-sys-color-outline` | dashed border, paper-card lines, sibling outline |
|
|
86
|
+
| `--schmancy-sys-color-surface-containerLowest` | filled-card background, tooltip background |
|
|
87
|
+
| `--schmancy-sys-color-surface-on` | tooltip + caption text |
|
|
88
|
+
| `--schmancy-sys-color-surface-onVariant` | empty-state glyph |
|
|
89
|
+
| `--schmancy-sys-color-primary-default` | hover border, focus ring, top-edge tint, ×N badge background |
|
|
90
|
+
| `--schmancy-sys-color-primary-on` | ×N badge text |
|
|
91
|
+
| `--schmancy-sys-color-primary-onContainer` | filled-state glyph color |
|
|
92
|
+
| `--schmancy-tile-w`, `--schmancy-tile-h` | host width / height (defaults `32px` / `40px`) |
|
|
93
|
+
| `--fan-count`, `--i` | wrapper-driven fan layout (consumer or component-set) |
|
|
94
|
+
|
|
95
|
+
Theme overrides cascade from any ancestor `<schmancy-theme>` — wrap the timeline in a tinted theme block to recolor the rail without touching the component.
|