@mhmo91/schmancy 0.10.6 → 0.10.7
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,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/src/charts/area-chart.ts
DELETED
|
@@ -1,498 +0,0 @@
|
|
|
1
|
-
import { html, css, PropertyValues } from 'lit'
|
|
2
|
-
import { customElement, property, state } from 'lit/decorators.js'
|
|
3
|
-
import { ref, createRef, Ref } from 'lit/directives/ref.js'
|
|
4
|
-
import { SchmancyElement } from '@mixins/index'
|
|
5
|
-
import type { ChartDataPoint, ChartTheme, ProcessedDataPoint } from './types'
|
|
6
|
-
import { catmullRomSpline, hexToRgba, easeOutCubic } from './utils'
|
|
7
|
-
|
|
8
|
-
interface TooltipData {
|
|
9
|
-
visible: boolean
|
|
10
|
-
x: number
|
|
11
|
-
y: number
|
|
12
|
-
label: string
|
|
13
|
-
value: number
|
|
14
|
-
metadata?: Record<string, unknown>
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
@customElement('schmancy-area-chart')
|
|
18
|
-
export class SchmancyAreaChart extends SchmancyElement {
|
|
19
|
-
static styles = [css`
|
|
20
|
-
:host {
|
|
21
|
-
display: block;
|
|
22
|
-
}
|
|
23
|
-
`]
|
|
24
|
-
|
|
25
|
-
/** Chart data points */
|
|
26
|
-
@property({ type: Array })
|
|
27
|
-
data: ChartDataPoint[] = []
|
|
28
|
-
|
|
29
|
-
/** Chart height in pixels */
|
|
30
|
-
@property({ type: Number })
|
|
31
|
-
height = 200
|
|
32
|
-
|
|
33
|
-
/** Show grid lines */
|
|
34
|
-
@property({ type: Boolean })
|
|
35
|
-
showGrid = true
|
|
36
|
-
|
|
37
|
-
/** Show x-axis labels */
|
|
38
|
-
@property({ type: Boolean })
|
|
39
|
-
showLabels = true
|
|
40
|
-
|
|
41
|
-
/** Enable tooltips */
|
|
42
|
-
@property({ type: Boolean })
|
|
43
|
-
showTooltip = true
|
|
44
|
-
|
|
45
|
-
/** Number of peaks to highlight */
|
|
46
|
-
@property({ type: Number })
|
|
47
|
-
peakCount = 3
|
|
48
|
-
|
|
49
|
-
/** Animation duration in milliseconds */
|
|
50
|
-
@property({ type: Number })
|
|
51
|
-
animationDuration = 800
|
|
52
|
-
|
|
53
|
-
/** Enable entrance animation */
|
|
54
|
-
@property({ type: Boolean })
|
|
55
|
-
animated = true
|
|
56
|
-
|
|
57
|
-
/** Prefix for values (e.g., "EUR ") */
|
|
58
|
-
@property({ type: String })
|
|
59
|
-
valuePrefix = ''
|
|
60
|
-
|
|
61
|
-
/** Suffix for values (e.g., "%") */
|
|
62
|
-
@property({ type: String })
|
|
63
|
-
valueSuffix = ''
|
|
64
|
-
|
|
65
|
-
/** Decimal places for value display */
|
|
66
|
-
@property({ type: Number })
|
|
67
|
-
valueDecimals = 2
|
|
68
|
-
|
|
69
|
-
/** Theme overrides */
|
|
70
|
-
@property({ type: Object })
|
|
71
|
-
theme: Partial<ChartTheme> = {}
|
|
72
|
-
|
|
73
|
-
@state() private tooltipData: TooltipData = {
|
|
74
|
-
visible: false,
|
|
75
|
-
x: 0,
|
|
76
|
-
y: 0,
|
|
77
|
-
label: '',
|
|
78
|
-
value: 0,
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@state() private animationProgress = 0
|
|
82
|
-
@state() private isVisible = false
|
|
83
|
-
|
|
84
|
-
private canvasRef: Ref<HTMLCanvasElement> = createRef()
|
|
85
|
-
private containerRef: Ref<HTMLDivElement> = createRef()
|
|
86
|
-
private animationFrameId: number | null = null
|
|
87
|
-
private observer: IntersectionObserver | null = null
|
|
88
|
-
private processedData: ProcessedDataPoint[] = []
|
|
89
|
-
private resizeObserver: ResizeObserver | null = null
|
|
90
|
-
|
|
91
|
-
connectedCallback() {
|
|
92
|
-
super.connectedCallback()
|
|
93
|
-
this.setupIntersectionObserver()
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
disconnectedCallback() {
|
|
97
|
-
super.disconnectedCallback()
|
|
98
|
-
this.cleanup()
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
private cleanup() {
|
|
102
|
-
if (this.animationFrameId !== null) {
|
|
103
|
-
cancelAnimationFrame(this.animationFrameId)
|
|
104
|
-
this.animationFrameId = null
|
|
105
|
-
}
|
|
106
|
-
if (this.observer) {
|
|
107
|
-
this.observer.disconnect()
|
|
108
|
-
this.observer = null
|
|
109
|
-
}
|
|
110
|
-
if (this.resizeObserver) {
|
|
111
|
-
this.resizeObserver.disconnect()
|
|
112
|
-
this.resizeObserver = null
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
private setupIntersectionObserver() {
|
|
117
|
-
this.observer = new IntersectionObserver(
|
|
118
|
-
entries => {
|
|
119
|
-
const entry = entries[0]
|
|
120
|
-
if (entry.isIntersecting && !this.isVisible) {
|
|
121
|
-
this.isVisible = true
|
|
122
|
-
if (this.animated) {
|
|
123
|
-
this.startAnimation()
|
|
124
|
-
} else {
|
|
125
|
-
this.animationProgress = 1
|
|
126
|
-
this.drawChart()
|
|
127
|
-
}
|
|
128
|
-
} else if (!entry.isIntersecting) {
|
|
129
|
-
this.isVisible = false
|
|
130
|
-
if (this.animationFrameId !== null) {
|
|
131
|
-
cancelAnimationFrame(this.animationFrameId)
|
|
132
|
-
this.animationFrameId = null
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
{ threshold: 0.1 }
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
protected updated(changedProperties: PropertyValues) {
|
|
141
|
-
super.updated(changedProperties)
|
|
142
|
-
|
|
143
|
-
if (this.containerRef.value && this.observer) {
|
|
144
|
-
this.observer.observe(this.containerRef.value)
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (this.canvasRef.value && !this.resizeObserver) {
|
|
148
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
149
|
-
this.drawChart()
|
|
150
|
-
})
|
|
151
|
-
this.resizeObserver.observe(this.canvasRef.value)
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Redraw when data changes
|
|
155
|
-
if (changedProperties.has('data') && this.isVisible) {
|
|
156
|
-
if (this.animated) {
|
|
157
|
-
this.animationProgress = 0
|
|
158
|
-
this.startAnimation()
|
|
159
|
-
} else {
|
|
160
|
-
this.animationProgress = 1
|
|
161
|
-
this.drawChart()
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Redraw on theme or config changes
|
|
166
|
-
if (
|
|
167
|
-
(changedProperties.has('theme') ||
|
|
168
|
-
changedProperties.has('showGrid') ||
|
|
169
|
-
changedProperties.has('showLabels') ||
|
|
170
|
-
changedProperties.has('peakCount')) &&
|
|
171
|
-
this.isVisible
|
|
172
|
-
) {
|
|
173
|
-
this.drawChart()
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
private startAnimation() {
|
|
178
|
-
const startTime = performance.now()
|
|
179
|
-
const duration = this.animationDuration
|
|
180
|
-
|
|
181
|
-
const animateFrame = (currentTime: number) => {
|
|
182
|
-
const elapsed = currentTime - startTime
|
|
183
|
-
const progress = Math.min(elapsed / duration, 1)
|
|
184
|
-
|
|
185
|
-
this.animationProgress = easeOutCubic(progress)
|
|
186
|
-
this.drawChart()
|
|
187
|
-
|
|
188
|
-
if (progress < 1 && this.isVisible) {
|
|
189
|
-
this.animationFrameId = requestAnimationFrame(animateFrame)
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
this.animationFrameId = requestAnimationFrame(animateFrame)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
private processData(): ProcessedDataPoint[] {
|
|
197
|
-
if (!this.data || this.data.length === 0) return []
|
|
198
|
-
|
|
199
|
-
// Find top N peak values
|
|
200
|
-
const sortedByValue = [...this.data].toSorted((a, b) => b.value - a.value)
|
|
201
|
-
const peakLabels = new Set(sortedByValue.slice(0, this.peakCount).map(d => d.label))
|
|
202
|
-
|
|
203
|
-
return this.data.map(d => ({
|
|
204
|
-
...d,
|
|
205
|
-
x: 0, // Will be calculated during draw
|
|
206
|
-
y: 0, // Will be calculated during draw
|
|
207
|
-
isPeak: peakLabels.has(d.label),
|
|
208
|
-
}))
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
private getThemeValue<K extends keyof ChartTheme>(
|
|
212
|
-
key: K,
|
|
213
|
-
defaultValue: NonNullable<ChartTheme[K]>
|
|
214
|
-
): NonNullable<ChartTheme[K]> {
|
|
215
|
-
return (this.theme[key] as NonNullable<ChartTheme[K]>) ?? defaultValue
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
private drawChart() {
|
|
219
|
-
const canvas = this.canvasRef.value
|
|
220
|
-
if (!canvas) return
|
|
221
|
-
|
|
222
|
-
const ctx = canvas.getContext('2d')
|
|
223
|
-
if (!ctx) return
|
|
224
|
-
|
|
225
|
-
const dpr = window.devicePixelRatio || 1
|
|
226
|
-
const rect = canvas.getBoundingClientRect()
|
|
227
|
-
const width = rect.width
|
|
228
|
-
const height = rect.height
|
|
229
|
-
|
|
230
|
-
// Set canvas size for high DPI
|
|
231
|
-
canvas.width = width * dpr
|
|
232
|
-
canvas.height = height * dpr
|
|
233
|
-
ctx.scale(dpr, dpr)
|
|
234
|
-
|
|
235
|
-
// Clear canvas
|
|
236
|
-
ctx.clearRect(0, 0, width, height)
|
|
237
|
-
|
|
238
|
-
const data = this.processData()
|
|
239
|
-
if (data.length === 0) return
|
|
240
|
-
|
|
241
|
-
const padding = { top: 20, right: 20, bottom: this.showLabels ? 40 : 20, left: 20 }
|
|
242
|
-
const chartWidth = width - padding.left - padding.right
|
|
243
|
-
const chartHeight = height - padding.top - padding.bottom
|
|
244
|
-
|
|
245
|
-
// Find max value for scaling
|
|
246
|
-
const maxValue = Math.max(...data.map(d => d.value), 1)
|
|
247
|
-
|
|
248
|
-
// Calculate positions
|
|
249
|
-
// oxlint-disable-next-line oxc/no-map-spread
|
|
250
|
-
const points = data.map((d, i) => ({
|
|
251
|
-
...d,
|
|
252
|
-
x: padding.left + (data.length > 1 ? (i / (data.length - 1)) * chartWidth : chartWidth / 2),
|
|
253
|
-
y: padding.top + chartHeight - (d.value / maxValue) * chartHeight,
|
|
254
|
-
}))
|
|
255
|
-
|
|
256
|
-
this.processedData = points
|
|
257
|
-
|
|
258
|
-
// Get primary color from CSS or theme
|
|
259
|
-
const computedStyle = getComputedStyle(this)
|
|
260
|
-
const defaultPrimaryColor =
|
|
261
|
-
computedStyle.getPropertyValue('--schmancy-sys-color-primary').trim() || '#6750A4'
|
|
262
|
-
const primaryColor = this.getThemeValue('primaryColor', defaultPrimaryColor)
|
|
263
|
-
const [gradientOpacityTop, gradientOpacityBottom] = this.getThemeValue('gradientOpacity', [0.4, 0.05])
|
|
264
|
-
const strokeWidth = this.getThemeValue('strokeWidth', 2)
|
|
265
|
-
const pointRadius = this.getThemeValue('pointRadius', 4)
|
|
266
|
-
const peakRadius = this.getThemeValue('peakRadius', 6)
|
|
267
|
-
|
|
268
|
-
// Draw grid lines
|
|
269
|
-
if (this.showGrid) {
|
|
270
|
-
ctx.strokeStyle = 'rgba(128, 128, 128, 0.15)'
|
|
271
|
-
ctx.lineWidth = 1
|
|
272
|
-
ctx.setLineDash([4, 4])
|
|
273
|
-
|
|
274
|
-
for (let i = 1; i <= 3; i++) {
|
|
275
|
-
const y = padding.top + (chartHeight * i) / 4
|
|
276
|
-
ctx.beginPath()
|
|
277
|
-
ctx.moveTo(padding.left, y)
|
|
278
|
-
ctx.lineTo(width - padding.right, y)
|
|
279
|
-
ctx.stroke()
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
ctx.setLineDash([])
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// Create smooth curve path using Catmull-Rom spline
|
|
286
|
-
const curvePath = new Path2D()
|
|
287
|
-
const areaPath = new Path2D()
|
|
288
|
-
|
|
289
|
-
if (points.length >= 2) {
|
|
290
|
-
// Start area path from bottom left
|
|
291
|
-
areaPath.moveTo(points[0].x, padding.top + chartHeight)
|
|
292
|
-
curvePath.moveTo(points[0].x, points[0].y)
|
|
293
|
-
areaPath.lineTo(points[0].x, points[0].y)
|
|
294
|
-
|
|
295
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
296
|
-
const p0 = points[Math.max(0, i - 1)]
|
|
297
|
-
const p1 = points[i]
|
|
298
|
-
const p2 = points[Math.min(points.length - 1, i + 1)]
|
|
299
|
-
const p3 = points[Math.min(points.length - 1, i + 2)]
|
|
300
|
-
|
|
301
|
-
// Draw curve segments
|
|
302
|
-
const segments = 16
|
|
303
|
-
for (let j = 1; j <= segments; j++) {
|
|
304
|
-
const t = j / segments
|
|
305
|
-
const point = catmullRomSpline(p0, p1, p2, p3, t)
|
|
306
|
-
curvePath.lineTo(point.x, point.y)
|
|
307
|
-
areaPath.lineTo(point.x, point.y)
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// Close area path
|
|
312
|
-
areaPath.lineTo(points[points.length - 1].x, padding.top + chartHeight)
|
|
313
|
-
areaPath.closePath()
|
|
314
|
-
} else if (points.length === 1) {
|
|
315
|
-
// Single point - draw a dot
|
|
316
|
-
curvePath.arc(points[0].x, points[0].y, pointRadius, 0, Math.PI * 2)
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Apply animation clipping
|
|
320
|
-
ctx.save()
|
|
321
|
-
ctx.beginPath()
|
|
322
|
-
ctx.rect(0, 0, padding.left + chartWidth * this.animationProgress, height)
|
|
323
|
-
ctx.clip()
|
|
324
|
-
|
|
325
|
-
// Draw gradient fill
|
|
326
|
-
if (points.length >= 2) {
|
|
327
|
-
const gradient = ctx.createLinearGradient(0, padding.top, 0, padding.top + chartHeight)
|
|
328
|
-
gradient.addColorStop(0, hexToRgba(primaryColor, gradientOpacityTop))
|
|
329
|
-
gradient.addColorStop(1, hexToRgba(primaryColor, gradientOpacityBottom))
|
|
330
|
-
|
|
331
|
-
ctx.fillStyle = gradient
|
|
332
|
-
ctx.fill(areaPath)
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
// Draw stroke
|
|
336
|
-
ctx.strokeStyle = primaryColor
|
|
337
|
-
ctx.lineWidth = strokeWidth
|
|
338
|
-
ctx.lineCap = 'round'
|
|
339
|
-
ctx.lineJoin = 'round'
|
|
340
|
-
ctx.stroke(curvePath)
|
|
341
|
-
|
|
342
|
-
// Draw data points
|
|
343
|
-
points.forEach((point, index) => {
|
|
344
|
-
const pointProgress = (index / (points.length - 1 || 1)) * this.animationProgress
|
|
345
|
-
if (pointProgress < index / (points.length || 1)) return
|
|
346
|
-
|
|
347
|
-
const radius = point.isPeak ? peakRadius - 1 : pointRadius - 1
|
|
348
|
-
const outerRadius = point.isPeak ? peakRadius + 4 : pointRadius + 2
|
|
349
|
-
|
|
350
|
-
// Outer glow for peaks
|
|
351
|
-
if (point.isPeak) {
|
|
352
|
-
ctx.beginPath()
|
|
353
|
-
ctx.arc(point.x, point.y, outerRadius, 0, Math.PI * 2)
|
|
354
|
-
ctx.fillStyle = hexToRgba(primaryColor, 0.2)
|
|
355
|
-
ctx.fill()
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// Inner dot
|
|
359
|
-
ctx.beginPath()
|
|
360
|
-
ctx.arc(point.x, point.y, radius, 0, Math.PI * 2)
|
|
361
|
-
ctx.fillStyle = primaryColor
|
|
362
|
-
ctx.fill()
|
|
363
|
-
|
|
364
|
-
// White center for peaks
|
|
365
|
-
if (point.isPeak) {
|
|
366
|
-
ctx.beginPath()
|
|
367
|
-
ctx.arc(point.x, point.y, 2, 0, Math.PI * 2)
|
|
368
|
-
ctx.fillStyle = 'white'
|
|
369
|
-
ctx.fill()
|
|
370
|
-
}
|
|
371
|
-
})
|
|
372
|
-
|
|
373
|
-
ctx.restore()
|
|
374
|
-
|
|
375
|
-
// Draw labels
|
|
376
|
-
if (this.showLabels && points.length > 0) {
|
|
377
|
-
ctx.fillStyle = 'rgba(128, 128, 128, 0.8)'
|
|
378
|
-
ctx.font = '11px system-ui, sans-serif'
|
|
379
|
-
ctx.textAlign = 'center'
|
|
380
|
-
ctx.textBaseline = 'top'
|
|
381
|
-
|
|
382
|
-
// Show fewer labels on narrow charts
|
|
383
|
-
const labelStep = width < 400 ? 3 : width < 600 ? 2 : 1
|
|
384
|
-
points.forEach((point, index) => {
|
|
385
|
-
if (index % labelStep === 0) {
|
|
386
|
-
ctx.fillText(point.label, point.x, height - padding.bottom + 8)
|
|
387
|
-
}
|
|
388
|
-
})
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
private formatValue(value: number): string {
|
|
393
|
-
const formatted = value.toFixed(this.valueDecimals)
|
|
394
|
-
return `${this.valuePrefix}${formatted}${this.valueSuffix}`
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
private handlePointerMove = (e: PointerEvent) => {
|
|
398
|
-
if (this.processedData.length === 0 || !this.showTooltip) return
|
|
399
|
-
|
|
400
|
-
const canvas = this.canvasRef.value
|
|
401
|
-
if (!canvas) return
|
|
402
|
-
|
|
403
|
-
const rect = canvas.getBoundingClientRect()
|
|
404
|
-
const x = e.clientX - rect.left
|
|
405
|
-
|
|
406
|
-
// Find closest data point
|
|
407
|
-
let closestPoint: ProcessedDataPoint | null = null
|
|
408
|
-
let minDistance = Infinity
|
|
409
|
-
|
|
410
|
-
this.processedData.forEach(point => {
|
|
411
|
-
const distance = Math.abs(point.x - x)
|
|
412
|
-
if (distance < minDistance) {
|
|
413
|
-
minDistance = distance
|
|
414
|
-
closestPoint = point
|
|
415
|
-
}
|
|
416
|
-
})
|
|
417
|
-
|
|
418
|
-
if (closestPoint && minDistance < 30) {
|
|
419
|
-
this.tooltipData = {
|
|
420
|
-
visible: true,
|
|
421
|
-
x: closestPoint.x,
|
|
422
|
-
y: closestPoint.y,
|
|
423
|
-
label: closestPoint.label,
|
|
424
|
-
value: closestPoint.value,
|
|
425
|
-
metadata: closestPoint.metadata,
|
|
426
|
-
}
|
|
427
|
-
} else {
|
|
428
|
-
this.tooltipData = { ...this.tooltipData, visible: false }
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
private handlePointerLeave = () => {
|
|
433
|
-
this.tooltipData = { ...this.tooltipData, visible: false }
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
private renderMetadata() {
|
|
437
|
-
if (!this.tooltipData.metadata) return ''
|
|
438
|
-
return Object.entries(this.tooltipData.metadata).map(
|
|
439
|
-
([key, value]) => html`
|
|
440
|
-
<schmancy-typography type="body" token="sm" class="text-surface-onVariant">
|
|
441
|
-
${key}: ${String(value)}
|
|
442
|
-
</schmancy-typography>
|
|
443
|
-
`
|
|
444
|
-
)
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
render() {
|
|
448
|
-
if (!this.data || this.data.length === 0) {
|
|
449
|
-
return html``
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
return html`
|
|
453
|
-
<div ${ref(this.containerRef)} class="relative">
|
|
454
|
-
<div class="relative" style="height: ${this.height}px; touch-action: pan-y;">
|
|
455
|
-
<canvas
|
|
456
|
-
${ref(this.canvasRef)}
|
|
457
|
-
class="w-full h-full"
|
|
458
|
-
style="display: block;"
|
|
459
|
-
@pointermove=${this.handlePointerMove}
|
|
460
|
-
@pointerleave=${this.handlePointerLeave}
|
|
461
|
-
></canvas>
|
|
462
|
-
|
|
463
|
-
<!-- Tooltip -->
|
|
464
|
-
${this.showTooltip
|
|
465
|
-
? html`
|
|
466
|
-
<div
|
|
467
|
-
class="absolute pointer-events-none transition-opacity duration-150 ${this.tooltipData.visible
|
|
468
|
-
? 'opacity-100'
|
|
469
|
-
: 'opacity-0'}"
|
|
470
|
-
style="
|
|
471
|
-
left: ${this.tooltipData.x}px;
|
|
472
|
-
top: ${this.tooltipData.y - 60}px;
|
|
473
|
-
transform: translateX(-50%);
|
|
474
|
-
"
|
|
475
|
-
>
|
|
476
|
-
<schmancy-surface elevation="3" rounded="all" class="px-3 py-2 min-w-max">
|
|
477
|
-
<schmancy-typography type="label" token="sm" class="text-surface-onVariant">
|
|
478
|
-
${this.tooltipData.label}
|
|
479
|
-
</schmancy-typography>
|
|
480
|
-
<schmancy-typography type="title" token="md" class="text-surface-on font-semibold">
|
|
481
|
-
${this.formatValue(this.tooltipData.value)}
|
|
482
|
-
</schmancy-typography>
|
|
483
|
-
${this.renderMetadata()}
|
|
484
|
-
</schmancy-surface>
|
|
485
|
-
</div>
|
|
486
|
-
`
|
|
487
|
-
: ''}
|
|
488
|
-
</div>
|
|
489
|
-
</div>
|
|
490
|
-
`
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
declare global {
|
|
495
|
-
interface HTMLElementTagNameMap {
|
|
496
|
-
'schmancy-area-chart': SchmancyAreaChart
|
|
497
|
-
}
|
|
498
|
-
}
|
package/src/charts/index.ts
DELETED