@mhmo91/schmancy 0.10.6 → 0.10.8
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/README.md +11 -0
- package/custom-elements.json +11 -880
- package/dist/agent/{flow-3RrZM-e7.js.map → flow-CvG1fLW5.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +5223 -10404
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +4 -537
- package/dist/agent/{vendor-material-color-33Mj762T.js.map → vendor-material-color-DcL7ZPxx.js.map} +1 -1
- package/dist/{area-oZjYJlUy.cjs → area-8IBAXzbC.cjs} +1 -1
- package/dist/{area-oZjYJlUy.cjs.map → area-8IBAXzbC.cjs.map} +1 -1
- package/dist/{area-CIZZ5tbB.js → area-DSW_LYXQ.js} +1 -1
- package/dist/{area-CIZZ5tbB.js.map → area-DSW_LYXQ.js.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-X20i6D62.cjs → autocomplete-9PLjlFYt.cjs} +1 -1
- package/dist/{autocomplete-X20i6D62.cjs.map → autocomplete-9PLjlFYt.cjs.map} +1 -1
- package/dist/{autocomplete-C1oDLuol.js → autocomplete-CXwwmUbC.js} +2 -2
- package/dist/{autocomplete-C1oDLuol.js.map → autocomplete-CXwwmUbC.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.js +2 -2
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-CUx58Gwe.cjs → boat-CpGNeWav.cjs} +1 -1
- package/dist/{boat-CUx58Gwe.cjs.map → boat-CpGNeWav.cjs.map} +1 -1
- package/dist/{boat-CpE0yAlK.js → boat-Dwn5oXd8.js} +1 -1
- package/dist/{boat-CpE0yAlK.js.map → boat-Dwn5oXd8.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +1 -1
- package/dist/breadcrumb.js +1 -1
- package/dist/{busy-D1DKZhgV.cjs → busy-CUUgvimY.cjs} +1 -1
- package/dist/{busy-D1DKZhgV.cjs.map → busy-CUUgvimY.cjs.map} +1 -1
- package/dist/{busy-C9n-DUY4.js → busy-Cjm1BYVC.js} +1 -1
- package/dist/{busy-C9n-DUY4.js.map → busy-Cjm1BYVC.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-B3hN-qzk.js → card-BR22oYCL.js} +1 -1
- package/dist/{card-B3hN-qzk.js.map → card-BR22oYCL.js.map} +1 -1
- package/dist/{card-DZJ7qjf2.cjs → card-BjZ_WRr3.cjs} +1 -1
- package/dist/{card-DZJ7qjf2.cjs.map → card-BjZ_WRr3.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-DapdzDow.cjs → checkbox-2e8v7CNg.cjs} +1 -1
- package/dist/{checkbox-DapdzDow.cjs.map → checkbox-2e8v7CNg.cjs.map} +1 -1
- package/dist/{checkbox-CvmB1ev9.js → checkbox-CsADwyfu.js} +1 -1
- package/dist/{checkbox-CvmB1ev9.js.map → checkbox-CsADwyfu.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-C8Y3_3ke.js → chips-C9HwVbGT.js} +2 -2
- package/dist/{chips-C8Y3_3ke.js.map → chips-C9HwVbGT.js.map} +1 -1
- package/dist/{chips-7g6mWRuh.cjs → chips-DPCcO55o.cjs} +1 -1
- package/dist/{chips-7g6mWRuh.cjs.map → chips-DPCcO55o.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-ZfUl4duV.cjs → date-range-63-FC7gD.cjs} +1 -1
- package/dist/{date-range-ZfUl4duV.cjs.map → date-range-63-FC7gD.cjs.map} +1 -1
- package/dist/{date-range-DdcaPX7C.js → date-range-CFaP-8Os.js} +2 -2
- package/dist/{date-range-DdcaPX7C.js.map → date-range-CFaP-8Os.js.map} +1 -1
- package/dist/{date-range-inline-QQmIWhZ4.js → date-range-inline-BCuK_XCv.js} +1 -1
- package/dist/{date-range-inline-QQmIWhZ4.js.map → date-range-inline-BCuK_XCv.js.map} +1 -1
- package/dist/{date-range-inline-D-d7N6bh.cjs → date-range-inline-Cpdqd-8B.cjs} +1 -1
- package/dist/{date-range-inline-D-d7N6bh.cjs.map → date-range-inline-Cpdqd-8B.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 +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Dpjh-XnJ.js → details-0dOlqHHL.js} +1 -1
- package/dist/{details-Dpjh-XnJ.js.map → details-0dOlqHHL.js.map} +1 -1
- package/dist/{details-3rL6UQU8.cjs → details-qKikJIyH.cjs} +1 -1
- package/dist/{details-3rL6UQU8.cjs.map → details-qKikJIyH.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{divider-BdfEKQsH.js → divider-BxkIl0H1.js} +1 -1
- package/dist/{divider-BdfEKQsH.js.map → divider-BxkIl0H1.js.map} +1 -1
- package/dist/{divider-CutXDz3F.cjs → divider-CX9mmWZ8.cjs} +1 -1
- package/dist/{divider-CutXDz3F.cjs.map → divider-CX9mmWZ8.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{expand-DM6zfZf7.cjs → expand-891JuQuN.cjs} +1 -1
- package/dist/{expand-DM6zfZf7.cjs.map → expand-891JuQuN.cjs.map} +1 -1
- package/dist/{expand-DrgMPJbu.js → expand-BeAx94MP.js} +2 -2
- package/dist/{expand-DrgMPJbu.js.map → expand-BeAx94MP.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{float-1iihPek5.js → float-BPF2WO4L.js} +1 -1
- package/dist/{float-1iihPek5.js.map → float-BPF2WO4L.js.map} +1 -1
- package/dist/{float-Ckyk85XG.cjs → float-D7vvODxx.cjs} +1 -1
- package/dist/{float-Ckyk85XG.cjs.map → float-D7vvODxx.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-BF1c3Dk1.js.map → form-CFvwnfuJ.js.map} +1 -1
- package/dist/{form-DeO5XX3b.cjs.map → form-Ceijw1aA.cjs.map} +1 -1
- 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/{icons-DUkcTZAY.js → icons-BKxW_7QR.js} +1 -1
- package/dist/{icons-DUkcTZAY.js.map → icons-BKxW_7QR.js.map} +1 -1
- package/dist/{icons-CV-fiGcW.cjs → icons-QSdo-8h9.cjs} +1 -1
- package/dist/{icons-CV-fiGcW.cjs.map → icons-QSdo-8h9.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-C9tj7F6Y.js → iframe-BxvbhyTS.js} +1 -1
- package/dist/{iframe-C9tj7F6Y.js.map → iframe-BxvbhyTS.js.map} +1 -1
- package/dist/{iframe-DF97oGtZ.cjs → iframe-CMKV-bm8.cjs} +1 -1
- package/dist/{iframe-DF97oGtZ.cjs.map → iframe-CMKV-bm8.cjs.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +52 -58
- package/dist/{input-TW9G3n7X.cjs → input-BFhJU74_.cjs} +1 -1
- package/dist/{input-TW9G3n7X.cjs.map → input-BFhJU74_.cjs.map} +1 -1
- package/dist/{input-DE7x223Y.js → input-DIqaR8Mr.js} +1 -1
- package/dist/{input-DE7x223Y.js.map → input-DIqaR8Mr.js.map} +1 -1
- package/dist/{input-chip-BdoaVw_D.js → input-chip-D9tlSk_2.js} +1 -1
- package/dist/{input-chip-BdoaVw_D.js.map → input-chip-D9tlSk_2.js.map} +1 -1
- package/dist/{input-chip-Do48eI5r.cjs → input-chip-w09qTt7J.cjs} +1 -1
- package/dist/{input-chip-Do48eI5r.cjs.map → input-chip-w09qTt7J.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{lightbox-sPfnYzjJ.cjs → lightbox-CK035jsx.cjs} +1 -1
- package/dist/{lightbox-sPfnYzjJ.cjs.map → lightbox-CK035jsx.cjs.map} +1 -1
- package/dist/{lightbox-DcutIyjx.js → lightbox-GChmL3Ff.js} +1 -1
- package/dist/{lightbox-DcutIyjx.js.map → lightbox-GChmL3Ff.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-C4vasUly.cjs → list-B3P37zlH.cjs} +1 -1
- package/dist/{list-C4vasUly.cjs.map → list-B3P37zlH.cjs.map} +1 -1
- package/dist/{list-BWrtrdgs.js → list-J-Fz24Z1.js} +1 -1
- package/dist/{list-BWrtrdgs.js.map → list-J-Fz24Z1.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{menu-3yXDZusj.cjs → menu-BnFd8CwU.cjs} +1 -1
- package/dist/{menu-3yXDZusj.cjs.map → menu-BnFd8CwU.cjs.map} +1 -1
- package/dist/{menu-CxChOxWT.js → menu-DHTlUwXS.js} +2 -2
- package/dist/{menu-CxChOxWT.js.map → menu-DHTlUwXS.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-47_CZk7q.cjs +298 -0
- package/dist/{mixins-Db7gjDah.cjs.map → mixins-47_CZk7q.cjs.map} +1 -1
- package/dist/mixins-PBJJGiiP.js +627 -0
- package/dist/{mixins-Dw6hVfy-.js.map → mixins-PBJJGiiP.js.map} +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-DKYy9qVe.cjs → notification-B6YBL0hx.cjs} +1 -1
- package/dist/{notification-DKYy9qVe.cjs.map → notification-B6YBL0hx.cjs.map} +1 -1
- package/dist/{notification-ycbUBbOu.js → notification-C-5Bv3vj.js} +2 -2
- package/dist/{notification-ycbUBbOu.js.map → notification-C-5Bv3vj.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-DtOhMd3k.js → option-B7q6VXCu.js} +1 -1
- package/dist/{option-DtOhMd3k.js.map → option-B7q6VXCu.js.map} +1 -1
- package/dist/{option-zgVge3BH.cjs → option-DVQRa3nr.cjs} +1 -1
- package/dist/{option-zgVge3BH.cjs.map → option-DVQRa3nr.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-AFqYBqrI.js → overlay.confirm-body-CAY5xK1n.js} +1 -1
- package/dist/{overlay.confirm-body-AFqYBqrI.js.map → overlay.confirm-body-CAY5xK1n.js.map} +1 -1
- package/dist/{overlay.confirm-body-DctQLDao.cjs → overlay.confirm-body-XZtErofy.cjs} +1 -1
- package/dist/{overlay.confirm-body-DctQLDao.cjs.map → overlay.confirm-body-XZtErofy.cjs.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-B9On2-Aa.js → overlay.service-BZE_lwKO.js} +2 -2
- package/dist/{overlay.service-B9On2-Aa.js.map → overlay.service-BZE_lwKO.js.map} +1 -1
- package/dist/{overlay.service-k2nCE4pi.cjs → overlay.service-Oyjrw831.cjs} +1 -1
- package/dist/{overlay.service-k2nCE4pi.cjs.map → overlay.service-Oyjrw831.cjs.map} +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +2 -2
- package/dist/{progress-BFWzmTlz.js → progress-BHXLYs9i.js} +1 -1
- package/dist/{progress-BFWzmTlz.js.map → progress-BHXLYs9i.js.map} +1 -1
- package/dist/{progress-C4TGG2eN.cjs → progress-D99bumkC.cjs} +1 -1
- package/dist/{progress-C4TGG2eN.cjs.map → progress-D99bumkC.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-DTNAW5dd.js → radio-group-BYra5_q1.js} +1 -1
- package/dist/{radio-group-DTNAW5dd.js.map → radio-group-BYra5_q1.js.map} +1 -1
- package/dist/{radio-group-xLRp1g57.cjs → radio-group-DYsycLmD.cjs} +1 -1
- package/dist/{radio-group-xLRp1g57.cjs.map → radio-group-DYsycLmD.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{rxjs-utils-BK8VMe3K.js.map → rxjs-utils-CVeJQ9KG.js.map} +1 -1
- package/dist/{rxjs-utils-DhOKenkS.cjs.map → rxjs-utils-DCUHg_Ml.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-BCmdqSQU.js → scroll-TqNWZ0lo.js} +1 -1
- package/dist/{scroll-BCmdqSQU.js.map → scroll-TqNWZ0lo.js.map} +1 -1
- package/dist/{scroll-Bdgb-vRy.cjs → scroll-cayCBOrq.cjs} +1 -1
- package/dist/{scroll-Bdgb-vRy.cjs.map → scroll-cayCBOrq.cjs.map} +1 -1
- package/dist/{select-Cv5t_PT3.cjs → select-CRdSmlLq.cjs} +1 -1
- package/dist/{select-Cv5t_PT3.cjs.map → select-CRdSmlLq.cjs.map} +1 -1
- package/dist/{select-COGARE0b.js → select-nzq0qFlF.js} +2 -2
- package/dist/{select-COGARE0b.js.map → select-nzq0qFlF.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/skills/INDEX.md +9 -3
- package/dist/skills/schmancy/INDEX.md +9 -3
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-DbGbGttg.js → splash-screen-BJeIiJ_e.js} +1 -1
- package/dist/{splash-screen-DbGbGttg.js.map → splash-screen-BJeIiJ_e.js.map} +1 -1
- package/dist/{splash-screen-B8rFbjqT.cjs → splash-screen-BMLQXzDq.cjs} +1 -1
- package/dist/{splash-screen-B8rFbjqT.cjs.map → splash-screen-BMLQXzDq.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-b8D-Ec-Q.cjs → src-DE11tq2Q.cjs} +1 -1
- package/dist/{src-b8D-Ec-Q.cjs.map → src-DE11tq2Q.cjs.map} +1 -1
- package/dist/{src-YRir9pOP.js → src-qvWlNoMO.js} +34 -40
- package/dist/{src-YRir9pOP.js.map → src-qvWlNoMO.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-BvudRtf5.cjs → surface-D426MFLR.cjs} +1 -1
- package/dist/{surface-BvudRtf5.cjs.map → surface-D426MFLR.cjs.map} +1 -1
- package/dist/{surface-BE7sGTBt.js → surface-DG7Cmm9V.js} +1 -1
- package/dist/{surface-BE7sGTBt.js.map → surface-DG7Cmm9V.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-DIzCRsA3.js → tabs-B7siJkM5.js} +1 -1
- package/dist/{tabs-DIzCRsA3.js.map → tabs-B7siJkM5.js.map} +1 -1
- package/dist/{tabs-C0XKld1Z.cjs → tabs-t3nMfg1F.cjs} +1 -1
- package/dist/{tabs-C0XKld1Z.cjs.map → tabs-t3nMfg1F.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-UbZzBwqm.js → textarea-DSxHCCle.js} +1 -1
- package/dist/{textarea-UbZzBwqm.js.map → textarea-DSxHCCle.js.map} +1 -1
- package/dist/{textarea-BCDCGCJd.cjs → textarea-o9vysorM.cjs} +1 -1
- package/dist/{textarea-BCDCGCJd.cjs.map → textarea-o9vysorM.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-CIsI-sFj.cjs → theme-Ce9eIP05.cjs} +1 -1
- package/dist/{theme-CIsI-sFj.cjs.map → theme-Ce9eIP05.cjs.map} +1 -1
- package/dist/{theme-Qh-yPEPL.js → theme-XO3nHDbW.js} +2 -2
- package/dist/{theme-Qh-yPEPL.js.map → theme-XO3nHDbW.js.map} +1 -1
- package/dist/{theme-button-CjTnfs9x.js → theme-button-DNutDO1j.js} +1 -1
- package/dist/{theme-button-CjTnfs9x.js.map → theme-button-DNutDO1j.js.map} +1 -1
- package/dist/{theme-button-Dv1D_Vil.cjs → theme-button-H7PRz_bg.cjs} +1 -1
- package/dist/{theme-button-Dv1D_Vil.cjs.map → theme-button-H7PRz_bg.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.interface-v7SkAnDH.js.map → theme.interface-B9TjbSBF.js.map} +1 -1
- package/dist/{theme.interface-BeW-sz_g.cjs.map → theme.interface-BujperTo.cjs.map} +1 -1
- package/dist/theme.js +3 -3
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{utils-CJ9y2Jz9.cjs.map → utils-Dt5PpmaQ.cjs.map} +1 -1
- package/dist/{utils-BfOze6Tk.js.map → utils-kND2Z9Xg.js.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-9HOUXrTU.cjs → window-BaoSwgGE.cjs} +1 -1
- package/dist/{window-9HOUXrTU.cjs.map → window-BaoSwgGE.cjs.map} +1 -1
- package/dist/{window-B_55dzk0.js → window-KnLWhQ3S.js} +1 -1
- package/dist/{window-B_55dzk0.js.map → window-KnLWhQ3S.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +4 -4
- package/skills/schmancy/INDEX.md +9 -3
- package/src/index.ts +0 -6
- package/types/src/index.d.ts +0 -6
- package/dist/agent/vendor-jsqr-BUVwyoGC.js +0 -10212
- package/dist/agent/vendor-jsqr-BUVwyoGC.js.map +0 -1
- package/dist/charts.cjs +0 -112
- package/dist/charts.cjs.map +0 -1
- package/dist/charts.js +0 -374
- package/dist/charts.js.map +0 -1
- package/dist/extra-B6gFu4_1.js +0 -3440
- package/dist/extra-B6gFu4_1.js.map +0 -1
- package/dist/extra-DJRYaOXe.cjs +0 -31
- package/dist/extra-DJRYaOXe.cjs.map +0 -1
- package/dist/extra.cjs +0 -1
- package/dist/extra.js +0 -2
- package/dist/map-BAQ9FEB6.cjs +0 -80
- package/dist/map-BAQ9FEB6.cjs.map +0 -1
- package/dist/map-CEreveeI.js +0 -208
- package/dist/map-CEreveeI.js.map +0 -1
- package/dist/map.cjs +0 -1
- package/dist/map.js +0 -2
- package/dist/mixins-Db7gjDah.cjs +0 -298
- package/dist/mixins-Dw6hVfy-.js +0 -627
- package/dist/payment-card-form-Be1-OVlL.js +0 -729
- package/dist/payment-card-form-Be1-OVlL.js.map +0 -1
- package/dist/payment-card-form-CNnGePG4.cjs +0 -73
- package/dist/payment-card-form-CNnGePG4.cjs.map +0 -1
- package/dist/payment-card-form.cjs +0 -1
- package/dist/payment-card-form.js +0 -2
- package/dist/qr-scanner.cjs +0 -35
- package/dist/qr-scanner.cjs.map +0 -1
- package/dist/qr-scanner.js +0 -123
- package/dist/qr-scanner.js.map +0 -1
- package/dist/skills/charts.md +0 -93
- package/dist/skills/extra.md +0 -59
- package/dist/skills/map.md +0 -55
- package/dist/skills/qr-scanner.md +0 -51
- package/dist/skills/schmancy/charts.md +0 -93
- package/dist/skills/schmancy/extra.md +0 -59
- package/dist/skills/schmancy/map.md +0 -55
- package/dist/skills/schmancy/qr-scanner.md +0 -51
- package/dist/skills/schmancy/timeline-tile.md +0 -95
- package/dist/skills/timeline-tile.md +0 -95
- package/dist/timeline.cjs +0 -277
- package/dist/timeline.cjs.map +0 -1
- package/dist/timeline.js +0 -326
- package/dist/timeline.js.map +0 -1
- package/skills/schmancy/charts.md +0 -93
- package/skills/schmancy/extra.md +0 -59
- package/skills/schmancy/map.md +0 -55
- package/skills/schmancy/qr-scanner.md +0 -51
- package/skills/schmancy/timeline-tile.md +0 -95
- package/src/charts/area-chart.ts +0 -498
- package/src/charts/index.ts +0 -4
- package/src/charts/pills.ts +0 -352
- package/src/charts/types.ts +0 -66
- package/src/charts/utils.ts +0 -65
- package/src/extra/countries/countries.data.ts +0 -196
- package/src/extra/countries/countries.ts +0 -109
- package/src/extra/countries/index.ts +0 -2
- package/src/extra/index.ts +0 -2
- package/src/extra/timezone/index.ts +0 -2
- package/src/extra/timezone/timezone.ts +0 -118
- package/src/extra/timezone/timezones.data.ts +0 -2546
- package/src/map/index.ts +0 -1
- package/src/map/map.ts +0 -485
- package/src/payment-card-form/index.ts +0 -1
- package/src/payment-card-form/payment-card-form.ts +0 -331
- package/src/qr-scanner/index.ts +0 -1
- package/src/qr-scanner/qr-scanner.ts +0 -242
- package/src/timeline/index.ts +0 -1
- package/src/timeline/timeline-tile.ts +0 -431
- package/types/src/charts/area-chart.d.ts +0 -58
- package/types/src/charts/index.d.ts +0 -4
- package/types/src/charts/pills.d.ts +0 -51
- package/types/src/charts/types.d.ts +0 -62
- package/types/src/charts/utils.d.ts +0 -28
- package/types/src/extra/countries/countries.d.ts +0 -26
- package/types/src/extra/countries/countries.data.d.ts +0 -5
- package/types/src/extra/countries/index.d.ts +0 -2
- package/types/src/extra/index.d.ts +0 -2
- package/types/src/extra/timezone/index.d.ts +0 -2
- package/types/src/extra/timezone/timezone.d.ts +0 -34
- package/types/src/extra/timezone/timezones.data.d.ts +0 -7
- package/types/src/map/index.d.ts +0 -1
- package/types/src/map/map.d.ts +0 -130
- package/types/src/payment-card-form/index.d.ts +0 -1
- package/types/src/payment-card-form/payment-card-form.d.ts +0 -85
- package/types/src/qr-scanner/index.d.ts +0 -1
- package/types/src/qr-scanner/qr-scanner.d.ts +0 -26
- package/types/src/timeline/index.d.ts +0 -1
- package/types/src/timeline/timeline-tile.d.ts +0 -44
- /package/dist/agent/{flow-3RrZM-e7.js → flow-CvG1fLW5.js} +0 -0
- /package/dist/agent/{vendor-material-color-33Mj762T.js → vendor-material-color-DcL7ZPxx.js} +0 -0
- /package/dist/{form-BF1c3Dk1.js → form-CFvwnfuJ.js} +0 -0
- /package/dist/{form-DeO5XX3b.cjs → form-Ceijw1aA.cjs} +0 -0
- /package/dist/{rxjs-utils-BK8VMe3K.js → rxjs-utils-CVeJQ9KG.js} +0 -0
- /package/dist/{rxjs-utils-DhOKenkS.cjs → rxjs-utils-DCUHg_Ml.cjs} +0 -0
- /package/dist/{theme.interface-v7SkAnDH.js → theme.interface-B9TjbSBF.js} +0 -0
- /package/dist/{theme.interface-BeW-sz_g.cjs → theme.interface-BujperTo.cjs} +0 -0
- /package/dist/{utils-CJ9y2Jz9.cjs → utils-Dt5PpmaQ.cjs} +0 -0
- /package/dist/{utils-BfOze6Tk.js → utils-kND2Z9Xg.js} +0 -0
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# schmancy-map
|
|
2
|
-
|
|
3
|
-
> Google Maps component. Accepts address string (auto-geocoded) or exact lat/lng. Singleton-loaded Maps SDK.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```html
|
|
7
|
-
<!-- By address -->
|
|
8
|
-
<schmancy-map
|
|
9
|
-
address="Times Square, New York"
|
|
10
|
-
api-key="YOUR_GOOGLE_MAPS_KEY"
|
|
11
|
-
></schmancy-map>
|
|
12
|
-
|
|
13
|
-
<!-- By coordinates -->
|
|
14
|
-
<schmancy-map
|
|
15
|
-
.latitude=${40.758}
|
|
16
|
-
.longitude=${-73.985}
|
|
17
|
-
.zoom=${15}
|
|
18
|
-
type="satellite"
|
|
19
|
-
api-key="YOUR_GOOGLE_MAPS_KEY"
|
|
20
|
-
></schmancy-map>
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Properties
|
|
24
|
-
| Property | Type | Default | Description |
|
|
25
|
-
|----------|------|---------|-------------|
|
|
26
|
-
| `address` | string | — | Location for geocoding (e.g. `"Eiffel Tower, Paris"`) |
|
|
27
|
-
| `latitude` | number | — | Precise latitude (takes precedence over address) |
|
|
28
|
-
| `longitude` | number | — | Precise longitude |
|
|
29
|
-
| `zoom` | number | default Maps default | Map zoom level |
|
|
30
|
-
| `type` | `'roadmap' \| 'satellite' \| 'hybrid' \| 'terrain'` | `'roadmap'` | Map style |
|
|
31
|
-
| `height` | string | — | Custom height (e.g. `'400px'`, `'60vh'`) |
|
|
32
|
-
| `apiKey` | string | **required** | Google Maps API key |
|
|
33
|
-
|
|
34
|
-
## Behavior
|
|
35
|
-
- The first `schmancy-map` instance triggers a singleton script load of `maps.googleapis.com/maps/api/js` with the `places` library.
|
|
36
|
-
- Subsequent instances reuse the same loader — no duplicate network requests.
|
|
37
|
-
- If `address` is provided without coordinates, the built-in `Geocoder` resolves it before rendering.
|
|
38
|
-
- Errors (invalid key, unauthorized domain, geocode failure) render a fallback message inside the host.
|
|
39
|
-
|
|
40
|
-
## Setup
|
|
41
|
-
1. Acquire a Google Maps JavaScript API key from Google Cloud Console.
|
|
42
|
-
2. Enable the **Maps JavaScript API** and **Geocoding API**.
|
|
43
|
-
3. Add your domain to the authorized list.
|
|
44
|
-
|
|
45
|
-
## Example
|
|
46
|
-
```html
|
|
47
|
-
<schmancy-surface type="subtle" rounded="all">
|
|
48
|
-
<schmancy-map
|
|
49
|
-
address="1600 Amphitheatre Parkway, Mountain View, CA"
|
|
50
|
-
height="320px"
|
|
51
|
-
type="hybrid"
|
|
52
|
-
.apiKey=${import.meta.env.VITE_GOOGLE_MAPS_KEY}
|
|
53
|
-
></schmancy-map>
|
|
54
|
-
</schmancy-surface>
|
|
55
|
-
```
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# schmancy-qr-scanner
|
|
2
|
-
|
|
3
|
-
> Camera-based QR code scanner using `jsQR`. Requests rear-camera access, decodes frames in real time, deduplicates reads.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```html
|
|
7
|
-
<schmancy-qr-scanner
|
|
8
|
-
continuous
|
|
9
|
-
@scan-result=${e => this.handleScan(e.detail.data)}
|
|
10
|
-
></schmancy-qr-scanner>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
handleScan(data: string) {
|
|
15
|
-
console.log('QR decoded:', data)
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Properties
|
|
20
|
-
| Property | Type | Default | Description |
|
|
21
|
-
|----------|------|---------|-------------|
|
|
22
|
-
| `continuous` | boolean | `true` | Keep scanning after a successful read (dedupe repeated reads) |
|
|
23
|
-
|
|
24
|
-
## Events
|
|
25
|
-
| Event | Detail | When |
|
|
26
|
-
|-------|--------|------|
|
|
27
|
-
| `scan-result` | `{ data: string, timestamp: number }` | QR code successfully decoded |
|
|
28
|
-
|
|
29
|
-
## Behavior
|
|
30
|
-
- Requests `getUserMedia` with `facingMode: 'environment'` (rear camera) at 1280×720.
|
|
31
|
-
- Decodes via `jsQR` on `animationFrames` stream with `throttleTime` to avoid CPU thrashing.
|
|
32
|
-
- `distinctUntilChanged` prevents duplicate emissions for the same code.
|
|
33
|
-
- Brief success flash on each valid read.
|
|
34
|
-
- Stops camera + tears down subscriptions on disconnect.
|
|
35
|
-
- Displays an error state if camera permission is denied.
|
|
36
|
-
|
|
37
|
-
## Requires
|
|
38
|
-
- HTTPS (or `localhost`) for camera access.
|
|
39
|
-
- User permission to the camera.
|
|
40
|
-
|
|
41
|
-
## Example
|
|
42
|
-
```html
|
|
43
|
-
<schmancy-surface type="glass" rounded="all">
|
|
44
|
-
<schmancy-qr-scanner
|
|
45
|
-
@scan-result=${(e: CustomEvent<{ data: string }>) => {
|
|
46
|
-
$notify.success(`Scanned: ${e.detail.data}`)
|
|
47
|
-
this.scannedCode = e.detail.data
|
|
48
|
-
}}
|
|
49
|
-
></schmancy-qr-scanner>
|
|
50
|
-
</schmancy-surface>
|
|
51
|
-
```
|
|
@@ -1,95 +0,0 @@
|
|
|
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.
|
|
@@ -1,95 +0,0 @@
|
|
|
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.
|
package/dist/timeline.cjs
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-Db7gjDah.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/when.js`);var o=class extends e.s{constructor(...e){super(...e),this.state=`empty`,this.glyph=``,this._onClick=()=>{this.state!==`empty`&&this.dispatchEvent(new CustomEvent(`tile-click`,{detail:{glyph:this.glyph,state:this.state},bubbles:!0,composed:!0}))}}static{this.styles=[i.css`
|
|
2
|
-
:host {
|
|
3
|
-
--schmancy-tile-w: 32px;
|
|
4
|
-
--schmancy-tile-h: 40px;
|
|
5
|
-
display: inline-block;
|
|
6
|
-
position: relative;
|
|
7
|
-
width: var(--schmancy-tile-w);
|
|
8
|
-
height: var(--schmancy-tile-h);
|
|
9
|
-
font-size: 14px;
|
|
10
|
-
line-height: 1.45;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/* Inner box that paints the cell. The host is a layout container only;
|
|
14
|
-
the box owns the border / background / hover transform so the host
|
|
15
|
-
stays a clean focus target. */
|
|
16
|
-
.tile {
|
|
17
|
-
position: absolute;
|
|
18
|
-
inset: 0;
|
|
19
|
-
border-radius: 2px;
|
|
20
|
-
overflow: visible;
|
|
21
|
-
appearance: none;
|
|
22
|
-
padding: 0;
|
|
23
|
-
font: inherit;
|
|
24
|
-
color: inherit;
|
|
25
|
-
background: transparent;
|
|
26
|
-
z-index: 1;
|
|
27
|
-
transition:
|
|
28
|
-
transform 120ms ease-in-out,
|
|
29
|
-
box-shadow 120ms ease-in-out,
|
|
30
|
-
border-color 120ms ease-in-out;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/* Empty state */
|
|
34
|
-
:host([state='empty']) .tile {
|
|
35
|
-
border: 1px dashed var(--schmancy-sys-color-outline);
|
|
36
|
-
background: transparent;
|
|
37
|
-
cursor: default;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
:host([state='empty']) .glyph {
|
|
41
|
-
color: var(--schmancy-sys-color-surface-onVariant);
|
|
42
|
-
opacity: 0.7;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/* Shared filled-state card styling (filled / stack-top / stack-sibling) */
|
|
46
|
-
:host([state='filled']) .tile,
|
|
47
|
-
:host([state='stack-top']) .tile,
|
|
48
|
-
:host([state='stack-sibling']) .tile {
|
|
49
|
-
border: 1px solid var(--schmancy-sys-color-outline);
|
|
50
|
-
background: var(--schmancy-sys-color-surface-containerLowest);
|
|
51
|
-
cursor: pointer;
|
|
52
|
-
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.02);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/* Paper-card line texture: five thin lines emulating ruled paper */
|
|
56
|
-
:host([state='filled']) .tile::before,
|
|
57
|
-
:host([state='stack-top']) .tile::before,
|
|
58
|
-
:host([state='stack-sibling']) .tile::before {
|
|
59
|
-
content: '';
|
|
60
|
-
position: absolute;
|
|
61
|
-
left: 4px;
|
|
62
|
-
right: 4px;
|
|
63
|
-
top: 16px;
|
|
64
|
-
bottom: 5px;
|
|
65
|
-
background-image:
|
|
66
|
-
linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
|
|
67
|
-
linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
|
|
68
|
-
linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
|
|
69
|
-
linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),
|
|
70
|
-
linear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px);
|
|
71
|
-
background-repeat: no-repeat;
|
|
72
|
-
background-size:
|
|
73
|
-
100% 1px,
|
|
74
|
-
80% 1px,
|
|
75
|
-
92% 1px,
|
|
76
|
-
65% 1px,
|
|
77
|
-
78% 1px;
|
|
78
|
-
background-position:
|
|
79
|
-
0 0,
|
|
80
|
-
0 4px,
|
|
81
|
-
0 8px,
|
|
82
|
-
0 12px,
|
|
83
|
-
0 16px;
|
|
84
|
-
opacity: 0.3;
|
|
85
|
-
pointer-events: none;
|
|
86
|
-
z-index: 0;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/* Tinted accent strip across the top edge */
|
|
90
|
-
:host([state='filled']) .tile::after,
|
|
91
|
-
:host([state='stack-top']) .tile::after,
|
|
92
|
-
:host([state='stack-sibling']) .tile::after {
|
|
93
|
-
content: '';
|
|
94
|
-
position: absolute;
|
|
95
|
-
left: 0;
|
|
96
|
-
right: 0;
|
|
97
|
-
top: 0;
|
|
98
|
-
height: 11px;
|
|
99
|
-
background: color-mix(
|
|
100
|
-
in oklch,
|
|
101
|
-
var(--schmancy-sys-color-primary-default) 10%,
|
|
102
|
-
transparent
|
|
103
|
-
);
|
|
104
|
-
border-bottom: 1px solid
|
|
105
|
-
color-mix(
|
|
106
|
-
in oklch,
|
|
107
|
-
var(--schmancy-sys-color-primary-default) 25%,
|
|
108
|
-
var(--schmancy-sys-color-outline)
|
|
109
|
-
);
|
|
110
|
-
pointer-events: none;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
:host([state='filled']) .glyph,
|
|
114
|
-
:host([state='stack-top']) .glyph,
|
|
115
|
-
:host([state='stack-sibling']) .glyph {
|
|
116
|
-
color: var(--schmancy-sys-color-primary-onContainer);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/* Single-card hover: lift 1px + soft shadow */
|
|
120
|
-
:host([state='filled']) .tile:hover {
|
|
121
|
-
border-color: var(--schmancy-sys-color-primary-default);
|
|
122
|
-
transform: translateY(-1px);
|
|
123
|
-
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/* Focus ring in primary color */
|
|
127
|
-
:host([state='filled']) .tile:focus-visible,
|
|
128
|
-
:host([state='stack-top']) .tile:focus-visible,
|
|
129
|
-
:host([state='stack-sibling']) .tile:focus-visible {
|
|
130
|
-
outline: 2px solid var(--schmancy-sys-color-primary-default);
|
|
131
|
-
outline-offset: 3px;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/* Stacked tiles position absolutely on the host's grid cell so the
|
|
135
|
-
wrapper's --fan-count / --i custom properties drive the offset. */
|
|
136
|
-
:host([state='stack-top']),
|
|
137
|
-
:host([state='stack-sibling']) {
|
|
138
|
-
position: absolute;
|
|
139
|
-
top: 0;
|
|
140
|
-
left: 0;
|
|
141
|
-
transition:
|
|
142
|
-
transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
143
|
-
box-shadow 200ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
144
|
-
transform: translate(
|
|
145
|
-
calc((var(--fan-count, 1) - 1 - var(--i, 0)) * -3px),
|
|
146
|
-
calc((var(--fan-count, 1) - 1 - var(--i, 0)) * 3px)
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/* Sibling tiles only become interactive once the wrapper is fanned —
|
|
151
|
-
otherwise they're stacked underneath and would steal pointer events
|
|
152
|
-
from the top card. */
|
|
153
|
-
:host([state='stack-sibling']) {
|
|
154
|
-
pointer-events: none;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/* Fanned: every tile slides edge-to-edge along the wrapper's row */
|
|
158
|
-
:host([state='stack-top']:host-context([data-fanned])),
|
|
159
|
-
:host-context([data-fanned]):host([state='stack-top']) {
|
|
160
|
-
transform: translate(
|
|
161
|
-
calc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),
|
|
162
|
-
0
|
|
163
|
-
);
|
|
164
|
-
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
:host([state='stack-sibling']:host-context([data-fanned])),
|
|
168
|
-
:host-context([data-fanned]):host([state='stack-sibling']) {
|
|
169
|
-
pointer-events: auto;
|
|
170
|
-
transform: translate(
|
|
171
|
-
calc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),
|
|
172
|
-
0
|
|
173
|
-
);
|
|
174
|
-
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
:host-context([data-fanned]):host([state='stack-top']) .tile:hover,
|
|
178
|
-
:host-context([data-fanned]):host([state='stack-sibling']) .tile:hover {
|
|
179
|
-
border-color: var(--schmancy-sys-color-primary-default);
|
|
180
|
-
box-shadow: 0 6px 14px rgba(0, 0, 0, 0.1);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.glyph {
|
|
184
|
-
position: absolute;
|
|
185
|
-
top: 0;
|
|
186
|
-
left: 0;
|
|
187
|
-
right: 0;
|
|
188
|
-
height: 11px;
|
|
189
|
-
display: flex;
|
|
190
|
-
align-items: center;
|
|
191
|
-
justify-content: center;
|
|
192
|
-
font-size: 7.5px;
|
|
193
|
-
font-weight: 500;
|
|
194
|
-
letter-spacing: 0.12em;
|
|
195
|
-
line-height: 1;
|
|
196
|
-
z-index: 1;
|
|
197
|
-
font-variant-caps: all-petite-caps;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.tooltip {
|
|
201
|
-
position: absolute;
|
|
202
|
-
bottom: calc(100% + 6px);
|
|
203
|
-
left: 50%;
|
|
204
|
-
transform: translate(-50%, 2px);
|
|
205
|
-
font-size: 10px;
|
|
206
|
-
line-height: 1.2;
|
|
207
|
-
color: var(--schmancy-sys-color-surface-on);
|
|
208
|
-
background: var(--schmancy-sys-color-surface-containerLowest);
|
|
209
|
-
border: 1px solid var(--schmancy-sys-color-outline);
|
|
210
|
-
padding: 2px 6px;
|
|
211
|
-
border-radius: 3px;
|
|
212
|
-
white-space: nowrap;
|
|
213
|
-
opacity: 0;
|
|
214
|
-
pointer-events: none;
|
|
215
|
-
transition:
|
|
216
|
-
opacity 150ms ease-in-out,
|
|
217
|
-
transform 150ms ease-in-out;
|
|
218
|
-
z-index: 2;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
.tile:hover .tooltip,
|
|
222
|
-
.tile:focus-visible .tooltip {
|
|
223
|
-
opacity: 1;
|
|
224
|
-
transform: translate(-50%, 0);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
.caption {
|
|
228
|
-
position: absolute;
|
|
229
|
-
top: calc(100% + 6px);
|
|
230
|
-
left: 50%;
|
|
231
|
-
transform: translateX(-50%);
|
|
232
|
-
font-size: 11px;
|
|
233
|
-
line-height: 1.2;
|
|
234
|
-
font-weight: 500;
|
|
235
|
-
white-space: nowrap;
|
|
236
|
-
color: var(--schmancy-sys-color-surface-on);
|
|
237
|
-
font-variant-numeric: tabular-nums;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
.stack-count {
|
|
241
|
-
position: absolute;
|
|
242
|
-
top: -5px;
|
|
243
|
-
right: -7px;
|
|
244
|
-
min-width: 14px;
|
|
245
|
-
height: 14px;
|
|
246
|
-
padding: 0 4px;
|
|
247
|
-
border-radius: 7px;
|
|
248
|
-
background: var(--schmancy-sys-color-primary-default);
|
|
249
|
-
color: var(--schmancy-sys-color-primary-on);
|
|
250
|
-
font-size: 9px;
|
|
251
|
-
font-weight: 500;
|
|
252
|
-
line-height: 14px;
|
|
253
|
-
text-align: center;
|
|
254
|
-
z-index: 10;
|
|
255
|
-
pointer-events: none;
|
|
256
|
-
transition: opacity 150ms ease-in-out;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
:host-context([data-fanned]) .stack-count {
|
|
260
|
-
opacity: 0;
|
|
261
|
-
}
|
|
262
|
-
`]}connectedCallback(){if(super.connectedCallback(),this.index!==void 0&&this.style.setProperty(`--i`,String(this.index)),this.state!==`stack-top`)return;let e=this.parentElement;e&&(0,n.fromEvent)(e,`pointerover`).pipe((0,n.map)(e=>e.target?.closest(`[data-stack-id]`)??null),(0,n.distinctUntilChanged)(),(0,n.switchMap)(t=>t===e?(0,n.of)(e):(0,n.timer)(800).pipe((0,n.map)(()=>null))),(0,n.distinctUntilChanged)(),(0,n.switchMap)(e=>e?new n.Observable(()=>(e.setAttribute(`data-fanned`,``),()=>e.removeAttribute(`data-fanned`))):n.EMPTY),(0,n.takeUntil)(this.disconnecting)).subscribe()}updated(e){super.updated(e),e.has(`index`)&&this.index!==void 0&&this.style.setProperty(`--i`,String(this.index))}_ariaLabel(){let e=[this.glyph];return this.caption&&e.push(this.caption),this.tooltip&&e.push(this.tooltip),this.state===`empty`&&e.push(`empty`),e.join(` · `)}render(){let e=this.state!==`empty`,t=this._ariaLabel();return i.html`
|
|
263
|
-
<button
|
|
264
|
-
type="button"
|
|
265
|
-
class="tile"
|
|
266
|
-
role=${e?`button`:`presentation`}
|
|
267
|
-
tabindex=${e?0:-1}
|
|
268
|
-
aria-label=${t}
|
|
269
|
-
?disabled=${!e}
|
|
270
|
-
@click=${this._onClick}
|
|
271
|
-
>
|
|
272
|
-
<span class="glyph">${this.glyph}</span>
|
|
273
|
-
${(0,a.when)(this.tooltip&&e,()=>i.html`<span class="tooltip">${this.tooltip}</span>`)}
|
|
274
|
-
${(0,a.when)(this.caption&&this.state!==`stack-sibling`,()=>i.html`<span class="caption">${this.caption}</span>`)}
|
|
275
|
-
${(0,a.when)(this.state===`stack-top`&&this.stackCount!==void 0&&this.stackCount>1,()=>i.html`<span class="stack-count">×${this.stackCount}</span>`)}
|
|
276
|
-
</button>
|
|
277
|
-
`}};t.t([(0,r.property)({type:String,reflect:!0})],o.prototype,`state`,void 0),t.t([(0,r.property)({type:String})],o.prototype,`glyph`,void 0),t.t([(0,r.property)({type:Number,attribute:`stack-count`})],o.prototype,`stackCount`,void 0),t.t([(0,r.property)({type:Number,reflect:!0})],o.prototype,`index`,void 0),t.t([(0,r.property)({type:String})],o.prototype,`tooltip`,void 0),t.t([(0,r.property)({type:String})],o.prototype,`caption`,void 0),o=t.t([(0,r.customElement)(`schmancy-timeline-tile`)],o),Object.defineProperty(exports,`SchmancyTimelineTile`,{enumerable:!0,get:function(){return o}});
|
package/dist/timeline.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.cjs","names":[],"sources":["../src/timeline/timeline-tile.ts"],"sourcesContent":["/**\n * Timeline tile — one cell in a procurement-stage rail.\n *\n * Three render states (one component, four `state` values):\n * - `empty` dashed-border outline + glyph\n * - `filled` paper-card with glyph; hoverable / focusable / clickable\n * - `stack-top` paper-card on top of N siblings; carries the ×N badge\n * - `stack-sibling` paper-card behind the top; revealed when the wrapper\n * is fanned\n *\n * Stack fan is coordinated by a `data-fanned` attribute on the parent\n * wrapper element. The `stack-top` tile owns the orchestration: a\n * `pointerover` pipe on the wrapper element with hover-intent (immediate\n * enter, 800ms leave debounce) toggles the attribute. Sibling tiles read\n * the attribute via the `:host-context([data-fanned])` selector. Native\n * `:hover` would drop the moment the cursor crosses the gap between\n * fanned siblings; the attribute survives that crossing because the\n * pointerover stream stays on the wrapper subtree.\n */\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n\tEMPTY,\n\tObservable,\n\tdistinctUntilChanged,\n\tfromEvent,\n\tmap,\n\tof,\n\tswitchMap,\n\ttakeUntil,\n\ttimer,\n} from 'rxjs'\n\nexport type TimelineTileState = 'empty' | 'filled' | 'stack-top' | 'stack-sibling'\n\nexport type TimelineTileClickEvent = CustomEvent<{\n\tglyph: string\n\tstate: TimelineTileState\n}>\n\n@customElement('schmancy-timeline-tile')\nexport class SchmancyTimelineTile extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\t--schmancy-tile-w: 32px;\n\t\t--schmancy-tile-h: 40px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\twidth: var(--schmancy-tile-w);\n\t\theight: var(--schmancy-tile-h);\n\t\tfont-size: 14px;\n\t\tline-height: 1.45;\n\t}\n\n\t/* Inner box that paints the cell. The host is a layout container only;\n\t the box owns the border / background / hover transform so the host\n\t stays a clean focus target. */\n\t.tile {\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tborder-radius: 2px;\n\t\toverflow: visible;\n\t\tappearance: none;\n\t\tpadding: 0;\n\t\tfont: inherit;\n\t\tcolor: inherit;\n\t\tbackground: transparent;\n\t\tz-index: 1;\n\t\ttransition:\n\t\t\ttransform 120ms ease-in-out,\n\t\t\tbox-shadow 120ms ease-in-out,\n\t\t\tborder-color 120ms ease-in-out;\n\t}\n\n\t/* Empty state */\n\t:host([state='empty']) .tile {\n\t\tborder: 1px dashed var(--schmancy-sys-color-outline);\n\t\tbackground: transparent;\n\t\tcursor: default;\n\t}\n\n\t:host([state='empty']) .glyph {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t\topacity: 0.7;\n\t}\n\n\t/* Shared filled-state card styling (filled / stack-top / stack-sibling) */\n\t:host([state='filled']) .tile,\n\t:host([state='stack-top']) .tile,\n\t:host([state='stack-sibling']) .tile {\n\t\tborder: 1px solid var(--schmancy-sys-color-outline);\n\t\tbackground: var(--schmancy-sys-color-surface-containerLowest);\n\t\tcursor: pointer;\n\t\tbox-shadow: 0 1px 0 rgba(0, 0, 0, 0.02);\n\t}\n\n\t/* Paper-card line texture: five thin lines emulating ruled paper */\n\t:host([state='filled']) .tile::before,\n\t:host([state='stack-top']) .tile::before,\n\t:host([state='stack-sibling']) .tile::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 4px;\n\t\tright: 4px;\n\t\ttop: 16px;\n\t\tbottom: 5px;\n\t\tbackground-image:\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px),\n\t\t\tlinear-gradient(var(--schmancy-sys-color-outline) 1px, transparent 1px);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size:\n\t\t\t100% 1px,\n\t\t\t80% 1px,\n\t\t\t92% 1px,\n\t\t\t65% 1px,\n\t\t\t78% 1px;\n\t\tbackground-position:\n\t\t\t0 0,\n\t\t\t0 4px,\n\t\t\t0 8px,\n\t\t\t0 12px,\n\t\t\t0 16px;\n\t\topacity: 0.3;\n\t\tpointer-events: none;\n\t\tz-index: 0;\n\t}\n\n\t/* Tinted accent strip across the top edge */\n\t:host([state='filled']) .tile::after,\n\t:host([state='stack-top']) .tile::after,\n\t:host([state='stack-sibling']) .tile::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\theight: 11px;\n\t\tbackground: color-mix(\n\t\t\tin oklch,\n\t\t\tvar(--schmancy-sys-color-primary-default) 10%,\n\t\t\ttransparent\n\t\t);\n\t\tborder-bottom: 1px solid\n\t\t\tcolor-mix(\n\t\t\t\tin oklch,\n\t\t\t\tvar(--schmancy-sys-color-primary-default) 25%,\n\t\t\t\tvar(--schmancy-sys-color-outline)\n\t\t\t);\n\t\tpointer-events: none;\n\t}\n\n\t:host([state='filled']) .glyph,\n\t:host([state='stack-top']) .glyph,\n\t:host([state='stack-sibling']) .glyph {\n\t\tcolor: var(--schmancy-sys-color-primary-onContainer);\n\t}\n\n\t/* Single-card hover: lift 1px + soft shadow */\n\t:host([state='filled']) .tile:hover {\n\t\tborder-color: var(--schmancy-sys-color-primary-default);\n\t\ttransform: translateY(-1px);\n\t\tbox-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);\n\t}\n\n\t/* Focus ring in primary color */\n\t:host([state='filled']) .tile:focus-visible,\n\t:host([state='stack-top']) .tile:focus-visible,\n\t:host([state='stack-sibling']) .tile:focus-visible {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 3px;\n\t}\n\n\t/* Stacked tiles position absolutely on the host's grid cell so the\n\t wrapper's --fan-count / --i custom properties drive the offset. */\n\t:host([state='stack-top']),\n\t:host([state='stack-sibling']) {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\ttransition:\n\t\t\ttransform 200ms cubic-bezier(0.2, 0.8, 0.2, 1),\n\t\t\tbox-shadow 200ms cubic-bezier(0.2, 0.8, 0.2, 1);\n\t\ttransform: translate(\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * -3px),\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * 3px)\n\t\t);\n\t}\n\n\t/* Sibling tiles only become interactive once the wrapper is fanned —\n\t otherwise they're stacked underneath and would steal pointer events\n\t from the top card. */\n\t:host([state='stack-sibling']) {\n\t\tpointer-events: none;\n\t}\n\n\t/* Fanned: every tile slides edge-to-edge along the wrapper's row */\n\t:host([state='stack-top']:host-context([data-fanned])),\n\t:host-context([data-fanned]):host([state='stack-top']) {\n\t\ttransform: translate(\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),\n\t\t\t0\n\t\t);\n\t\tbox-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);\n\t}\n\n\t:host([state='stack-sibling']:host-context([data-fanned])),\n\t:host-context([data-fanned]):host([state='stack-sibling']) {\n\t\tpointer-events: auto;\n\t\ttransform: translate(\n\t\t\tcalc((var(--fan-count, 1) - 1 - var(--i, 0)) * var(--schmancy-tile-w) * -1),\n\t\t\t0\n\t\t);\n\t\tbox-shadow: 0 3px 8px rgba(0, 0, 0, 0.06);\n\t}\n\n\t:host-context([data-fanned]):host([state='stack-top']) .tile:hover,\n\t:host-context([data-fanned]):host([state='stack-sibling']) .tile:hover {\n\t\tborder-color: var(--schmancy-sys-color-primary-default);\n\t\tbox-shadow: 0 6px 14px rgba(0, 0, 0, 0.1);\n\t}\n\n\t.glyph {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\theight: 11px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tfont-size: 7.5px;\n\t\tfont-weight: 500;\n\t\tletter-spacing: 0.12em;\n\t\tline-height: 1;\n\t\tz-index: 1;\n\t\tfont-variant-caps: all-petite-caps;\n\t}\n\n\t.tooltip {\n\t\tposition: absolute;\n\t\tbottom: calc(100% + 6px);\n\t\tleft: 50%;\n\t\ttransform: translate(-50%, 2px);\n\t\tfont-size: 10px;\n\t\tline-height: 1.2;\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t\tbackground: var(--schmancy-sys-color-surface-containerLowest);\n\t\tborder: 1px solid var(--schmancy-sys-color-outline);\n\t\tpadding: 2px 6px;\n\t\tborder-radius: 3px;\n\t\twhite-space: nowrap;\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t\ttransition:\n\t\t\topacity 150ms ease-in-out,\n\t\t\ttransform 150ms ease-in-out;\n\t\tz-index: 2;\n\t}\n\n\t.tile:hover .tooltip,\n\t.tile:focus-visible .tooltip {\n\t\topacity: 1;\n\t\ttransform: translate(-50%, 0);\n\t}\n\n\t.caption {\n\t\tposition: absolute;\n\t\ttop: calc(100% + 6px);\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tfont-size: 11px;\n\t\tline-height: 1.2;\n\t\tfont-weight: 500;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\n\t.stack-count {\n\t\tposition: absolute;\n\t\ttop: -5px;\n\t\tright: -7px;\n\t\tmin-width: 14px;\n\t\theight: 14px;\n\t\tpadding: 0 4px;\n\t\tborder-radius: 7px;\n\t\tbackground: var(--schmancy-sys-color-primary-default);\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t\tfont-size: 9px;\n\t\tfont-weight: 500;\n\t\tline-height: 14px;\n\t\ttext-align: center;\n\t\tz-index: 10;\n\t\tpointer-events: none;\n\t\ttransition: opacity 150ms ease-in-out;\n\t}\n\n\t:host-context([data-fanned]) .stack-count {\n\t\topacity: 0;\n\t}\n`]\n\n\t@property({ type: String, reflect: true }) state: TimelineTileState = 'empty'\n\n\t@property({ type: String }) glyph = ''\n\n\t@property({ type: Number, attribute: 'stack-count' }) stackCount?: number\n\n\t@property({ type: Number, reflect: true }) index?: number\n\n\t@property({ type: String }) tooltip?: string\n\n\t@property({ type: String }) caption?: string\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Mirror `index` onto the host's `--i` custom property so the\n\t\t// fan-offset transforms don't depend on the consumer setting both\n\t\t// the prop and an inline style.\n\t\tif (this.index !== undefined) {\n\t\t\tthis.style.setProperty('--i', String(this.index))\n\t\t}\n\n\t\t// Stack-top owns the fan orchestration. The pointerover stream lives\n\t\t// on the parent wrapper (the element holding all sibling tiles); a\n\t\t// hover-intent pipe drives the `data-fanned` attribute on that\n\t\t// wrapper. Enter is immediate (`of(wrapper)`); leave waits 800ms\n\t\t// (`timer(800)`) so the cursor can cross the gap between fanned\n\t\t// cards without collapsing the stack. The inner Observable's\n\t\t// subscription lifetime IS the fanned state — subscribe sets the\n\t\t// attribute, teardown removes it.\n\t\tif (this.state !== 'stack-top') return\n\t\tconst wrapper = this.parentElement\n\t\tif (!wrapper) return\n\n\t\tfromEvent<PointerEvent>(wrapper, 'pointerover')\n\t\t\t.pipe(\n\t\t\t\tmap(\n\t\t\t\t\t(e) =>\n\t\t\t\t\t\t(e.target as HTMLElement | null)?.closest<HTMLElement>(\n\t\t\t\t\t\t\t'[data-stack-id]',\n\t\t\t\t\t\t) ?? null,\n\t\t\t\t),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tswitchMap((target) =>\n\t\t\t\t\ttarget === wrapper ? of(wrapper) : timer(800).pipe(map(() => null)),\n\t\t\t\t),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tswitchMap((target) =>\n\t\t\t\t\ttarget\n\t\t\t\t\t\t? new Observable<never>(() => {\n\t\t\t\t\t\t\t\ttarget.setAttribute('data-fanned', '')\n\t\t\t\t\t\t\t\treturn () => target.removeAttribute('data-fanned')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: EMPTY,\n\t\t\t\t),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprotected override updated(changed: Map<string, unknown>): void {\n\t\tsuper.updated(changed)\n\t\tif (changed.has('index') && this.index !== undefined) {\n\t\t\tthis.style.setProperty('--i', String(this.index))\n\t\t}\n\t}\n\n\tprivate _onClick = (): void => {\n\t\tif (this.state === 'empty') return\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<TimelineTileClickEvent['detail']>('tile-click', {\n\t\t\t\tdetail: { glyph: this.glyph, state: this.state },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate _ariaLabel(): string {\n\t\tconst parts = [this.glyph]\n\t\tif (this.caption) parts.push(this.caption)\n\t\tif (this.tooltip) parts.push(this.tooltip)\n\t\tif (this.state === 'empty') parts.push('empty')\n\t\treturn parts.join(' · ')\n\t}\n\n\tprotected override render(): unknown {\n\t\tconst isInteractive = this.state !== 'empty'\n\t\tconst ariaLabel = this._ariaLabel()\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"tile\"\n\t\t\t\trole=${isInteractive ? 'button' : 'presentation'}\n\t\t\t\ttabindex=${isInteractive ? 0 : -1}\n\t\t\t\taria-label=${ariaLabel}\n\t\t\t\t?disabled=${!isInteractive}\n\t\t\t\t@click=${this._onClick}\n\t\t\t>\n\t\t\t\t<span class=\"glyph\">${this.glyph}</span>\n\t\t\t\t${when(\n\t\t\t\t\tthis.tooltip && isInteractive,\n\t\t\t\t\t() => html`<span class=\"tooltip\">${this.tooltip}</span>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.caption && this.state !== 'stack-sibling',\n\t\t\t\t\t() => html`<span class=\"caption\">${this.caption}</span>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.state === 'stack-top' &&\n\t\t\t\t\t\tthis.stackCount !== undefined &&\n\t\t\t\t\t\tthis.stackCount > 1,\n\t\t\t\t\t() => html`<span class=\"stack-count\">×${this.stackCount}</span>`,\n\t\t\t\t)}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-timeline-tile': SchmancyTimelineTile\n\t}\n}\n"],"mappings":"2RA2CO,IAAA,EAAA,cAAmC,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,MAwQ6B,QAAA,KAAA,MAElC,GAAA,KAAA,aAAA,CAkE/B,KAAK,QAAU,SACnB,KAAK,cACJ,IAAI,YAA8C,aAAc,CAC/D,OAAQ,CAAE,MAAO,KAAK,MAAO,MAAO,KAAK,MAAA,CACzC,QAAA,CAAS,EACT,SAAA,CAAU,EAAA,CAAA,CAAA,EAAA,OAAA,KAAA,OAhVG,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmRpB,mBAAA,CAkBC,GAjBA,MAAM,mBAAA,CAKF,KAAK,QALH,IAKa,IAClB,KAAK,MAAM,YAAY,MAAO,OAAO,KAAK,MAAA,CAAA,CAWvC,KAAK,QAAU,YAAa,OAChC,IAAM,EAAU,KAAK,cAChB,IAEL,EAAA,EAAA,WAAwB,EAAS,cAAA,CAC/B,MAAA,EAAA,EAAA,KAEE,GACC,EAAE,QAA+B,QACjC,kBAAA,EACI,KAAA,EACN,EAAA,EAAA,uBAAA,EACqB,EAAA,EAAA,WACX,GACV,IAAW,GAAA,EAAA,EAAA,IAAa,EAAA,EAAQ,EAAA,EAAA,OAAS,IAAA,CAAK,MAAA,EAAA,EAAA,SAAe,KAAA,CAAA,CAAA,EAC7D,EAAA,EAAA,uBAAA,EACqB,EAAA,EAAA,WACX,GACV,EACG,IAAI,EAAA,gBACJ,EAAO,aAAa,cAAe,GAAA,KACtB,EAAO,gBAAgB,cAAA,EAAA,CAEpC,EAAA,MAAA,EACH,EAAA,EAAA,WACS,KAAK,cAAA,CAAA,CAEf,WAAA,CAGH,QAA2B,EAAA,CAC1B,MAAM,QAAQ,EAAA,CACV,EAAQ,IAAI,QAAA,EAAY,KAAK,QAAjB,IAA2B,IAC1C,KAAK,MAAM,YAAY,MAAO,OAAO,KAAK,MAAA,CAAA,CAe5C,YAAA,CACC,IAAM,EAAQ,CAAC,KAAK,MAAA,CAIpB,OAHI,KAAK,SAAS,EAAM,KAAK,KAAK,QAAA,CAC9B,KAAK,SAAS,EAAM,KAAK,KAAK,QAAA,CAC9B,KAAK,QAAU,SAAS,EAAM,KAAK,QAAA,CAChC,EAAM,KAAK,MAAA,CAGnB,QAAA,CACC,IAAM,EAAgB,KAAK,QAAU,QAC/B,EAAY,KAAK,YAAA,CACvB,MAAO,GAAA,IAAI;;;;WAIF,EAAgB,SAAW,eAAA;eACvB,EAAgB,EAAA,GAAI;iBAClB,EAAA;iBACA,EAAA;aACJ,KAAK,SAAA;;0BAEQ,KAAK,MAAA;iBAE1B,KAAK,SAAW,MACV,EAAA,IAAI,yBAAyB,KAAK,QAAA,SAAA,CAAA;iBAGxC,KAAK,SAAW,KAAK,QAAU,oBACzB,EAAA,IAAI,yBAAyB,KAAK,QAAA,SAAA,CAAA;iBAGxC,KAAK,QAAU,aACd,KAAK,aADD,IACgB,IACpB,KAAK,WAAa,MACb,EAAA,IAAI,8BAA8B,KAAK,WAAA,SAAA,CAAA;;0BAhHvC,CAAE,KAAM,OAAQ,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAEhC,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAEjB,CAAE,KAAM,OAAQ,UAAW,cAAA,CAAA,CAAA,CAAgB,EAAA,UAAA,aAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAE3C,CAAE,KAAM,OAAQ,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAEhC,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,UAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAEjB,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,UAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAnRb,yBAAA,CAAA,CAAyB,EAAA,CAAA,OAAA,eAAA,QAAA,uBAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA"}
|