@mhmo91/schmancy 0.9.5 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +493 -718
- package/dist/{animation-CO_Csq84.cjs.map → animation-Bcwh107v.cjs.map} +1 -1
- package/dist/{animation-BK-8BwY8.js.map → animation-CXKSuUoE.js.map} +1 -1
- package/dist/{area-CRoGqD_u.js → area-BARjKpE9.js} +2 -2
- package/dist/{area-CRoGqD_u.js.map → area-BARjKpE9.js.map} +1 -1
- package/dist/{area-JPykB7A9.cjs → area-D9b9dHQr.cjs} +3 -3
- package/dist/{area-JPykB7A9.cjs.map → area-D9b9dHQr.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-kz8UgPTO.js → audio-C7TzWI8M.js} +1 -1
- package/dist/audio-C7TzWI8M.js.map +1 -0
- package/dist/{audio-DtYYgzYD.cjs → audio-DUVz7Ars.cjs} +1 -1
- package/dist/audio-DUVz7Ars.cjs.map +1 -0
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-AI2CCJmK.cjs +115 -0
- package/dist/autocomplete-AI2CCJmK.cjs.map +1 -0
- package/dist/{autocomplete-BllPQwr8.js → autocomplete-DOimwVMP.js} +48 -22
- package/dist/autocomplete-DOimwVMP.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-DYEAZ8Qj.cjs → boat-Bk4u-LzT.cjs} +2 -2
- package/dist/{boat-DYEAZ8Qj.cjs.map → boat-Bk4u-LzT.cjs.map} +1 -1
- package/dist/{boat-BDTQ-du9.js → boat-DrghVeWK.js} +5 -5
- package/dist/{boat-BDTQ-du9.js.map → boat-DrghVeWK.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +34 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +73 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/{busy-ChDAeaKF.js → busy-BmFfwyz_.js} +7 -6
- package/dist/{busy-ChDAeaKF.js.map → busy-BmFfwyz_.js.map} +1 -1
- package/dist/{busy-Dj7Xn0Z0.cjs → busy-c_q_F8O0.cjs} +8 -8
- package/dist/{busy-Dj7Xn0Z0.cjs.map → busy-c_q_F8O0.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +4 -4
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +25 -6
- package/dist/button.js.map +1 -1
- package/dist/{card-DZFPRPqs.js → card-BADJHUMA.js} +16 -15
- package/dist/{card-DZFPRPqs.js.map → card-BADJHUMA.js.map} +1 -1
- package/dist/{card-BvPWVEJX.cjs → card-C_E944_Z.cjs} +10 -10
- package/dist/{card-BvPWVEJX.cjs.map → card-C_E944_Z.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +3 -3
- package/dist/charts.cjs.map +1 -1
- package/dist/charts.js +2 -2
- package/dist/{checkbox-GSSjqo6w.js → checkbox-D7rvCrGk.js} +28 -9
- package/dist/{checkbox-GSSjqo6w.js.map → checkbox-D7rvCrGk.js.map} +1 -1
- package/dist/{checkbox-BC_37rsG.cjs → checkbox-ZqDoCagB.cjs} +10 -10
- package/dist/{checkbox-BC_37rsG.cjs.map → checkbox-ZqDoCagB.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-B19XS8Xc.cjs → chips-Cux635Qs.cjs} +18 -18
- package/dist/chips-Cux635Qs.cjs.map +1 -0
- package/dist/{chips-B9oAEfE_.js → chips-vdzIsesI.js} +37 -27
- package/dist/chips-vdzIsesI.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-fSLrlgOb.cjs → code-highlight-C9lKek2p.cjs} +11 -11
- package/dist/{code-highlight-fSLrlgOb.cjs.map → code-highlight-C9lKek2p.cjs.map} +1 -1
- package/dist/{code-highlight-DCk5lJY-.js → code-highlight-D6yruol6.js} +6 -5
- package/dist/{code-highlight-DCk5lJY-.js.map → code-highlight-D6yruol6.js.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/components-ByRyEzz5.cjs +73 -0
- package/dist/{components-CyD6a7gQ.cjs.map → components-ByRyEzz5.cjs.map} +1 -1
- package/dist/{components-COsM6sJZ.js → components-DSvPKR9Q.js} +2 -2
- package/dist/{components-COsM6sJZ.js.map → components-DSvPKR9Q.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +7 -7
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +5 -4
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{cursor-glow-DtSy_PJd.cjs → cursor-glow-82y5h3E4.cjs} +1 -1
- package/dist/{cursor-glow-DtSy_PJd.cjs.map → cursor-glow-82y5h3E4.cjs.map} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js → cursor-glow-C2YRrB8Z.js} +1 -1
- package/dist/{cursor-glow-Ah7VXSj7.js.map → cursor-glow-C2YRrB8Z.js.map} +1 -1
- package/dist/{date-range-ZAaQB22I.cjs → date-range-DJsavigf.cjs} +3 -3
- package/dist/date-range-DJsavigf.cjs.map +1 -0
- package/dist/{date-range-inline-Bl8qbiQF.js → date-range-inline-B87TDYI6.js} +1 -1
- package/dist/{date-range-inline-Bl8qbiQF.js.map → date-range-inline-B87TDYI6.js.map} +1 -1
- package/dist/date-range-inline-De-M0VmL.cjs +43 -0
- package/dist/{date-range-inline-m7nLjOMI.cjs.map → date-range-inline-De-M0VmL.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/{date-range-Sfyco9-n.js → date-range-tEX2Jx2j.js} +4 -4
- package/dist/date-range-tEX2Jx2j.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay-BvVdfhAR.cjs +9 -0
- package/dist/{delay-7boauN6N.cjs.map → delay-BvVdfhAR.cjs.map} +1 -1
- package/dist/{delay-CgX6m0HN.js → delay-CZw37zps.js} +9 -8
- package/dist/{delay-CgX6m0HN.js.map → delay-CZw37zps.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-BHnk8l4q.cjs → details-Bhz8_whd.cjs} +9 -9
- package/dist/{details-BHnk8l4q.cjs.map → details-Bhz8_whd.cjs.map} +1 -1
- package/dist/{details-BPkUg8Cq.js → details-D7VTnLOh.js} +16 -15
- package/dist/{details-BPkUg8Cq.js.map → details-D7VTnLOh.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-service-NZEvyEK-.js → dialog-service-ClFrOWf4.js} +2 -2
- package/dist/{dialog-service-NZEvyEK-.js.map → dialog-service-ClFrOWf4.js.map} +1 -1
- package/dist/{dialog-service-VnW4gkmE.cjs → dialog-service-DcuAavp2.cjs} +1 -1
- package/dist/{dialog-service-VnW4gkmE.cjs.map → dialog-service-DcuAavp2.cjs.map} +1 -1
- package/dist/dialog.cjs +18 -11
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +66 -43
- package/dist/dialog.js.map +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +5 -5
- package/dist/{divider-_khrhrZo.cjs → divider-S0bHwCCS.cjs} +2 -2
- package/dist/{divider-_khrhrZo.cjs.map → divider-S0bHwCCS.cjs.map} +1 -1
- package/dist/{divider-CW9a7MMj.js → divider-zS232JDr.js} +2 -2
- package/dist/{divider-CW9a7MMj.js.map → divider-zS232JDr.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +8 -7
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-iQ7EOMP7.js → expand-BXt9SqAF.js} +13 -12
- package/dist/{expand-iQ7EOMP7.js.map → expand-BXt9SqAF.js.map} +1 -1
- package/dist/{expand-Cp7-PH8b.cjs → expand-Dr7TFXpl.cjs} +18 -18
- package/dist/{expand-Cp7-PH8b.cjs.map → expand-Dr7TFXpl.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-IKAiJJhv.cjs → extra-BmZTXAp0.cjs} +3 -3
- package/dist/{extra-IKAiJJhv.cjs.map → extra-BmZTXAp0.cjs.map} +1 -1
- package/dist/{extra-wEpvEFbK.js → extra-COYhsOyZ.js} +2 -2
- package/dist/{extra-wEpvEFbK.js.map → extra-COYhsOyZ.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/float-CSRW-Rrd.cjs +1 -0
- package/dist/{float-D5rNC82i.cjs.map → float-CSRW-Rrd.cjs.map} +1 -1
- package/dist/{float-BQ_urmMs.js → float-DCXafWh6.js} +2 -2
- package/dist/{float-BQ_urmMs.js.map → float-DCXafWh6.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{flow-CUj0fDT_.js.map → flow-CqgDEIqK.js.map} +1 -1
- package/dist/{flow-Bbwn6dRN.cjs.map → flow-DSu4PLt1.cjs.map} +1 -1
- package/dist/form-CAY9GSCd.cjs +1 -0
- package/dist/form-CAY9GSCd.cjs.map +1 -0
- package/dist/form-D2cJ58TB.js +68 -0
- package/dist/form-D2cJ58TB.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +2 -1
- package/dist/{hashContent-DaeGmY-p.cjs.map → hashContent-kKvXKFa9.cjs.map} +1 -1
- package/dist/{hashContent-DYM21p6t.js.map → hashContent-nD2uWwi2.js.map} +1 -1
- package/dist/{icons-BDqiGXrO.js → icons-BbaI9Zf-.js} +9 -8
- package/dist/icons-BbaI9Zf-.js.map +1 -0
- package/dist/{icons-B57_93VV.cjs → icons-DPUeLS_Y.cjs} +3 -3
- package/dist/icons-DPUeLS_Y.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-WnWPIrBG.js → iframe-CEDOvkql.js} +5 -4
- package/dist/{iframe-WnWPIrBG.js.map → iframe-CEDOvkql.js.map} +1 -1
- package/dist/{iframe-DNHL3GIk.cjs → iframe-Ct50FYXq.cjs} +3 -3
- package/dist/{iframe-DNHL3GIk.cjs.map → iframe-Ct50FYXq.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 +65 -59
- package/dist/{input-BiSrTcrR.cjs → input-DMjpf6V8.cjs} +2 -2
- package/dist/{input-BiSrTcrR.cjs.map → input-DMjpf6V8.cjs.map} +1 -1
- package/dist/{input-VaXHFrRn.js → input-Ri72dn5t.js} +1 -1
- package/dist/{input-VaXHFrRn.js.map → input-Ri72dn5t.js.map} +1 -1
- package/dist/{input-chip-Dy-AiP55.cjs → input-chip-BhjGVpc3.cjs} +9 -9
- package/dist/input-chip-BhjGVpc3.cjs.map +1 -0
- package/dist/{input-chip-QejNcRnS.js → input-chip-CI4__N8w.js} +13 -9
- package/dist/input-chip-CI4__N8w.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/{intersection-CZpaIHeT.cjs.map → intersection-D1v1UCVv.cjs.map} +1 -1
- package/dist/{intersection-BPLpqYEd.js.map → intersection-LfEsy29T.js.map} +1 -1
- package/dist/json.cjs +3 -3
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +5 -4
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +28 -0
- package/dist/kbd.cjs.map +1 -0
- package/dist/kbd.js +45 -0
- package/dist/kbd.js.map +1 -0
- package/dist/{layout-yxSlLybo.js → layout-BE2ld1IY.js} +1 -1
- package/dist/{layout-yxSlLybo.js.map → layout-BE2ld1IY.js.map} +1 -1
- package/dist/layout-D7xOqMkJ.cjs +17 -0
- package/dist/{layout-DNYG3phx.cjs.map → layout-D7xOqMkJ.cjs.map} +1 -1
- package/dist/{layout-4C-6_cre.cjs → layout-PZCF3kwl.cjs} +1 -1
- package/dist/{layout-4C-6_cre.cjs.map → layout-PZCF3kwl.cjs.map} +1 -1
- package/dist/{layout-CnsXeCAy.js → layout-uAQpJN31.js} +20 -19
- package/dist/{layout-CnsXeCAy.js.map → layout-uAQpJN31.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-BrI1Z31s.js → lightbox-C0OEHns9.js} +10 -9
- package/dist/{lightbox-BrI1Z31s.js.map → lightbox-C0OEHns9.js.map} +1 -1
- package/dist/{lightbox-CmACf0t5.cjs → lightbox-cXRnvHMN.cjs} +20 -20
- package/dist/{lightbox-CmACf0t5.cjs.map → lightbox-cXRnvHMN.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-swIL9VDv.cjs → list-CmJ5h35b.cjs} +5 -5
- package/dist/{list-swIL9VDv.cjs.map → list-CmJ5h35b.cjs.map} +1 -1
- package/dist/{list-Cm-jjXxM.js → list-d1mHar5p.js} +14 -13
- package/dist/{list-Cm-jjXxM.js.map → list-d1mHar5p.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-3llHwB-8.cjs → litElement.mixin-Bj2q1yPw.cjs} +1 -1
- package/dist/{litElement.mixin-3llHwB-8.cjs.map → litElement.mixin-Bj2q1yPw.cjs.map} +1 -1
- package/dist/{litElement.mixin-6jJYHCrZ.js → litElement.mixin-CncaUoxz.js} +1 -1
- package/dist/{litElement.mixin-6jJYHCrZ.js.map → litElement.mixin-CncaUoxz.js.map} +1 -1
- package/dist/{magnetic-BZGFxAWG.js → magnetic-Dj52WplI.js} +2 -2
- package/dist/{magnetic-BZGFxAWG.js.map → magnetic-Dj52WplI.js.map} +1 -1
- package/dist/{magnetic-Dux4QwO4.cjs → magnetic-aBBnj_vk.cjs} +1 -1
- package/dist/{magnetic-Dux4QwO4.cjs.map → magnetic-aBBnj_vk.cjs.map} +1 -1
- package/dist/{mailbox-D6LkQcN5.cjs → mailbox-BmChskZc.cjs} +59 -59
- package/dist/{mailbox-D6LkQcN5.cjs.map → mailbox-BmChskZc.cjs.map} +1 -1
- package/dist/{mailbox-BuvsVaAQ.js → mailbox-C4-E93be.js} +13 -12
- package/dist/{mailbox-BuvsVaAQ.js.map → mailbox-C4-E93be.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-CQiKAxC3.js → map-DHyYLhvy.js} +6 -5
- package/dist/{map-CQiKAxC3.js.map → map-DHyYLhvy.js.map} +1 -1
- package/dist/{map-D5NN4VET.cjs → map-DYEvlNl0.cjs} +7 -7
- package/dist/{map-D5NN4VET.cjs.map → map-DYEvlNl0.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-CkgMO9K5.cjs → menu-BlPTI6H9.cjs} +3 -3
- package/dist/{menu-CkgMO9K5.cjs.map → menu-BlPTI6H9.cjs.map} +1 -1
- package/dist/{menu-C1x04YZw.js → menu-DFDBADp4.js} +3 -3
- package/dist/{menu-C1x04YZw.js.map → menu-DFDBADp4.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.cjs.map +1 -1
- package/dist/mixins.js +43 -15
- package/dist/mixins.js.map +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 +3 -3
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +2 -2
- package/dist/{notification-BnBgxjF-.js → notification-DGpv8g2H.js} +4 -4
- package/dist/{notification-BnBgxjF-.js.map → notification-DGpv8g2H.js.map} +1 -1
- package/dist/notification-DKVWYhqs.cjs +23 -0
- package/dist/{notification-CZFEhWxc.cjs.map → notification-DKVWYhqs.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-DBO8xZwd.js → option-BD2eh458.js} +6 -5
- package/dist/{option-DBO8xZwd.js.map → option-BD2eh458.js.map} +1 -1
- package/dist/{option-BrxCVwSx.cjs → option-LtSDy2xf.cjs} +5 -5
- package/dist/{option-BrxCVwSx.cjs.map → option-LtSDy2xf.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-DQey9Qph.cjs.map → overlay-stack-CEYGD9T1.cjs.map} +1 -1
- package/dist/{overlay-stack-DT1SdaGW.js.map → overlay-stack-Ca4EK2Mu.js.map} +1 -1
- package/dist/page.cjs +2 -2
- package/dist/page.cjs.map +1 -1
- package/dist/page.js +5 -5
- package/dist/{progress-Db2e4_Zd.cjs → progress-B5ChDPbB.cjs} +2 -2
- package/dist/{progress-Db2e4_Zd.cjs.map → progress-B5ChDPbB.cjs.map} +1 -1
- package/dist/{progress-DeiHxXo7.js → progress-CE1Pk2hi.js} +2 -2
- package/dist/{progress-DeiHxXo7.js.map → progress-CE1Pk2hi.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-DHnhQtCH.cjs → provide-BZ9lq_Be.cjs} +1 -1
- package/dist/{provide-DHnhQtCH.cjs.map → provide-BZ9lq_Be.cjs.map} +1 -1
- package/dist/{provide-C1aQhxYo.js → provide-jn1Fj1vv.js} +1 -1
- package/dist/{provide-C1aQhxYo.js.map → provide-jn1Fj1vv.js.map} +1 -1
- package/dist/qr-scanner.cjs +2 -2
- package/dist/qr-scanner.cjs.map +1 -1
- package/dist/qr-scanner.js +2 -2
- package/dist/radio-group-Cd9pZ2MR.cjs +40 -0
- package/dist/{radio-group-Cspwd-Vw.cjs.map → radio-group-Cd9pZ2MR.cjs.map} +1 -1
- package/dist/{radio-group-zSO0AkJf.js → radio-group-CyRHgIF3.js} +7 -6
- package/dist/{radio-group-zSO0AkJf.js.map → radio-group-CyRHgIF3.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +4 -4
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +4 -3
- package/dist/range.js.map +1 -1
- package/dist/{reduced-motion-D-L12p7G.js.map → reduced-motion-B83yZbcO.js.map} +1 -1
- package/dist/{reduced-motion-Ds05GPyz.cjs.map → reduced-motion-DR32yKEO.cjs.map} +1 -1
- package/dist/{rxjs-utils-BSjmI9-Q.js.map → rxjs-utils-Bldch1RO.js.map} +1 -1
- package/dist/{rxjs-utils-DCsfzeap.cjs.map → rxjs-utils-hAgKC7vk.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-QMCmbbDv.cjs → scroll-C_iNOi7E.cjs} +2 -2
- package/dist/{scroll-QMCmbbDv.cjs.map → scroll-C_iNOi7E.cjs.map} +1 -1
- package/dist/{scroll-cBDzye64.js → scroll-DoliwpRu.js} +7 -6
- package/dist/{scroll-cBDzye64.js.map → scroll-DoliwpRu.js.map} +1 -1
- package/dist/{search-C4dFHYbX.js.map → search-BlGJ6uJv.js.map} +1 -1
- package/dist/{search-Ds8tt7Et.cjs.map → search-C8eAOzBm.cjs.map} +1 -1
- package/dist/{select-Ct37l3lg.cjs → select-CWWuZ2iJ.cjs} +2 -2
- package/dist/{select-Ct37l3lg.cjs.map → select-CWWuZ2iJ.cjs.map} +1 -1
- package/dist/{select-c6HbWvKP.js → select-_vHPXi30.js} +3 -3
- package/dist/{select-c6HbWvKP.js.map → select-_vHPXi30.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BMXcUiIm.js → sheet-i1KtxGIj.js} +5 -5
- package/dist/{sheet-BMXcUiIm.js.map → sheet-i1KtxGIj.js.map} +1 -1
- package/dist/{sheet-CQec-bCV.cjs → sheet-r0oEYIdi.cjs} +2 -2
- package/dist/{sheet-CQec-bCV.cjs.map → sheet-r0oEYIdi.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-Dumvr1HT.cjs → sheet.service-Cr13Oo6G.cjs} +1 -1
- package/dist/{sheet.service-Dumvr1HT.cjs.map → sheet.service-Cr13Oo6G.cjs.map} +1 -1
- package/dist/{sheet.service-BcPV3Du4.js → sheet.service-DUO5_kmI.js} +3 -3
- package/dist/{sheet.service-BcPV3Du4.js.map → sheet.service-DUO5_kmI.js.map} +1 -1
- package/dist/skeleton.cjs +33 -0
- package/dist/skeleton.cjs.map +1 -0
- package/dist/skeleton.js +58 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/skills/INDEX.md +7 -6
- package/dist/skills/breadcrumb.md +53 -0
- package/dist/skills/kbd.md +40 -0
- package/dist/skills/schmancy/INDEX.md +7 -6
- package/dist/skills/schmancy/breadcrumb.md +53 -0
- package/dist/skills/schmancy/kbd.md +40 -0
- package/dist/skills/schmancy/skeleton.md +40 -0
- package/dist/skills/schmancy/splash-screen.md +60 -0
- package/dist/skills/schmancy/switch.md +58 -0
- package/dist/skills/schmancy/tooltip.md +1 -1
- package/dist/skills/schmancy/visually-hidden.md +41 -0
- package/dist/skills/skeleton.md +40 -0
- package/dist/skills/splash-screen.md +60 -0
- package/dist/skills/switch.md +58 -0
- package/dist/skills/tooltip.md +1 -1
- package/dist/skills/visually-hidden.md +41 -0
- package/dist/slider.cjs +3 -3
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +2 -2
- package/dist/{sound.service-Bu3EQLv2.cjs → sound.service-BjSoGjmT.cjs} +1 -1
- package/dist/{sound.service-Bu3EQLv2.cjs.map → sound.service-BjSoGjmT.cjs.map} +1 -1
- package/dist/{sound.service-m3BrSfuH.js → sound.service-cdkw3Wkv.js} +1 -1
- package/dist/{sound.service-m3BrSfuH.js.map → sound.service-cdkw3Wkv.js.map} +1 -1
- package/dist/splash-screen-CquyPP1C.cjs +41 -0
- package/dist/splash-screen-CquyPP1C.cjs.map +1 -0
- package/dist/splash-screen-CvucPkpD.js +83 -0
- package/dist/splash-screen-CvucPkpD.js.map +1 -0
- package/dist/splash-screen.cjs +1 -0
- package/dist/splash-screen.js +1 -0
- package/dist/src-Bemk2C2P.cjs +269 -0
- package/dist/{src-BtQVyqMy.cjs.map → src-Bemk2C2P.cjs.map} +1 -1
- package/dist/{src-BLngW2bl.js → src-f5a3W9Mj.js} +98 -91
- package/dist/{src-BLngW2bl.js.map → src-f5a3W9Mj.js.map} +1 -1
- package/dist/steps.cjs +10 -10
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +10 -9
- package/dist/steps.js.map +1 -1
- package/dist/{store-DYqDLAvT.js.map → store-Bmj6rvZY.js.map} +1 -1
- package/dist/{store-CorvD3bT.cjs.map → store-CO4nJyGj.cjs.map} +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/surface-CDufon40.cjs +7 -0
- package/dist/{surface-BjKZoJxK.cjs.map → surface-CDufon40.cjs.map} +1 -1
- package/dist/surface-CkEYJCae.js +22 -0
- package/dist/{surface-pK8hME5c.js.map → surface-CkEYJCae.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-C5sDI1-_.cjs → surface.mixin-CSKqQH-0.cjs} +2 -2
- package/dist/{surface.mixin-C5sDI1-_.cjs.map → surface.mixin-CSKqQH-0.cjs.map} +1 -1
- package/dist/{surface.mixin-CBNRpJum.js → surface.mixin-DqMwoddO.js} +1 -1
- package/dist/{surface.mixin-CBNRpJum.js.map → surface.mixin-DqMwoddO.js.map} +1 -1
- package/dist/switch.cjs +69 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +132 -0
- package/dist/switch.js.map +1 -0
- package/dist/{table-CiqgZzSd.cjs → table-DWc1mkpj.cjs} +3 -3
- package/dist/{table-CiqgZzSd.cjs.map → table-DWc1mkpj.cjs.map} +1 -1
- package/dist/{table-BXIHX9h4.js → table-P6VGG7NK.js} +4 -4
- package/dist/{table-BXIHX9h4.js.map → table-P6VGG7NK.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-nbV5eblZ.js → tabs-CjGjGrqY.js} +13 -12
- package/dist/{tabs-nbV5eblZ.js.map → tabs-CjGjGrqY.js.map} +1 -1
- package/dist/{tabs-CKa-W4qA.cjs → tabs-DGJEKuhC.cjs} +4 -4
- package/dist/{tabs-CKa-W4qA.cjs.map → tabs-DGJEKuhC.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-BF1Huas7.cjs → tailwind.mixin-Cpa-VnnX.cjs} +2 -2
- package/dist/tailwind.mixin-Cpa-VnnX.cjs.map +1 -0
- package/dist/{tailwind.mixin-BCJOOX1_.js → tailwind.mixin-DufHBjmb.js} +57 -63
- package/dist/tailwind.mixin-DufHBjmb.js.map +1 -0
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-D7q8exMg.js → textarea-DZT_Ofp5.js} +42 -28
- package/dist/textarea-DZT_Ofp5.js.map +1 -0
- package/dist/textarea-jmTOXrzl.cjs +39 -0
- package/dist/textarea-jmTOXrzl.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/theme-CCKqaksQ.cjs +181 -0
- package/dist/{theme-Da4SPq9X.cjs.map → theme-CCKqaksQ.cjs.map} +1 -1
- package/dist/{theme-_VPV6Bxh.js → theme-CEc32pAv.js} +13 -12
- package/dist/{theme-_VPV6Bxh.js.map → theme-CEc32pAv.js.map} +1 -1
- package/dist/theme-button-BsJcv-Zv.cjs +8 -0
- package/dist/{theme-button-Ci8VQ7KW.cjs.map → theme-button-BsJcv-Zv.cjs.map} +1 -1
- package/dist/{theme-button--sX8A-m1.js → theme-button-dOiAvdKU.js} +4 -3
- package/dist/{theme-button--sX8A-m1.js.map → theme-button-dOiAvdKU.js.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.events-Cv7N4Toe.js.map → theme.events-Bw3mYjUA.js.map} +1 -1
- package/dist/{theme.events-DM4H5F2d.cjs.map → theme.events-EznKK2Y0.cjs.map} +1 -1
- package/dist/{theme.interface-Da23QAYb.cjs.map → theme.interface-CM26m9te.cjs.map} +1 -1
- package/dist/{theme.interface-CXloMUCw.js.map → theme.interface-FAUIgbIq.js.map} +1 -1
- package/dist/theme.js +5 -5
- package/dist/{theme.service-C_tjlqgy.cjs → theme.service-ETiKUwVy.cjs} +1 -1
- package/dist/{theme.service-C_tjlqgy.cjs.map → theme.service-ETiKUwVy.cjs.map} +1 -1
- package/dist/{theme.service-D9lEas89.js → theme.service-_qP5WvB9.js} +2 -2
- package/dist/{theme.service-D9lEas89.js.map → theme.service-_qP5WvB9.js.map} +1 -1
- package/dist/tooltip.cjs +1 -6
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js +51 -135
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +14 -5
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +28 -6
- package/dist/tree.js.map +1 -1
- package/dist/tslib.es6-Bd-92OW3.cjs +1 -0
- package/dist/{tslib.es6-D7BIeDVB.cjs.map → tslib.es6-Bd-92OW3.cjs.map} +1 -1
- package/dist/tslib.es6-CI1onEZb.js +7 -0
- package/dist/{tslib.es6-ErZEp3OO.js.map → tslib.es6-CI1onEZb.js.map} +1 -1
- package/dist/typewriter-ByIL2Mh-.cjs +123 -0
- package/dist/{typewriter-B2TnHPjw.cjs.map → typewriter-ByIL2Mh-.cjs.map} +1 -1
- package/dist/{typewriter-BrZNa8T-.js → typewriter-vOQ3bDLb.js} +8 -7
- package/dist/{typewriter-BrZNa8T-.js.map → typewriter-vOQ3bDLb.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +4 -4
- package/dist/typography.cjs.map +1 -1
- package/dist/typography.js +10 -9
- package/dist/typography.js.map +1 -1
- package/dist/{utils-CoU7M2YS.js → utils-Cq0m3LYo.js} +3 -3
- package/dist/{utils-CoU7M2YS.js.map → utils-Cq0m3LYo.js.map} +1 -1
- package/dist/{utils-BcaKtQuA.cjs → utils-D2kE-6zc.cjs} +1 -1
- package/dist/{utils-BcaKtQuA.cjs.map → utils-D2kE-6zc.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +5 -5
- package/dist/visually-hidden.cjs +13 -0
- package/dist/visually-hidden.cjs.map +1 -0
- package/dist/visually-hidden.js +24 -0
- package/dist/visually-hidden.js.map +1 -0
- package/dist/{window-Uii13x_r.cjs → window-BS7ZQjgH.cjs} +2 -2
- package/dist/window-BS7ZQjgH.cjs.map +1 -0
- package/dist/{window-CM1ycigo.js → window-WnAihpsA.js} +7 -7
- package/dist/window-WnAihpsA.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/mixins/formField.mixin.ts +96 -69
- package/mixins/tailwind.css +11 -0
- package/package.json +17 -26
- package/skills/schmancy/INDEX.md +7 -6
- package/skills/schmancy/breadcrumb.md +53 -0
- package/skills/schmancy/kbd.md +40 -0
- package/skills/schmancy/skeleton.md +40 -0
- package/skills/schmancy/splash-screen.md +60 -0
- package/skills/schmancy/switch.md +58 -0
- package/skills/schmancy/tooltip.md +1 -1
- package/skills/schmancy/visually-hidden.md +41 -0
- package/src/audio/emotional-sounds.ts +2 -4
- package/src/autocomplete/autocomplete.ts +52 -2
- package/src/breadcrumb/breadcrumb.ts +109 -0
- package/src/breadcrumb/index.ts +1 -0
- package/src/button/button.ts +40 -0
- package/src/button/icon-button.ts +2 -1
- package/src/checkbox/checkbox.test.ts +113 -0
- package/src/checkbox/checkbox.ts +41 -1
- package/src/chips/filter-chip.ts +15 -0
- package/src/chips/input-chip.ts +7 -0
- package/src/date-range/date-range-helpers.ts +0 -71
- package/src/dialog/dialog-base.mixin.ts +11 -0
- package/src/dialog/dialog.component.ts +28 -8
- package/src/dropdown/dropdown-content.ts +3 -1
- package/src/form/form.test.ts +137 -0
- package/src/form/form.ts +142 -158
- package/src/form/index.ts +2 -2
- package/src/icons/icon.ts +1 -0
- package/src/index.ts +6 -0
- package/src/kbd/index.ts +1 -0
- package/src/kbd/kbd.ts +59 -0
- package/src/skeleton/index.ts +1 -0
- package/src/skeleton/skeleton.ts +78 -0
- package/src/splash-screen/index.ts +1 -0
- package/src/splash-screen/splash-screen.ts +154 -0
- package/src/switch/index.ts +1 -0
- package/src/switch/switch.test.ts +93 -0
- package/src/switch/switch.ts +180 -0
- package/src/test-utils/a11y.ts +35 -0
- package/src/textarea/textarea.ts +32 -2
- package/src/tooltip/index.ts +1 -2
- package/src/tree/tree.ts +27 -2
- package/src/visually-hidden/index.ts +1 -0
- package/src/visually-hidden/visually-hidden.ts +39 -0
- package/src/window/window-position.ts +1 -74
- package/types/mixins/formField.mixin.d.ts +15 -8
- package/types/src/audio/emotional-sounds.d.ts +0 -2
- package/types/src/autocomplete/autocomplete.d.ts +7 -0
- package/types/src/breadcrumb/breadcrumb.d.ts +38 -0
- package/types/src/breadcrumb/index.d.ts +1 -0
- package/types/src/button/button.d.ts +7 -0
- package/types/src/button/icon-button.d.ts +2 -1
- package/types/src/checkbox/checkbox.d.ts +6 -0
- package/types/src/checkbox/checkbox.test.d.ts +1 -0
- package/types/src/chips/filter-chip.d.ts +3 -0
- package/types/src/chips/input-chip.d.ts +1 -0
- package/types/src/date-range/date-range-helpers.d.ts +0 -12
- package/types/src/dialog/dialog.component.d.ts +6 -0
- package/types/src/dropdown/dropdown-content.d.ts +3 -1
- package/types/src/form/form-v2.d.ts +12 -63
- package/types/src/form/form.d.ts +58 -40
- package/types/src/form/form.test.d.ts +4 -0
- package/types/src/form/index.d.ts +1 -1
- package/types/src/icons/icon.d.ts +1 -0
- package/types/src/index.d.ts +6 -0
- package/types/src/kbd/index.d.ts +1 -0
- package/types/src/kbd/kbd.d.ts +25 -0
- package/types/src/skeleton/index.d.ts +1 -0
- package/types/src/skeleton/skeleton.d.ts +27 -0
- package/types/src/splash-screen/index.d.ts +1 -0
- package/types/src/splash-screen/splash-screen.d.ts +60 -0
- package/types/src/switch/index.d.ts +1 -0
- package/types/src/switch/switch.d.ts +54 -0
- package/types/src/switch/switch.test.d.ts +1 -0
- package/types/src/test-utils/a11y.d.ts +11 -0
- package/types/src/textarea/textarea.d.ts +5 -1
- package/types/src/tooltip/index.d.ts +0 -1
- package/types/src/tree/tree.d.ts +5 -0
- package/types/src/visually-hidden/index.d.ts +1 -0
- package/types/src/visually-hidden/visually-hidden.d.ts +21 -0
- package/types/src/window/window-position.d.ts +1 -35
- package/dist/audio-DtYYgzYD.cjs.map +0 -1
- package/dist/audio-kz8UgPTO.js.map +0 -1
- package/dist/autocomplete-5rVhbieU.cjs +0 -111
- package/dist/autocomplete-5rVhbieU.cjs.map +0 -1
- package/dist/autocomplete-BllPQwr8.js.map +0 -1
- package/dist/chips-B19XS8Xc.cjs.map +0 -1
- package/dist/chips-B9oAEfE_.js.map +0 -1
- package/dist/components-CyD6a7gQ.cjs +0 -73
- package/dist/date-range-Sfyco9-n.js.map +0 -1
- package/dist/date-range-ZAaQB22I.cjs.map +0 -1
- package/dist/date-range-inline-m7nLjOMI.cjs +0 -43
- package/dist/delay-7boauN6N.cjs +0 -9
- package/dist/float-D5rNC82i.cjs +0 -1
- package/dist/form-BqN1AGFj.cjs +0 -1
- package/dist/form-BqN1AGFj.cjs.map +0 -1
- package/dist/form-CajC5HnO.js +0 -270
- package/dist/form-CajC5HnO.js.map +0 -1
- package/dist/icons-B57_93VV.cjs.map +0 -1
- package/dist/icons-BDqiGXrO.js.map +0 -1
- package/dist/input-chip-Dy-AiP55.cjs.map +0 -1
- package/dist/input-chip-QejNcRnS.js.map +0 -1
- package/dist/layout-DNYG3phx.cjs +0 -17
- package/dist/notification-CZFEhWxc.cjs +0 -23
- package/dist/radio-group-Cspwd-Vw.cjs +0 -40
- package/dist/src-BtQVyqMy.cjs +0 -269
- package/dist/surface-BjKZoJxK.cjs +0 -7
- package/dist/surface-pK8hME5c.js +0 -21
- package/dist/tailwind.mixin-BCJOOX1_.js.map +0 -1
- package/dist/tailwind.mixin-BF1Huas7.cjs.map +0 -1
- package/dist/textarea-Cp1ZE60O.cjs +0 -35
- package/dist/textarea-Cp1ZE60O.cjs.map +0 -1
- package/dist/textarea-D7q8exMg.js.map +0 -1
- package/dist/theme-Da4SPq9X.cjs +0 -181
- package/dist/theme-button-Ci8VQ7KW.cjs +0 -8
- package/dist/typewriter-B2TnHPjw.cjs +0 -123
- package/dist/window-CM1ycigo.js.map +0 -1
- package/dist/window-Uii13x_r.cjs.map +0 -1
- package/src/form/form-v2.ts +0 -268
- package/src/layout/v2/grid.ts +0 -93
- package/src/notification/outlet.ts +0 -16
- package/src/store/immer-integration.ts +0 -99
- package/src/tooltip/tooltip.ts +0 -216
- /package/dist/{animation-CO_Csq84.cjs → animation-Bcwh107v.cjs} +0 -0
- /package/dist/{animation-BK-8BwY8.js → animation-CXKSuUoE.js} +0 -0
- /package/dist/{tslib.es6-ErZEp3OO.js → decorate-D_utPUsC.js} +0 -0
- /package/dist/{tslib.es6-D7BIeDVB.cjs → decorate-F9CuyeHg.cjs} +0 -0
- /package/dist/{flow-CUj0fDT_.js → flow-CqgDEIqK.js} +0 -0
- /package/dist/{flow-Bbwn6dRN.cjs → flow-DSu4PLt1.cjs} +0 -0
- /package/dist/{hashContent-DaeGmY-p.cjs → hashContent-kKvXKFa9.cjs} +0 -0
- /package/dist/{hashContent-DYM21p6t.js → hashContent-nD2uWwi2.js} +0 -0
- /package/dist/{intersection-CZpaIHeT.cjs → intersection-D1v1UCVv.cjs} +0 -0
- /package/dist/{intersection-BPLpqYEd.js → intersection-LfEsy29T.js} +0 -0
- /package/dist/{overlay-stack-DQey9Qph.cjs → overlay-stack-CEYGD9T1.cjs} +0 -0
- /package/dist/{overlay-stack-DT1SdaGW.js → overlay-stack-Ca4EK2Mu.js} +0 -0
- /package/dist/{reduced-motion-D-L12p7G.js → reduced-motion-B83yZbcO.js} +0 -0
- /package/dist/{reduced-motion-Ds05GPyz.cjs → reduced-motion-DR32yKEO.cjs} +0 -0
- /package/dist/{rxjs-utils-BSjmI9-Q.js → rxjs-utils-Bldch1RO.js} +0 -0
- /package/dist/{rxjs-utils-DCsfzeap.cjs → rxjs-utils-hAgKC7vk.cjs} +0 -0
- /package/dist/{search-C4dFHYbX.js → search-BlGJ6uJv.js} +0 -0
- /package/dist/{search-Ds8tt7Et.cjs → search-C8eAOzBm.cjs} +0 -0
- /package/dist/{store-DYqDLAvT.js → store-Bmj6rvZY.js} +0 -0
- /package/dist/{store-CorvD3bT.cjs → store-CO4nJyGj.cjs} +0 -0
- /package/dist/{theme.events-Cv7N4Toe.js → theme.events-Bw3mYjUA.js} +0 -0
- /package/dist/{theme.events-DM4H5F2d.cjs → theme.events-EznKK2Y0.cjs} +0 -0
- /package/dist/{theme.interface-Da23QAYb.cjs → theme.interface-CM26m9te.cjs} +0 -0
- /package/dist/{theme.interface-CXloMUCw.js → theme.interface-FAUIgbIq.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-DZFPRPqs.js","names":[],"sources":["../src/card/actions.ts","../src/card/card.ts","../src/card/content.ts","../src/card/media.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-action\n * @slot - The content of the action\n */\n@customElement('schmancy-card-action')\nexport default class SchmancyCardAction extends TailwindElement(css`\n\t:host {\n\t\tdisplay: flex;\n\t\tgap: 0.5rem;\n\t\tpadding: 0.5rem 1rem;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-action': SchmancyCardAction\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('schmancy-card')\nexport default class SchmancyCard extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-medium);\n\t\ttransition:\n\t\t\tbox-shadow var(--schmancy-sys-motion-duration-short4) var(--schmancy-sys-motion-easing-standard),\n\t\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\toutline: none;\n\t}\n\n\t/* Type variants */\n\t:host([type='elevated']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-low);\n\t\tbox-shadow: var(--schmancy-sys-elevation-1);\n\t}\n\t:host([type='filled']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-highest);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\t:host([type='outlined']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-default);\n\t\tborder: 1px solid var(--schmancy-sys-color-outlineVariant);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\n\t/* Interactive states */\n\t:host([interactive]) {\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t:host([interactive]:focus-visible:not([disabled])) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 2px;\n\t}\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: var(--schmancy-sys-state-disabled-opacity);\n\t}\n\n\t/* Hover elevations — luminous glow + lift */\n\t:host([type='elevated'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-2),\n\t\t\t0 4px 24px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 12%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\t:host([type='filled'][interactive]:hover:not([disabled])),\n\t:host([type='outlined'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-1),\n\t\t\t0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransform: translateY(-1px);\n\t}\n\n\t/* Active state — kinetic compress */\n\t:host([interactive]:active:not([disabled])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\n\t/* Dragged state */\n\t:host([dragged]) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-3),\n\t\t\t0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\ttransform: translateY(-4px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host([interactive]:hover:not([disabled])),\n\t\t:host([interactive]:active:not([disabled])),\n\t\t:host([dragged]) {\n\t\t\ttransform: none;\n\t\t}\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t/**\n\t * The visual style of the card.\n\t * @default 'elevated'\n\t */\n\t@property({ reflect: true })\n\ttype: 'elevated' | 'filled' | 'outlined' = 'elevated'\n\n\t/**\n\t * Makes the card interactive (clickable).\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tinteractive = false\n\n\t/**\n\t * Disables the card.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Indicates the card is being dragged.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdragged = false\n\n\t/**\n\t * URL to navigate to when card is clicked (makes it act like a link).\n\t */\n\t@property()\n\thref?: string\n\n\t/**\n\t * Target for the link navigation.\n\t */\n\t@property()\n\ttarget?: string\n\n\t/**\n\t * ARIA role for accessibility.\n\t */\n\t@property({ attribute: 'role' })\n\toverride role = 'article'\n\n\t/**\n\t * ARIA label for accessibility.\n\t */\n\t@property({ attribute: 'aria-label' })\n\toverride ariaLabel: string = ''\n\n\t// Internal state for interaction feedback\n\t@state() pressed = false\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis._updateAriaAttributes()\n\t}\n\n\tupdated(changedProperties: Map<string, any>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('interactive') || changedProperties.has('disabled')) {\n\t\t\tthis._updateAriaAttributes()\n\t\t}\n\t}\n\n\t// Consolidate ARIA attribute updates\n\tprivate _updateAriaAttributes() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\tif (isInteractive) {\n\t\t\tthis.setAttribute('tabindex', '0')\n\t\t\tif (!this.role || this.role === 'article') {\n\t\t\t\tthis.role = this.href ? 'link' : 'button'\n\t\t\t}\n\t\t} else {\n\t\t\tthis.removeAttribute('tabindex')\n\t\t\tif (this.role === 'button' || this.role === 'link') {\n\t\t\t\tthis.role = 'article'\n\t\t\t}\n\t\t}\n\t}\n\n\t// Shared ripple creation logic\n\tprivate _addRipple(x: number, y: number) {\n\t\tconst id = this.nextRippleId++\n\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t// Remove ripple after animation completes\n\t\tsetTimeout(() => {\n\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t}, 600) // M3 medium duration\n\t}\n\n\t// Shared navigation logic\n\tprivate _navigate() {\n\t\tif (!this.href) return\n\n\t\tif (this.target === '_blank') {\n\t\t\twindow.open(this.href, '_blank')\n\t\t} else {\n\t\t\twindow.location.href = this.href\n\t\t}\n\t}\n\n\t// Combined action trigger (ripple + navigate + event)\n\tprivate _triggerAction(x: number, y: number) {\n\t\tthis._addRipple(x, y)\n\t\tthis._navigate()\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-click', {\n\t\t\t\tdetail: { value: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tconst rect = this.getBoundingClientRect()\n\t\tthis._triggerAction(e.clientX - rect.left, e.clientY - rect.top)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis._setPressed(true)\n\n\t\t\t// Simulate click at center\n\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\tthis._triggerAction(rect.width / 2, rect.height / 2)\n\t\t}\n\t}\n\n\tprivate handleKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tthis._setPressed(false)\n\t\t}\n\t}\n\n\t// Consolidate pressed state management\n\tprivate _setPressed(pressed: boolean) {\n\t\tthis.pressed = pressed\n\t\tif (pressed) {\n\t\t\tthis.setAttribute('pressed', '')\n\t\t} else {\n\t\t\tthis.removeAttribute('pressed')\n\t\t}\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tif (this.disabled || !this.interactive) return\n\t\tthis._setPressed(true)\n\t}\n\n\tprivate handleMouseUp = () => this._setPressed(false)\n\tprivate handleMouseLeave = () => this._setPressed(false)\n\n\tprotected render() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${isInteractive ? cursorGlow({ radius: 200, intensity: 0.1 }) : ''}\n\t\t\t\tclass=\"relative w-full h-full rounded-xl ${isInteractive ? 'cursor-pointer' : ''}\"\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@keyup=${this.handleKeyUp}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\taria-disabled=${this.disabled ? 'true' : 'false'}\n\t\t\t>\n\t\t\t\t<!-- State layer -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute inset-0 rounded-xl pointer-events-none transition-opacity duration-200 bg-surface-on ${!isInteractive\n\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t: this.pressed\n\t\t\t\t\t\t\t? 'opacity-[var(--schmancy-sys-state-pressed-opacity)]'\n\t\t\t\t\t\t\t: 'opacity-0 hover:opacity-[var(--schmancy-sys-state-hover-opacity)] focus-visible:opacity-[var(--schmancy-sys-state-focus-opacity)]'}\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Ripples -->\n\t\t\t\t${this.interactive && this.ripples.length\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"absolute inset-0 rounded-xl overflow-hidden pointer-events-none\">\n\t\t\t\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\t\t\t\tr => html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"left: ${r.x}px; top: ${r.y}px\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\n\t\t\t\t<!-- Content -->\n\t\t\t\t<div class=\"relative h-full w-full rounded-xl\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card': SchmancyCard\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-content\n */\n@customElement('schmancy-card-content')\nexport default class SchmancyCardContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-content': SchmancyCardContent\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-media\n */\n@customElement('schmancy-card-media')\nexport default class SchmancyCardMedia extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\theight: 200px;\n\t\toverflow: hidden;\n\t}\n\t\n\t/* Allow height to be overridden when used in flex/grid layouts */\n\t:host-context(.h-full) {\n\t\theight: 100%;\n\t}\n\t\n\t::slotted(img),\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-position: center;\n\t}\n\t\n\t/* Object fit styles based on fit attribute */\n\t:host([fit=\"contain\"]) img,\n\t:host([fit=\"contain\"]) ::slotted(img) {\n\t\tobject-fit: contain;\n\t}\n\t\n\t:host([fit=\"cover\"]) img,\n\t:host([fit=\"cover\"]) ::slotted(img) {\n\t\tobject-fit: cover;\n\t}\n\t\n\t:host([fit=\"fill\"]) img,\n\t:host([fit=\"fill\"]) ::slotted(img) {\n\t\tobject-fit: fill;\n\t}\n\t\n\t:host([fit=\"none\"]) img,\n\t:host([fit=\"none\"]) ::slotted(img) {\n\t\tobject-fit: none;\n\t}\n\t\n\t:host([fit=\"scale-down\"]) img,\n\t:host([fit=\"scale-down\"]) ::slotted(img) {\n\t\tobject-fit: scale-down;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tsrc: string = ''\n\n\t@property({ type: String, reflect: true })\n\tfit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' = 'contain'\n\t\n\t@property({ type: String })\n\talt: string = ''\n\n\tprotected render(): unknown {\n\t\t// If src is provided, render an img element\n\t\t// Otherwise, allow users to slot their own content\n\t\treturn this.src \n\t\t\t? html`<img src=\"${this.src}\" alt=\"${this.alt}\" />` \n\t\t\t: html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-media': SchmancyCardMedia\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"card-BADJHUMA.js","names":[],"sources":["../src/card/actions.ts","../src/card/card.ts","../src/card/content.ts","../src/card/media.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-action\n * @slot - The content of the action\n */\n@customElement('schmancy-card-action')\nexport default class SchmancyCardAction extends TailwindElement(css`\n\t:host {\n\t\tdisplay: flex;\n\t\tgap: 0.5rem;\n\t\tpadding: 0.5rem 1rem;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-action': SchmancyCardAction\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('schmancy-card')\nexport default class SchmancyCard extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-medium);\n\t\ttransition:\n\t\t\tbox-shadow var(--schmancy-sys-motion-duration-short4) var(--schmancy-sys-motion-easing-standard),\n\t\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\toutline: none;\n\t}\n\n\t/* Type variants */\n\t:host([type='elevated']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-low);\n\t\tbox-shadow: var(--schmancy-sys-elevation-1);\n\t}\n\t:host([type='filled']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-highest);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\t:host([type='outlined']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-default);\n\t\tborder: 1px solid var(--schmancy-sys-color-outlineVariant);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\n\t/* Interactive states */\n\t:host([interactive]) {\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t:host([interactive]:focus-visible:not([disabled])) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 2px;\n\t}\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: var(--schmancy-sys-state-disabled-opacity);\n\t}\n\n\t/* Hover elevations — luminous glow + lift */\n\t:host([type='elevated'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-2),\n\t\t\t0 4px 24px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 12%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\t:host([type='filled'][interactive]:hover:not([disabled])),\n\t:host([type='outlined'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-1),\n\t\t\t0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransform: translateY(-1px);\n\t}\n\n\t/* Active state — kinetic compress */\n\t:host([interactive]:active:not([disabled])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\n\t/* Dragged state */\n\t:host([dragged]) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-3),\n\t\t\t0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\ttransform: translateY(-4px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host([interactive]:hover:not([disabled])),\n\t\t:host([interactive]:active:not([disabled])),\n\t\t:host([dragged]) {\n\t\t\ttransform: none;\n\t\t}\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t/**\n\t * The visual style of the card.\n\t * @default 'elevated'\n\t */\n\t@property({ reflect: true })\n\ttype: 'elevated' | 'filled' | 'outlined' = 'elevated'\n\n\t/**\n\t * Makes the card interactive (clickable).\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tinteractive = false\n\n\t/**\n\t * Disables the card.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Indicates the card is being dragged.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdragged = false\n\n\t/**\n\t * URL to navigate to when card is clicked (makes it act like a link).\n\t */\n\t@property()\n\thref?: string\n\n\t/**\n\t * Target for the link navigation.\n\t */\n\t@property()\n\ttarget?: string\n\n\t/**\n\t * ARIA role for accessibility.\n\t */\n\t@property({ attribute: 'role' })\n\toverride role = 'article'\n\n\t/**\n\t * ARIA label for accessibility.\n\t */\n\t@property({ attribute: 'aria-label' })\n\toverride ariaLabel: string = ''\n\n\t// Internal state for interaction feedback\n\t@state() pressed = false\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis._updateAriaAttributes()\n\t}\n\n\tupdated(changedProperties: Map<string, any>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('interactive') || changedProperties.has('disabled')) {\n\t\t\tthis._updateAriaAttributes()\n\t\t}\n\t}\n\n\t// Consolidate ARIA attribute updates\n\tprivate _updateAriaAttributes() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\tif (isInteractive) {\n\t\t\tthis.setAttribute('tabindex', '0')\n\t\t\tif (!this.role || this.role === 'article') {\n\t\t\t\tthis.role = this.href ? 'link' : 'button'\n\t\t\t}\n\t\t} else {\n\t\t\tthis.removeAttribute('tabindex')\n\t\t\tif (this.role === 'button' || this.role === 'link') {\n\t\t\t\tthis.role = 'article'\n\t\t\t}\n\t\t}\n\t}\n\n\t// Shared ripple creation logic\n\tprivate _addRipple(x: number, y: number) {\n\t\tconst id = this.nextRippleId++\n\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t// Remove ripple after animation completes\n\t\tsetTimeout(() => {\n\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t}, 600) // M3 medium duration\n\t}\n\n\t// Shared navigation logic\n\tprivate _navigate() {\n\t\tif (!this.href) return\n\n\t\tif (this.target === '_blank') {\n\t\t\twindow.open(this.href, '_blank')\n\t\t} else {\n\t\t\twindow.location.href = this.href\n\t\t}\n\t}\n\n\t// Combined action trigger (ripple + navigate + event)\n\tprivate _triggerAction(x: number, y: number) {\n\t\tthis._addRipple(x, y)\n\t\tthis._navigate()\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-click', {\n\t\t\t\tdetail: { value: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tconst rect = this.getBoundingClientRect()\n\t\tthis._triggerAction(e.clientX - rect.left, e.clientY - rect.top)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis._setPressed(true)\n\n\t\t\t// Simulate click at center\n\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\tthis._triggerAction(rect.width / 2, rect.height / 2)\n\t\t}\n\t}\n\n\tprivate handleKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tthis._setPressed(false)\n\t\t}\n\t}\n\n\t// Consolidate pressed state management\n\tprivate _setPressed(pressed: boolean) {\n\t\tthis.pressed = pressed\n\t\tif (pressed) {\n\t\t\tthis.setAttribute('pressed', '')\n\t\t} else {\n\t\t\tthis.removeAttribute('pressed')\n\t\t}\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tif (this.disabled || !this.interactive) return\n\t\tthis._setPressed(true)\n\t}\n\n\tprivate handleMouseUp = () => this._setPressed(false)\n\tprivate handleMouseLeave = () => this._setPressed(false)\n\n\tprotected render() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${isInteractive ? cursorGlow({ radius: 200, intensity: 0.1 }) : ''}\n\t\t\t\tclass=\"relative w-full h-full rounded-xl ${isInteractive ? 'cursor-pointer' : ''}\"\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@keyup=${this.handleKeyUp}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\taria-disabled=${this.disabled ? 'true' : 'false'}\n\t\t\t>\n\t\t\t\t<!-- State layer -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute inset-0 rounded-xl pointer-events-none transition-opacity duration-200 bg-surface-on ${!isInteractive\n\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t: this.pressed\n\t\t\t\t\t\t\t? 'opacity-[var(--schmancy-sys-state-pressed-opacity)]'\n\t\t\t\t\t\t\t: 'opacity-0 hover:opacity-[var(--schmancy-sys-state-hover-opacity)] focus-visible:opacity-[var(--schmancy-sys-state-focus-opacity)]'}\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Ripples -->\n\t\t\t\t${this.interactive && this.ripples.length\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"absolute inset-0 rounded-xl overflow-hidden pointer-events-none\">\n\t\t\t\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\t\t\t\tr => html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"left: ${r.x}px; top: ${r.y}px\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\n\t\t\t\t<!-- Content -->\n\t\t\t\t<div class=\"relative h-full w-full rounded-xl\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card': SchmancyCard\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-content\n */\n@customElement('schmancy-card-content')\nexport default class SchmancyCardContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-content': SchmancyCardContent\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-media\n */\n@customElement('schmancy-card-media')\nexport default class SchmancyCardMedia extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\theight: 200px;\n\t\toverflow: hidden;\n\t}\n\t\n\t/* Allow height to be overridden when used in flex/grid layouts */\n\t:host-context(.h-full) {\n\t\theight: 100%;\n\t}\n\t\n\t::slotted(img),\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-position: center;\n\t}\n\t\n\t/* Object fit styles based on fit attribute */\n\t:host([fit=\"contain\"]) img,\n\t:host([fit=\"contain\"]) ::slotted(img) {\n\t\tobject-fit: contain;\n\t}\n\t\n\t:host([fit=\"cover\"]) img,\n\t:host([fit=\"cover\"]) ::slotted(img) {\n\t\tobject-fit: cover;\n\t}\n\t\n\t:host([fit=\"fill\"]) img,\n\t:host([fit=\"fill\"]) ::slotted(img) {\n\t\tobject-fit: fill;\n\t}\n\t\n\t:host([fit=\"none\"]) img,\n\t:host([fit=\"none\"]) ::slotted(img) {\n\t\tobject-fit: none;\n\t}\n\t\n\t:host([fit=\"scale-down\"]) img,\n\t:host([fit=\"scale-down\"]) ::slotted(img) {\n\t\tobject-fit: scale-down;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tsrc: string = ''\n\n\t@property({ type: String, reflect: true })\n\tfit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' = 'contain'\n\t\n\t@property({ type: String })\n\talt: string = ''\n\n\tprotected render(): unknown {\n\t\t// If src is provided, render an img element\n\t\t// Otherwise, allow users to slot their own content\n\t\treturn this.src \n\t\t\t? html`<img src=\"${this.src}\" alt=\"${this.alt}\" />` \n\t\t\t: html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-media': SchmancyCardMedia\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-
|
|
1
|
+
require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-Cpa-VnnX.cjs`),t=require(`./decorate-F9CuyeHg.cjs`);require(`./mixins.cjs`);const n=require(`./cursor-glow-82y5h3E4.cjs`);let r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`);var o=class extends e.t(i.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: flex;
|
|
4
4
|
gap: 0.5rem;
|
|
@@ -6,7 +6,7 @@ require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`)
|
|
|
6
6
|
align-items: center;
|
|
7
7
|
justify-content: flex-end;
|
|
8
8
|
}
|
|
9
|
-
`){render(){return
|
|
9
|
+
`){render(){return i.html`<slot></slot>`}};o=t.t([(0,r.customElement)(`schmancy-card-action`)],o);var s=class extends e.t(i.css`
|
|
10
10
|
:host {
|
|
11
11
|
display: block;
|
|
12
12
|
position: relative;
|
|
@@ -89,9 +89,9 @@ require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`)
|
|
|
89
89
|
opacity: 0;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
`){constructor(...e){super(...e),this.type=`elevated`,this.interactive=!1,this.disabled=!1,this.dragged=!1,this.role=`article`,this.ariaLabel=``,this.pressed=!1,this.ripples=[],this.nextRippleId=0,this.handleClick=e=>{if(this.disabled||!this.interactive)return;let t=this.getBoundingClientRect();this._triggerAction(e.clientX-t.left,e.clientY-t.top)},this.handleKeyDown=e=>{if(!this.disabled&&this.interactive&&(e.key===`Enter`||e.key===` `)){e.preventDefault(),this._setPressed(!0);let t=this.getBoundingClientRect();this._triggerAction(t.width/2,t.height/2)}},this.handleKeyUp=e=>{e.key!==`Enter`&&e.key!==` `||this._setPressed(!1)},this.handleMouseDown=()=>{!this.disabled&&this.interactive&&this._setPressed(!0)},this.handleMouseUp=()=>this._setPressed(!1),this.handleMouseLeave=()=>this._setPressed(!1)}static{this.shadowRootOptions={...
|
|
92
|
+
`){constructor(...e){super(...e),this.type=`elevated`,this.interactive=!1,this.disabled=!1,this.dragged=!1,this.role=`article`,this.ariaLabel=``,this.pressed=!1,this.ripples=[],this.nextRippleId=0,this.handleClick=e=>{if(this.disabled||!this.interactive)return;let t=this.getBoundingClientRect();this._triggerAction(e.clientX-t.left,e.clientY-t.top)},this.handleKeyDown=e=>{if(!this.disabled&&this.interactive&&(e.key===`Enter`||e.key===` `)){e.preventDefault(),this._setPressed(!0);let t=this.getBoundingClientRect();this._triggerAction(t.width/2,t.height/2)}},this.handleKeyUp=e=>{e.key!==`Enter`&&e.key!==` `||this._setPressed(!1)},this.handleMouseDown=()=>{!this.disabled&&this.interactive&&this._setPressed(!0)},this.handleMouseUp=()=>this._setPressed(!1),this.handleMouseLeave=()=>this._setPressed(!1)}static{this.shadowRootOptions={...i.LitElement.shadowRootOptions,mode:`open`,delegatesFocus:!0}}connectedCallback(){super.connectedCallback(),this._updateAriaAttributes()}updated(e){super.updated(e),(e.has(`interactive`)||e.has(`disabled`))&&this._updateAriaAttributes()}_updateAriaAttributes(){this.interactive&&!this.disabled?(this.setAttribute(`tabindex`,`0`),this.role&&this.role!==`article`||(this.role=this.href?`link`:`button`)):(this.removeAttribute(`tabindex`),this.role!==`button`&&this.role!==`link`||(this.role=`article`))}_addRipple(e,t){let n=this.nextRippleId++;this.ripples=[...this.ripples,{x:e,y:t,id:n}],setTimeout(()=>{this.ripples=this.ripples.filter(e=>e.id!==n)},600)}_navigate(){this.href&&(this.target===`_blank`?window.open(this.href,`_blank`):window.location.href=this.href)}_triggerAction(e,t){this._addRipple(e,t),this._navigate(),this.dispatchEvent(new CustomEvent(`schmancy-click`,{detail:{value:this.type},bubbles:!0,composed:!0}))}_setPressed(e){this.pressed=e,e?this.setAttribute(`pressed`,``):this.removeAttribute(`pressed`)}render(){let e=this.interactive&&!this.disabled;return i.html`
|
|
93
93
|
<div
|
|
94
|
-
${e?
|
|
94
|
+
${e?n.t({radius:200,intensity:.1}):``}
|
|
95
95
|
class="relative w-full h-full rounded-xl ${e?`cursor-pointer`:``}"
|
|
96
96
|
@click=${this.handleClick}
|
|
97
97
|
@keydown=${this.handleKeyDown}
|
|
@@ -99,7 +99,7 @@ require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`)
|
|
|
99
99
|
@mousedown=${this.handleMouseDown}
|
|
100
100
|
@mouseup=${this.handleMouseUp}
|
|
101
101
|
@mouseleave=${this.handleMouseLeave}
|
|
102
|
-
aria-label=${(0,
|
|
102
|
+
aria-label=${(0,a.ifDefined)(this.ariaLabel)}
|
|
103
103
|
aria-disabled=${this.disabled?`true`:`false`}
|
|
104
104
|
>
|
|
105
105
|
<!-- State layer -->
|
|
@@ -108,9 +108,9 @@ require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`)
|
|
|
108
108
|
></div>
|
|
109
109
|
|
|
110
110
|
<!-- Ripples -->
|
|
111
|
-
${this.interactive&&this.ripples.length?
|
|
111
|
+
${this.interactive&&this.ripples.length?i.html`
|
|
112
112
|
<div class="absolute inset-0 rounded-xl overflow-hidden pointer-events-none">
|
|
113
|
-
${this.ripples.map(e=>
|
|
113
|
+
${this.ripples.map(e=>i.html`
|
|
114
114
|
<span
|
|
115
115
|
class="absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5"
|
|
116
116
|
style="left: ${e.x}px; top: ${e.y}px"
|
|
@@ -124,12 +124,12 @@ require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`)
|
|
|
124
124
|
<slot></slot>
|
|
125
125
|
</div>
|
|
126
126
|
</div>
|
|
127
|
-
`}};
|
|
127
|
+
`}};t.t([(0,r.property)({reflect:!0})],s.prototype,`type`,void 0),t.t([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`interactive`,void 0),t.t([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`disabled`,void 0),t.t([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`dragged`,void 0),t.t([(0,r.property)()],s.prototype,`href`,void 0),t.t([(0,r.property)()],s.prototype,`target`,void 0),t.t([(0,r.property)({attribute:`role`})],s.prototype,`role`,void 0),t.t([(0,r.property)({attribute:`aria-label`})],s.prototype,`ariaLabel`,void 0),t.t([(0,r.state)()],s.prototype,`pressed`,void 0),t.t([(0,r.state)()],s.prototype,`ripples`,void 0),s=t.t([(0,r.customElement)(`schmancy-card`)],s);var c=class extends e.t(i.css`
|
|
128
128
|
:host {
|
|
129
129
|
display: block;
|
|
130
130
|
padding: 1rem;
|
|
131
131
|
}
|
|
132
|
-
`){render(){return
|
|
132
|
+
`){render(){return i.html`<slot></slot>`}};c=t.t([(0,r.customElement)(`schmancy-card-content`)],c);var l=class extends e.t(i.css`
|
|
133
133
|
:host {
|
|
134
134
|
display: block;
|
|
135
135
|
position: relative;
|
|
@@ -174,4 +174,4 @@ require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`)
|
|
|
174
174
|
:host([fit="scale-down"]) ::slotted(img) {
|
|
175
175
|
object-fit: scale-down;
|
|
176
176
|
}
|
|
177
|
-
`){constructor(...e){super(...e),this.src=``,this.fit=`contain`,this.alt=``}render(){return this.src?
|
|
177
|
+
`){constructor(...e){super(...e),this.src=``,this.fit=`contain`,this.alt=``}render(){return this.src?i.html`<img src="${this.src}" alt="${this.alt}" />`:i.html`<slot></slot>`}};t.t([(0,r.property)({type:String,reflect:!0})],l.prototype,`src`,void 0),t.t([(0,r.property)({type:String,reflect:!0})],l.prototype,`fit`,void 0),t.t([(0,r.property)({type:String})],l.prototype,`alt`,void 0),l=t.t([(0,r.customElement)(`schmancy-card-media`)],l);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-BvPWVEJX.cjs","names":[],"sources":["../src/card/actions.ts","../src/card/card.ts","../src/card/content.ts","../src/card/media.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-action\n * @slot - The content of the action\n */\n@customElement('schmancy-card-action')\nexport default class SchmancyCardAction extends TailwindElement(css`\n\t:host {\n\t\tdisplay: flex;\n\t\tgap: 0.5rem;\n\t\tpadding: 0.5rem 1rem;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-action': SchmancyCardAction\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('schmancy-card')\nexport default class SchmancyCard extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-medium);\n\t\ttransition:\n\t\t\tbox-shadow var(--schmancy-sys-motion-duration-short4) var(--schmancy-sys-motion-easing-standard),\n\t\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\toutline: none;\n\t}\n\n\t/* Type variants */\n\t:host([type='elevated']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-low);\n\t\tbox-shadow: var(--schmancy-sys-elevation-1);\n\t}\n\t:host([type='filled']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-highest);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\t:host([type='outlined']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-default);\n\t\tborder: 1px solid var(--schmancy-sys-color-outlineVariant);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\n\t/* Interactive states */\n\t:host([interactive]) {\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t:host([interactive]:focus-visible:not([disabled])) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 2px;\n\t}\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: var(--schmancy-sys-state-disabled-opacity);\n\t}\n\n\t/* Hover elevations — luminous glow + lift */\n\t:host([type='elevated'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-2),\n\t\t\t0 4px 24px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 12%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\t:host([type='filled'][interactive]:hover:not([disabled])),\n\t:host([type='outlined'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-1),\n\t\t\t0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransform: translateY(-1px);\n\t}\n\n\t/* Active state — kinetic compress */\n\t:host([interactive]:active:not([disabled])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\n\t/* Dragged state */\n\t:host([dragged]) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-3),\n\t\t\t0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\ttransform: translateY(-4px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host([interactive]:hover:not([disabled])),\n\t\t:host([interactive]:active:not([disabled])),\n\t\t:host([dragged]) {\n\t\t\ttransform: none;\n\t\t}\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t/**\n\t * The visual style of the card.\n\t * @default 'elevated'\n\t */\n\t@property({ reflect: true })\n\ttype: 'elevated' | 'filled' | 'outlined' = 'elevated'\n\n\t/**\n\t * Makes the card interactive (clickable).\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tinteractive = false\n\n\t/**\n\t * Disables the card.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Indicates the card is being dragged.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdragged = false\n\n\t/**\n\t * URL to navigate to when card is clicked (makes it act like a link).\n\t */\n\t@property()\n\thref?: string\n\n\t/**\n\t * Target for the link navigation.\n\t */\n\t@property()\n\ttarget?: string\n\n\t/**\n\t * ARIA role for accessibility.\n\t */\n\t@property({ attribute: 'role' })\n\toverride role = 'article'\n\n\t/**\n\t * ARIA label for accessibility.\n\t */\n\t@property({ attribute: 'aria-label' })\n\toverride ariaLabel: string = ''\n\n\t// Internal state for interaction feedback\n\t@state() pressed = false\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis._updateAriaAttributes()\n\t}\n\n\tupdated(changedProperties: Map<string, any>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('interactive') || changedProperties.has('disabled')) {\n\t\t\tthis._updateAriaAttributes()\n\t\t}\n\t}\n\n\t// Consolidate ARIA attribute updates\n\tprivate _updateAriaAttributes() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\tif (isInteractive) {\n\t\t\tthis.setAttribute('tabindex', '0')\n\t\t\tif (!this.role || this.role === 'article') {\n\t\t\t\tthis.role = this.href ? 'link' : 'button'\n\t\t\t}\n\t\t} else {\n\t\t\tthis.removeAttribute('tabindex')\n\t\t\tif (this.role === 'button' || this.role === 'link') {\n\t\t\t\tthis.role = 'article'\n\t\t\t}\n\t\t}\n\t}\n\n\t// Shared ripple creation logic\n\tprivate _addRipple(x: number, y: number) {\n\t\tconst id = this.nextRippleId++\n\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t// Remove ripple after animation completes\n\t\tsetTimeout(() => {\n\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t}, 600) // M3 medium duration\n\t}\n\n\t// Shared navigation logic\n\tprivate _navigate() {\n\t\tif (!this.href) return\n\n\t\tif (this.target === '_blank') {\n\t\t\twindow.open(this.href, '_blank')\n\t\t} else {\n\t\t\twindow.location.href = this.href\n\t\t}\n\t}\n\n\t// Combined action trigger (ripple + navigate + event)\n\tprivate _triggerAction(x: number, y: number) {\n\t\tthis._addRipple(x, y)\n\t\tthis._navigate()\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-click', {\n\t\t\t\tdetail: { value: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tconst rect = this.getBoundingClientRect()\n\t\tthis._triggerAction(e.clientX - rect.left, e.clientY - rect.top)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis._setPressed(true)\n\n\t\t\t// Simulate click at center\n\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\tthis._triggerAction(rect.width / 2, rect.height / 2)\n\t\t}\n\t}\n\n\tprivate handleKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tthis._setPressed(false)\n\t\t}\n\t}\n\n\t// Consolidate pressed state management\n\tprivate _setPressed(pressed: boolean) {\n\t\tthis.pressed = pressed\n\t\tif (pressed) {\n\t\t\tthis.setAttribute('pressed', '')\n\t\t} else {\n\t\t\tthis.removeAttribute('pressed')\n\t\t}\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tif (this.disabled || !this.interactive) return\n\t\tthis._setPressed(true)\n\t}\n\n\tprivate handleMouseUp = () => this._setPressed(false)\n\tprivate handleMouseLeave = () => this._setPressed(false)\n\n\tprotected render() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${isInteractive ? cursorGlow({ radius: 200, intensity: 0.1 }) : ''}\n\t\t\t\tclass=\"relative w-full h-full rounded-xl ${isInteractive ? 'cursor-pointer' : ''}\"\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@keyup=${this.handleKeyUp}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\taria-disabled=${this.disabled ? 'true' : 'false'}\n\t\t\t>\n\t\t\t\t<!-- State layer -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute inset-0 rounded-xl pointer-events-none transition-opacity duration-200 bg-surface-on ${!isInteractive\n\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t: this.pressed\n\t\t\t\t\t\t\t? 'opacity-[var(--schmancy-sys-state-pressed-opacity)]'\n\t\t\t\t\t\t\t: 'opacity-0 hover:opacity-[var(--schmancy-sys-state-hover-opacity)] focus-visible:opacity-[var(--schmancy-sys-state-focus-opacity)]'}\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Ripples -->\n\t\t\t\t${this.interactive && this.ripples.length\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"absolute inset-0 rounded-xl overflow-hidden pointer-events-none\">\n\t\t\t\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\t\t\t\tr => html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"left: ${r.x}px; top: ${r.y}px\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\n\t\t\t\t<!-- Content -->\n\t\t\t\t<div class=\"relative h-full w-full rounded-xl\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card': SchmancyCard\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-content\n */\n@customElement('schmancy-card-content')\nexport default class SchmancyCardContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-content': SchmancyCardContent\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-media\n */\n@customElement('schmancy-card-media')\nexport default class SchmancyCardMedia extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\theight: 200px;\n\t\toverflow: hidden;\n\t}\n\t\n\t/* Allow height to be overridden when used in flex/grid layouts */\n\t:host-context(.h-full) {\n\t\theight: 100%;\n\t}\n\t\n\t::slotted(img),\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-position: center;\n\t}\n\t\n\t/* Object fit styles based on fit attribute */\n\t:host([fit=\"contain\"]) img,\n\t:host([fit=\"contain\"]) ::slotted(img) {\n\t\tobject-fit: contain;\n\t}\n\t\n\t:host([fit=\"cover\"]) img,\n\t:host([fit=\"cover\"]) ::slotted(img) {\n\t\tobject-fit: cover;\n\t}\n\t\n\t:host([fit=\"fill\"]) img,\n\t:host([fit=\"fill\"]) ::slotted(img) {\n\t\tobject-fit: fill;\n\t}\n\t\n\t:host([fit=\"none\"]) img,\n\t:host([fit=\"none\"]) ::slotted(img) {\n\t\tobject-fit: none;\n\t}\n\t\n\t:host([fit=\"scale-down\"]) img,\n\t:host([fit=\"scale-down\"]) ::slotted(img) {\n\t\tobject-fit: scale-down;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tsrc: string = ''\n\n\t@property({ type: String, reflect: true })\n\tfit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' = 'contain'\n\t\n\t@property({ type: String })\n\talt: string = ''\n\n\tprotected render(): unknown {\n\t\t// If src is provided, render an img element\n\t\t// Otherwise, allow users to slot their own content\n\t\treturn this.src \n\t\t\t? html`<img src=\"${this.src}\" alt=\"${this.alt}\" />` \n\t\t\t: html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-media': SchmancyCardMedia\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"card-C_E944_Z.cjs","names":[],"sources":["../src/card/actions.ts","../src/card/card.ts","../src/card/content.ts","../src/card/media.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-action\n * @slot - The content of the action\n */\n@customElement('schmancy-card-action')\nexport default class SchmancyCardAction extends TailwindElement(css`\n\t:host {\n\t\tdisplay: flex;\n\t\tgap: 0.5rem;\n\t\tpadding: 0.5rem 1rem;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-action': SchmancyCardAction\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('schmancy-card')\nexport default class SchmancyCard extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-medium);\n\t\ttransition:\n\t\t\tbox-shadow var(--schmancy-sys-motion-duration-short4) var(--schmancy-sys-motion-easing-standard),\n\t\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\toutline: none;\n\t}\n\n\t/* Type variants */\n\t:host([type='elevated']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-low);\n\t\tbox-shadow: var(--schmancy-sys-elevation-1);\n\t}\n\t:host([type='filled']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-highest);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\t:host([type='outlined']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-default);\n\t\tborder: 1px solid var(--schmancy-sys-color-outlineVariant);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\n\t/* Interactive states */\n\t:host([interactive]) {\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t:host([interactive]:focus-visible:not([disabled])) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 2px;\n\t}\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: var(--schmancy-sys-state-disabled-opacity);\n\t}\n\n\t/* Hover elevations — luminous glow + lift */\n\t:host([type='elevated'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-2),\n\t\t\t0 4px 24px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 12%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\t:host([type='filled'][interactive]:hover:not([disabled])),\n\t:host([type='outlined'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-1),\n\t\t\t0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransform: translateY(-1px);\n\t}\n\n\t/* Active state — kinetic compress */\n\t:host([interactive]:active:not([disabled])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\n\t/* Dragged state */\n\t:host([dragged]) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-3),\n\t\t\t0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\ttransform: translateY(-4px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host([interactive]:hover:not([disabled])),\n\t\t:host([interactive]:active:not([disabled])),\n\t\t:host([dragged]) {\n\t\t\ttransform: none;\n\t\t}\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t/**\n\t * The visual style of the card.\n\t * @default 'elevated'\n\t */\n\t@property({ reflect: true })\n\ttype: 'elevated' | 'filled' | 'outlined' = 'elevated'\n\n\t/**\n\t * Makes the card interactive (clickable).\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tinteractive = false\n\n\t/**\n\t * Disables the card.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Indicates the card is being dragged.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdragged = false\n\n\t/**\n\t * URL to navigate to when card is clicked (makes it act like a link).\n\t */\n\t@property()\n\thref?: string\n\n\t/**\n\t * Target for the link navigation.\n\t */\n\t@property()\n\ttarget?: string\n\n\t/**\n\t * ARIA role for accessibility.\n\t */\n\t@property({ attribute: 'role' })\n\toverride role = 'article'\n\n\t/**\n\t * ARIA label for accessibility.\n\t */\n\t@property({ attribute: 'aria-label' })\n\toverride ariaLabel: string = ''\n\n\t// Internal state for interaction feedback\n\t@state() pressed = false\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis._updateAriaAttributes()\n\t}\n\n\tupdated(changedProperties: Map<string, any>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('interactive') || changedProperties.has('disabled')) {\n\t\t\tthis._updateAriaAttributes()\n\t\t}\n\t}\n\n\t// Consolidate ARIA attribute updates\n\tprivate _updateAriaAttributes() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\tif (isInteractive) {\n\t\t\tthis.setAttribute('tabindex', '0')\n\t\t\tif (!this.role || this.role === 'article') {\n\t\t\t\tthis.role = this.href ? 'link' : 'button'\n\t\t\t}\n\t\t} else {\n\t\t\tthis.removeAttribute('tabindex')\n\t\t\tif (this.role === 'button' || this.role === 'link') {\n\t\t\t\tthis.role = 'article'\n\t\t\t}\n\t\t}\n\t}\n\n\t// Shared ripple creation logic\n\tprivate _addRipple(x: number, y: number) {\n\t\tconst id = this.nextRippleId++\n\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t// Remove ripple after animation completes\n\t\tsetTimeout(() => {\n\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t}, 600) // M3 medium duration\n\t}\n\n\t// Shared navigation logic\n\tprivate _navigate() {\n\t\tif (!this.href) return\n\n\t\tif (this.target === '_blank') {\n\t\t\twindow.open(this.href, '_blank')\n\t\t} else {\n\t\t\twindow.location.href = this.href\n\t\t}\n\t}\n\n\t// Combined action trigger (ripple + navigate + event)\n\tprivate _triggerAction(x: number, y: number) {\n\t\tthis._addRipple(x, y)\n\t\tthis._navigate()\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-click', {\n\t\t\t\tdetail: { value: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tconst rect = this.getBoundingClientRect()\n\t\tthis._triggerAction(e.clientX - rect.left, e.clientY - rect.top)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis._setPressed(true)\n\n\t\t\t// Simulate click at center\n\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\tthis._triggerAction(rect.width / 2, rect.height / 2)\n\t\t}\n\t}\n\n\tprivate handleKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tthis._setPressed(false)\n\t\t}\n\t}\n\n\t// Consolidate pressed state management\n\tprivate _setPressed(pressed: boolean) {\n\t\tthis.pressed = pressed\n\t\tif (pressed) {\n\t\t\tthis.setAttribute('pressed', '')\n\t\t} else {\n\t\t\tthis.removeAttribute('pressed')\n\t\t}\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tif (this.disabled || !this.interactive) return\n\t\tthis._setPressed(true)\n\t}\n\n\tprivate handleMouseUp = () => this._setPressed(false)\n\tprivate handleMouseLeave = () => this._setPressed(false)\n\n\tprotected render() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${isInteractive ? cursorGlow({ radius: 200, intensity: 0.1 }) : ''}\n\t\t\t\tclass=\"relative w-full h-full rounded-xl ${isInteractive ? 'cursor-pointer' : ''}\"\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@keyup=${this.handleKeyUp}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\taria-disabled=${this.disabled ? 'true' : 'false'}\n\t\t\t>\n\t\t\t\t<!-- State layer -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute inset-0 rounded-xl pointer-events-none transition-opacity duration-200 bg-surface-on ${!isInteractive\n\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t: this.pressed\n\t\t\t\t\t\t\t? 'opacity-[var(--schmancy-sys-state-pressed-opacity)]'\n\t\t\t\t\t\t\t: 'opacity-0 hover:opacity-[var(--schmancy-sys-state-hover-opacity)] focus-visible:opacity-[var(--schmancy-sys-state-focus-opacity)]'}\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Ripples -->\n\t\t\t\t${this.interactive && this.ripples.length\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"absolute inset-0 rounded-xl overflow-hidden pointer-events-none\">\n\t\t\t\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\t\t\t\tr => html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"left: ${r.x}px; top: ${r.y}px\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\n\t\t\t\t<!-- Content -->\n\t\t\t\t<div class=\"relative h-full w-full rounded-xl\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card': SchmancyCard\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-content\n */\n@customElement('schmancy-card-content')\nexport default class SchmancyCardContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t}\n`) {\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-content': SchmancyCardContent\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-media\n */\n@customElement('schmancy-card-media')\nexport default class SchmancyCardMedia extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\theight: 200px;\n\t\toverflow: hidden;\n\t}\n\t\n\t/* Allow height to be overridden when used in flex/grid layouts */\n\t:host-context(.h-full) {\n\t\theight: 100%;\n\t}\n\t\n\t::slotted(img),\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-position: center;\n\t}\n\t\n\t/* Object fit styles based on fit attribute */\n\t:host([fit=\"contain\"]) img,\n\t:host([fit=\"contain\"]) ::slotted(img) {\n\t\tobject-fit: contain;\n\t}\n\t\n\t:host([fit=\"cover\"]) img,\n\t:host([fit=\"cover\"]) ::slotted(img) {\n\t\tobject-fit: cover;\n\t}\n\t\n\t:host([fit=\"fill\"]) img,\n\t:host([fit=\"fill\"]) ::slotted(img) {\n\t\tobject-fit: fill;\n\t}\n\t\n\t:host([fit=\"none\"]) img,\n\t:host([fit=\"none\"]) ::slotted(img) {\n\t\tobject-fit: none;\n\t}\n\t\n\t:host([fit=\"scale-down\"]) img,\n\t:host([fit=\"scale-down\"]) ::slotted(img) {\n\t\tobject-fit: scale-down;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tsrc: string = ''\n\n\t@property({ type: String, reflect: true })\n\tfit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' = 'contain'\n\t\n\t@property({ type: String })\n\talt: string = ''\n\n\tprotected render(): unknown {\n\t\t// If src is provided, render an img element\n\t\t// Otherwise, allow users to slot their own content\n\t\treturn this.src \n\t\t\t? html`<img src=\"${this.src}\" alt=\"${this.alt}\" />` \n\t\t\t: html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-media': SchmancyCardMedia\n\t}\n}\n"],"mappings":"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"}
|
package/dist/card.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./card-
|
|
1
|
+
require(`./card-C_E944_Z.cjs`);
|
package/dist/card.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./card-
|
|
1
|
+
import "./card-BADJHUMA.js";
|
package/dist/charts.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-BCfY8kxB.cjs`);const e=require(`./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-BCfY8kxB.cjs`);const e=require(`./decorate-F9CuyeHg.cjs`),t=require(`./litElement.mixin-Bj2q1yPw.cjs`);require(`./mixins.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`),i=require(`lit/directives/ref.js`),a=require(`lit/directives/repeat.js`);function o(e,t,n,r,i){let a=i*i,o=a*i;return{x:.5*(2*t.x+(-e.x+n.x)*i+(2*e.x-5*t.x+4*n.x-r.x)*a+(-e.x+3*t.x-3*n.x+r.x)*o),y:.5*(2*t.y+(-e.y+n.y)*i+(2*e.y-5*t.y+4*n.y-r.y)*a+(-e.y+3*t.y-3*n.y+r.y)*o)}}function s(e,t){if(e.startsWith(`rgb`)){let n=e.match(/[\d.]+/g);if(n&&n.length>=3)return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t})`}let n=e.replace(`#`,``);return n.length===3&&(n=n.split(``).map(e=>e+e).join(``)),`rgba(${parseInt(n.substring(0,2),16)}, ${parseInt(n.substring(2,4),16)}, ${parseInt(n.substring(4,6),16)}, ${t})`}function c(e){return 1-(1-e)**3}var l=class extends t.t(r.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
}
|
|
@@ -40,7 +40,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
40
40
|
`:``}
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
43
|
-
`:r.html``}};e.
|
|
43
|
+
`:r.html``}};e.t([(0,n.property)({type:Array})],l.prototype,`data`,void 0),e.t([(0,n.property)({type:Number})],l.prototype,`height`,void 0),e.t([(0,n.property)({type:Boolean})],l.prototype,`showGrid`,void 0),e.t([(0,n.property)({type:Boolean})],l.prototype,`showLabels`,void 0),e.t([(0,n.property)({type:Boolean})],l.prototype,`showTooltip`,void 0),e.t([(0,n.property)({type:Number})],l.prototype,`peakCount`,void 0),e.t([(0,n.property)({type:Number})],l.prototype,`animationDuration`,void 0),e.t([(0,n.property)({type:Boolean})],l.prototype,`animated`,void 0),e.t([(0,n.property)({type:String})],l.prototype,`valuePrefix`,void 0),e.t([(0,n.property)({type:String})],l.prototype,`valueSuffix`,void 0),e.t([(0,n.property)({type:Number})],l.prototype,`valueDecimals`,void 0),e.t([(0,n.property)({type:Object})],l.prototype,`theme`,void 0),e.t([(0,n.state)()],l.prototype,`tooltipData`,void 0),e.t([(0,n.state)()],l.prototype,`animationProgress`,void 0),e.t([(0,n.state)()],l.prototype,`isVisible`,void 0),l=e.t([(0,n.customElement)(`schmancy-area-chart`)],l);var u=[`bg-primary`,`bg-secondary`,`bg-tertiary`,`bg-success`,`bg-warning`,`bg-error`,`bg-primary/70`,`bg-secondary/70`,`bg-tertiary/70`,`bg-success/70`,`bg-warning/70`,`bg-error/70`,`bg-primary/40`,`bg-secondary/40`,`bg-tertiary/40`],d=class extends t.t(r.css`
|
|
44
44
|
:host {
|
|
45
45
|
display: block;
|
|
46
46
|
}
|
|
@@ -109,4 +109,4 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
109
109
|
|
|
110
110
|
<!-- Legend -->
|
|
111
111
|
${this.renderLegend()}
|
|
112
|
-
`}};e.
|
|
112
|
+
`}};e.t([(0,n.property)({type:Array})],d.prototype,`data`,void 0),e.t([(0,n.property)({type:String})],d.prototype,`valuePrefix`,void 0),e.t([(0,n.property)({type:String})],d.prototype,`valueSuffix`,void 0),e.t([(0,n.property)({type:Number})],d.prototype,`valueDecimals`,void 0),e.t([(0,n.property)({type:Boolean})],d.prototype,`showMedals`,void 0),e.t([(0,n.property)({type:Boolean})],d.prototype,`showLegend`,void 0),e.t([(0,n.property)({type:Number})],d.prototype,`animationDuration`,void 0),e.t([(0,n.property)({type:Boolean})],d.prototype,`animated`,void 0),e.t([(0,n.property)({type:String})],d.prototype,`labelWidth`,void 0),e.t([(0,n.property)({type:String})],d.prototype,`valueWidth`,void 0),e.t([(0,n.state)()],d.prototype,`animationProgress`,void 0),e.t([(0,n.state)()],d.prototype,`isVisible`,void 0),e.t([(0,n.state)()],d.prototype,`categoryColorMap`,void 0),d=e.t([(0,n.customElement)(`schmancy-pills`)],d),Object.defineProperty(exports,`SchmancyAreaChart`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`SchmancyPills`,{enumerable:!0,get:function(){return d}}),exports.catmullRomSpline=o,exports.easeOutCubic=c,exports.hexToRgba=s;
|
package/dist/charts.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.cjs","names":[],"sources":["../src/charts/utils.ts","../src/charts/area-chart.ts","../src/charts/pills.ts"],"sourcesContent":["/**\n * Catmull-Rom spline interpolation for smooth curves\n * Returns the interpolated point between p1 and p2\n */\nexport function catmullRomSpline(\n\tp0: { x: number; y: number },\n\tp1: { x: number; y: number },\n\tp2: { x: number; y: number },\n\tp3: { x: number; y: number },\n\tt: number\n): { x: number; y: number } {\n\tconst t2 = t * t\n\tconst t3 = t2 * t\n\n\tconst x =\n\t\t0.5 *\n\t\t(2 * p1.x +\n\t\t\t(-p0.x + p2.x) * t +\n\t\t\t(2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 +\n\t\t\t(-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3)\n\n\tconst y =\n\t\t0.5 *\n\t\t(2 * p1.y +\n\t\t\t(-p0.y + p2.y) * t +\n\t\t\t(2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 +\n\t\t\t(-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3)\n\n\treturn { x, y }\n}\n\n/**\n * Converts hex or rgb color to rgba string\n */\nexport function hexToRgba(color: string, alpha: number): string {\n\t// Handle rgb/rgba format\n\tif (color.startsWith('rgb')) {\n\t\tconst match = color.match(/[\\d.]+/g)\n\t\tif (match && match.length >= 3) {\n\t\t\treturn `rgba(${match[0]}, ${match[1]}, ${match[2]}, ${alpha})`\n\t\t}\n\t}\n\n\t// Handle hex format\n\tlet hex = color.replace('#', '')\n\tif (hex.length === 3) {\n\t\thex = hex\n\t\t\t.split('')\n\t\t\t.map(c => c + c)\n\t\t\t.join('')\n\t}\n\n\tconst r = parseInt(hex.substring(0, 2), 16)\n\tconst g = parseInt(hex.substring(2, 4), 16)\n\tconst b = parseInt(hex.substring(4, 6), 16)\n\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\n/**\n * Cubic ease-out animation function\n */\nexport function easeOutCubic(t: number): number {\n\treturn 1 - Math.pow(1 - t, 3)\n}\n","import { html, css, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ref, createRef, Ref } from 'lit/directives/ref.js'\nimport { $LitElement } from '@mixins/index'\nimport type { ChartDataPoint, ChartTheme, ProcessedDataPoint } from './types'\nimport { catmullRomSpline, hexToRgba, easeOutCubic } from './utils'\n\ninterface TooltipData {\n\tvisible: boolean\n\tx: number\n\ty: number\n\tlabel: string\n\tvalue: number\n\tmetadata?: Record<string, unknown>\n}\n\n@customElement('schmancy-area-chart')\nexport class SchmancyAreaChart extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`) {\n\t/** Chart data points */\n\t@property({ type: Array })\n\tdata: ChartDataPoint[] = []\n\n\t/** Chart height in pixels */\n\t@property({ type: Number })\n\theight = 200\n\n\t/** Show grid lines */\n\t@property({ type: Boolean })\n\tshowGrid = true\n\n\t/** Show x-axis labels */\n\t@property({ type: Boolean })\n\tshowLabels = true\n\n\t/** Enable tooltips */\n\t@property({ type: Boolean })\n\tshowTooltip = true\n\n\t/** Number of peaks to highlight */\n\t@property({ type: Number })\n\tpeakCount = 3\n\n\t/** Animation duration in milliseconds */\n\t@property({ type: Number })\n\tanimationDuration = 800\n\n\t/** Enable entrance animation */\n\t@property({ type: Boolean })\n\tanimated = true\n\n\t/** Prefix for values (e.g., \"EUR \") */\n\t@property({ type: String })\n\tvaluePrefix = ''\n\n\t/** Suffix for values (e.g., \"%\") */\n\t@property({ type: String })\n\tvalueSuffix = ''\n\n\t/** Decimal places for value display */\n\t@property({ type: Number })\n\tvalueDecimals = 2\n\n\t/** Theme overrides */\n\t@property({ type: Object })\n\ttheme: Partial<ChartTheme> = {}\n\n\t@state() private tooltipData: TooltipData = {\n\t\tvisible: false,\n\t\tx: 0,\n\t\ty: 0,\n\t\tlabel: '',\n\t\tvalue: 0,\n\t}\n\n\t@state() private animationProgress = 0\n\t@state() private isVisible = false\n\n\tprivate canvasRef: Ref<HTMLCanvasElement> = createRef()\n\tprivate containerRef: Ref<HTMLDivElement> = createRef()\n\tprivate animationFrameId: number | null = null\n\tprivate observer: IntersectionObserver | null = null\n\tprivate processedData: ProcessedDataPoint[] = []\n\tprivate resizeObserver: ResizeObserver | null = null\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupIntersectionObserver()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.cleanup()\n\t}\n\n\tprivate cleanup() {\n\t\tif (this.animationFrameId !== null) {\n\t\t\tcancelAnimationFrame(this.animationFrameId)\n\t\t\tthis.animationFrameId = null\n\t\t}\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect()\n\t\t\tthis.observer = null\n\t\t}\n\t\tif (this.resizeObserver) {\n\t\t\tthis.resizeObserver.disconnect()\n\t\t\tthis.resizeObserver = null\n\t\t}\n\t}\n\n\tprivate setupIntersectionObserver() {\n\t\tthis.observer = new IntersectionObserver(\n\t\t\tentries => {\n\t\t\t\tconst entry = entries[0]\n\t\t\t\tif (entry.isIntersecting && !this.isVisible) {\n\t\t\t\t\tthis.isVisible = true\n\t\t\t\t\tif (this.animated) {\n\t\t\t\t\t\tthis.startAnimation()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.animationProgress = 1\n\t\t\t\t\t\tthis.drawChart()\n\t\t\t\t\t}\n\t\t\t\t} else if (!entry.isIntersecting) {\n\t\t\t\t\tthis.isVisible = false\n\t\t\t\t\tif (this.animationFrameId !== null) {\n\t\t\t\t\t\tcancelAnimationFrame(this.animationFrameId)\n\t\t\t\t\t\tthis.animationFrameId = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ threshold: 0.1 }\n\t\t)\n\t}\n\n\tprotected updated(changedProperties: PropertyValues) {\n\t\tsuper.updated(changedProperties)\n\n\t\tif (this.containerRef.value && this.observer) {\n\t\t\tthis.observer.observe(this.containerRef.value)\n\t\t}\n\n\t\tif (this.canvasRef.value && !this.resizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\t\tthis.drawChart()\n\t\t\t})\n\t\t\tthis.resizeObserver.observe(this.canvasRef.value)\n\t\t}\n\n\t\t// Redraw when data changes\n\t\tif (changedProperties.has('data') && this.isVisible) {\n\t\t\tif (this.animated) {\n\t\t\t\tthis.animationProgress = 0\n\t\t\t\tthis.startAnimation()\n\t\t\t} else {\n\t\t\t\tthis.animationProgress = 1\n\t\t\t\tthis.drawChart()\n\t\t\t}\n\t\t}\n\n\t\t// Redraw on theme or config changes\n\t\tif (\n\t\t\t(changedProperties.has('theme') ||\n\t\t\t\tchangedProperties.has('showGrid') ||\n\t\t\t\tchangedProperties.has('showLabels') ||\n\t\t\t\tchangedProperties.has('peakCount')) &&\n\t\t\tthis.isVisible\n\t\t) {\n\t\t\tthis.drawChart()\n\t\t}\n\t}\n\n\tprivate startAnimation() {\n\t\tconst startTime = performance.now()\n\t\tconst duration = this.animationDuration\n\n\t\tconst animateFrame = (currentTime: number) => {\n\t\t\tconst elapsed = currentTime - startTime\n\t\t\tconst progress = Math.min(elapsed / duration, 1)\n\n\t\t\tthis.animationProgress = easeOutCubic(progress)\n\t\t\tthis.drawChart()\n\n\t\t\tif (progress < 1 && this.isVisible) {\n\t\t\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t\t\t}\n\t\t}\n\n\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t}\n\n\tprivate processData(): ProcessedDataPoint[] {\n\t\tif (!this.data || this.data.length === 0) return []\n\n\t\t// Find top N peak values\n\t\tconst sortedByValue = [...this.data].sort((a, b) => b.value - a.value)\n\t\tconst peakLabels = new Set(sortedByValue.slice(0, this.peakCount).map(d => d.label))\n\n\t\treturn this.data.map(d => ({\n\t\t\t...d,\n\t\t\tx: 0, // Will be calculated during draw\n\t\t\ty: 0, // Will be calculated during draw\n\t\t\tisPeak: peakLabels.has(d.label),\n\t\t}))\n\t}\n\n\tprivate getThemeValue<K extends keyof ChartTheme>(\n\t\tkey: K,\n\t\tdefaultValue: NonNullable<ChartTheme[K]>\n\t): NonNullable<ChartTheme[K]> {\n\t\treturn (this.theme[key] as NonNullable<ChartTheme[K]>) ?? defaultValue\n\t}\n\n\tprivate drawChart() {\n\t\tconst canvas = this.canvasRef.value\n\t\tif (!canvas) return\n\n\t\tconst ctx = canvas.getContext('2d')\n\t\tif (!ctx) return\n\n\t\tconst dpr = window.devicePixelRatio || 1\n\t\tconst rect = canvas.getBoundingClientRect()\n\t\tconst width = rect.width\n\t\tconst height = rect.height\n\n\t\t// Set canvas size for high DPI\n\t\tcanvas.width = width * dpr\n\t\tcanvas.height = height * dpr\n\t\tctx.scale(dpr, dpr)\n\n\t\t// Clear canvas\n\t\tctx.clearRect(0, 0, width, height)\n\n\t\tconst data = this.processData()\n\t\tif (data.length === 0) return\n\n\t\tconst padding = { top: 20, right: 20, bottom: this.showLabels ? 40 : 20, left: 20 }\n\t\tconst chartWidth = width - padding.left - padding.right\n\t\tconst chartHeight = height - padding.top - padding.bottom\n\n\t\t// Find max value for scaling\n\t\tconst maxValue = Math.max(...data.map(d => d.value), 1)\n\n\t\t// Calculate positions\n\t\tconst points = data.map((d, i) => ({\n\t\t\t...d,\n\t\t\tx: padding.left + (data.length > 1 ? (i / (data.length - 1)) * chartWidth : chartWidth / 2),\n\t\t\ty: padding.top + chartHeight - (d.value / maxValue) * chartHeight,\n\t\t}))\n\n\t\tthis.processedData = points\n\n\t\t// Get primary color from CSS or theme\n\t\tconst computedStyle = getComputedStyle(this)\n\t\tconst defaultPrimaryColor =\n\t\t\tcomputedStyle.getPropertyValue('--schmancy-sys-color-primary').trim() || '#6750A4'\n\t\tconst primaryColor = this.getThemeValue('primaryColor', defaultPrimaryColor)\n\t\tconst [gradientOpacityTop, gradientOpacityBottom] = this.getThemeValue('gradientOpacity', [0.4, 0.05])\n\t\tconst strokeWidth = this.getThemeValue('strokeWidth', 2)\n\t\tconst pointRadius = this.getThemeValue('pointRadius', 4)\n\t\tconst peakRadius = this.getThemeValue('peakRadius', 6)\n\n\t\t// Draw grid lines\n\t\tif (this.showGrid) {\n\t\t\tctx.strokeStyle = 'rgba(128, 128, 128, 0.15)'\n\t\t\tctx.lineWidth = 1\n\t\t\tctx.setLineDash([4, 4])\n\n\t\t\tfor (let i = 1; i <= 3; i++) {\n\t\t\t\tconst y = padding.top + (chartHeight * i) / 4\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.moveTo(padding.left, y)\n\t\t\t\tctx.lineTo(width - padding.right, y)\n\t\t\t\tctx.stroke()\n\t\t\t}\n\n\t\t\tctx.setLineDash([])\n\t\t}\n\n\t\t// Create smooth curve path using Catmull-Rom spline\n\t\tconst curvePath = new Path2D()\n\t\tconst areaPath = new Path2D()\n\n\t\tif (points.length >= 2) {\n\t\t\t// Start area path from bottom left\n\t\t\tareaPath.moveTo(points[0].x, padding.top + chartHeight)\n\t\t\tcurvePath.moveTo(points[0].x, points[0].y)\n\t\t\tareaPath.lineTo(points[0].x, points[0].y)\n\n\t\t\tfor (let i = 0; i < points.length - 1; i++) {\n\t\t\t\tconst p0 = points[Math.max(0, i - 1)]\n\t\t\t\tconst p1 = points[i]\n\t\t\t\tconst p2 = points[Math.min(points.length - 1, i + 1)]\n\t\t\t\tconst p3 = points[Math.min(points.length - 1, i + 2)]\n\n\t\t\t\t// Draw curve segments\n\t\t\t\tconst segments = 16\n\t\t\t\tfor (let j = 1; j <= segments; j++) {\n\t\t\t\t\tconst t = j / segments\n\t\t\t\t\tconst point = catmullRomSpline(p0, p1, p2, p3, t)\n\t\t\t\t\tcurvePath.lineTo(point.x, point.y)\n\t\t\t\t\tareaPath.lineTo(point.x, point.y)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Close area path\n\t\t\tareaPath.lineTo(points[points.length - 1].x, padding.top + chartHeight)\n\t\t\tareaPath.closePath()\n\t\t} else if (points.length === 1) {\n\t\t\t// Single point - draw a dot\n\t\t\tcurvePath.arc(points[0].x, points[0].y, pointRadius, 0, Math.PI * 2)\n\t\t}\n\n\t\t// Apply animation clipping\n\t\tctx.save()\n\t\tctx.beginPath()\n\t\tctx.rect(0, 0, padding.left + chartWidth * this.animationProgress, height)\n\t\tctx.clip()\n\n\t\t// Draw gradient fill\n\t\tif (points.length >= 2) {\n\t\t\tconst gradient = ctx.createLinearGradient(0, padding.top, 0, padding.top + chartHeight)\n\t\t\tgradient.addColorStop(0, hexToRgba(primaryColor, gradientOpacityTop))\n\t\t\tgradient.addColorStop(1, hexToRgba(primaryColor, gradientOpacityBottom))\n\n\t\t\tctx.fillStyle = gradient\n\t\t\tctx.fill(areaPath)\n\t\t}\n\n\t\t// Draw stroke\n\t\tctx.strokeStyle = primaryColor\n\t\tctx.lineWidth = strokeWidth\n\t\tctx.lineCap = 'round'\n\t\tctx.lineJoin = 'round'\n\t\tctx.stroke(curvePath)\n\n\t\t// Draw data points\n\t\tpoints.forEach((point, index) => {\n\t\t\tconst pointProgress = (index / (points.length - 1 || 1)) * this.animationProgress\n\t\t\tif (pointProgress < index / (points.length || 1)) return\n\n\t\t\tconst radius = point.isPeak ? peakRadius - 1 : pointRadius - 1\n\t\t\tconst outerRadius = point.isPeak ? peakRadius + 4 : pointRadius + 2\n\n\t\t\t// Outer glow for peaks\n\t\t\tif (point.isPeak) {\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.arc(point.x, point.y, outerRadius, 0, Math.PI * 2)\n\t\t\t\tctx.fillStyle = hexToRgba(primaryColor, 0.2)\n\t\t\t\tctx.fill()\n\t\t\t}\n\n\t\t\t// Inner dot\n\t\t\tctx.beginPath()\n\t\t\tctx.arc(point.x, point.y, radius, 0, Math.PI * 2)\n\t\t\tctx.fillStyle = primaryColor\n\t\t\tctx.fill()\n\n\t\t\t// White center for peaks\n\t\t\tif (point.isPeak) {\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.arc(point.x, point.y, 2, 0, Math.PI * 2)\n\t\t\t\tctx.fillStyle = 'white'\n\t\t\t\tctx.fill()\n\t\t\t}\n\t\t})\n\n\t\tctx.restore()\n\n\t\t// Draw labels\n\t\tif (this.showLabels && points.length > 0) {\n\t\t\tctx.fillStyle = 'rgba(128, 128, 128, 0.8)'\n\t\t\tctx.font = '11px system-ui, sans-serif'\n\t\t\tctx.textAlign = 'center'\n\t\t\tctx.textBaseline = 'top'\n\n\t\t\t// Show fewer labels on narrow charts\n\t\t\tconst labelStep = width < 400 ? 3 : width < 600 ? 2 : 1\n\t\t\tpoints.forEach((point, index) => {\n\t\t\t\tif (index % labelStep === 0) {\n\t\t\t\t\tctx.fillText(point.label, point.x, height - padding.bottom + 8)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate formatValue(value: number): string {\n\t\tconst formatted = value.toFixed(this.valueDecimals)\n\t\treturn `${this.valuePrefix}${formatted}${this.valueSuffix}`\n\t}\n\n\tprivate handlePointerMove = (e: PointerEvent) => {\n\t\tif (this.processedData.length === 0 || !this.showTooltip) return\n\n\t\tconst canvas = this.canvasRef.value\n\t\tif (!canvas) return\n\n\t\tconst rect = canvas.getBoundingClientRect()\n\t\tconst x = e.clientX - rect.left\n\n\t\t// Find closest data point\n\t\tlet closestPoint: ProcessedDataPoint | null = null\n\t\tlet minDistance = Infinity\n\n\t\tthis.processedData.forEach(point => {\n\t\t\tconst distance = Math.abs(point.x - x)\n\t\t\tif (distance < minDistance) {\n\t\t\t\tminDistance = distance\n\t\t\t\tclosestPoint = point\n\t\t\t}\n\t\t})\n\n\t\tif (closestPoint && minDistance < 30) {\n\t\t\tthis.tooltipData = {\n\t\t\t\tvisible: true,\n\t\t\t\tx: closestPoint.x,\n\t\t\t\ty: closestPoint.y,\n\t\t\t\tlabel: closestPoint.label,\n\t\t\t\tvalue: closestPoint.value,\n\t\t\t\tmetadata: closestPoint.metadata,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.tooltipData = { ...this.tooltipData, visible: false }\n\t\t}\n\t}\n\n\tprivate handlePointerLeave = () => {\n\t\tthis.tooltipData = { ...this.tooltipData, visible: false }\n\t}\n\n\tprivate renderMetadata() {\n\t\tif (!this.tooltipData.metadata) return ''\n\t\treturn Object.entries(this.tooltipData.metadata).map(\n\t\t\t([key, value]) => html`\n\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"text-surface-onVariant\">\n\t\t\t\t\t${key}: ${String(value)}\n\t\t\t\t</schmancy-typography>\n\t\t\t`\n\t\t)\n\t}\n\n\trender() {\n\t\tif (!this.data || this.data.length === 0) {\n\t\t\treturn html``\n\t\t}\n\n\t\treturn html`\n\t\t\t<div ${ref(this.containerRef)} class=\"relative\">\n\t\t\t\t<div class=\"relative\" style=\"height: ${this.height}px; touch-action: pan-y;\">\n\t\t\t\t\t<canvas\n\t\t\t\t\t\t${ref(this.canvasRef)}\n\t\t\t\t\t\tclass=\"w-full h-full\"\n\t\t\t\t\t\tstyle=\"display: block;\"\n\t\t\t\t\t\t@pointermove=${this.handlePointerMove}\n\t\t\t\t\t\t@pointerleave=${this.handlePointerLeave}\n\t\t\t\t\t></canvas>\n\n\t\t\t\t\t<!-- Tooltip -->\n\t\t\t\t\t${this.showTooltip\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"absolute pointer-events-none transition-opacity duration-150 ${this.tooltipData.visible\n\t\t\t\t\t\t\t\t\t\t? 'opacity-100'\n\t\t\t\t\t\t\t\t\t\t: 'opacity-0'}\"\n\t\t\t\t\t\t\t\t\tstyle=\"\n left: ${this.tooltipData.x}px;\n top: ${this.tooltipData.y - 60}px;\n transform: translateX(-50%);\n \"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-surface elevation=\"3\" rounded=\"all\" class=\"px-3 py-2 min-w-max\">\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"sm\" class=\"text-surface-onVariant\">\n\t\t\t\t\t\t\t\t\t\t\t${this.tooltipData.label}\n\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\" class=\"text-surface-on font-semibold\">\n\t\t\t\t\t\t\t\t\t\t\t${this.formatValue(this.tooltipData.value)}\n\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${this.renderMetadata()}\n\t\t\t\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t `\n\t\t\t\t\t\t: ''}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area-chart': SchmancyAreaChart\n\t}\n}\n","import { html, css, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { $LitElement } from '@mixins/index'\nimport type { PillDataPoint, PillSegment } from './types'\n\n/** Default color palette for segments - expanded for uniqueness */\nconst DEFAULT_COLORS = [\n\t'bg-primary',\n\t'bg-secondary',\n\t'bg-tertiary',\n\t'bg-success',\n\t'bg-warning',\n\t'bg-error',\n\t'bg-primary/70',\n\t'bg-secondary/70',\n\t'bg-tertiary/70',\n\t'bg-success/70',\n\t'bg-warning/70',\n\t'bg-error/70',\n\t'bg-primary/40',\n\t'bg-secondary/40',\n\t'bg-tertiary/40',\n]\n\n@customElement('schmancy-pills')\nexport class SchmancyPills extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`) {\n\t/** Chart data points */\n\t@property({ type: Array })\n\tdata: PillDataPoint[] = []\n\n\t/** Prefix for values (e.g., \"EUR \") */\n\t@property({ type: String })\n\tvaluePrefix = ''\n\n\t/** Suffix for values (e.g., \"%\") */\n\t@property({ type: String })\n\tvalueSuffix = ''\n\n\t/** Decimal places for value display */\n\t@property({ type: Number })\n\tvalueDecimals = 2\n\n\t/** Show medals for top 3 */\n\t@property({ type: Boolean })\n\tshowMedals = true\n\n\t/** Show legend for segments */\n\t@property({ type: Boolean })\n\tshowLegend = true\n\n\t/** Animation duration in milliseconds */\n\t@property({ type: Number })\n\tanimationDuration = 500\n\n\t/** Enable entrance animation */\n\t@property({ type: Boolean })\n\tanimated = true\n\n\t/** Label column width (Tailwind class) */\n\t@property({ type: String })\n\tlabelWidth = 'w-14'\n\n\t/** Value column width (Tailwind class) */\n\t@property({ type: String })\n\tvalueWidth = 'w-20'\n\n\t@state() private animationProgress = 0\n\t@state() private isVisible = false\n\t@state() private categoryColorMap = new Map<string, string>()\n\n\tprivate observer: IntersectionObserver | null = null\n\tprivate animationFrameId: number | null = null\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupIntersectionObserver()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.cleanup()\n\t}\n\n\tprivate cleanup() {\n\t\tif (this.animationFrameId !== null) {\n\t\t\tcancelAnimationFrame(this.animationFrameId)\n\t\t\tthis.animationFrameId = null\n\t\t}\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect()\n\t\t\tthis.observer = null\n\t\t}\n\t}\n\n\tprivate setupIntersectionObserver() {\n\t\tthis.observer = new IntersectionObserver(\n\t\t\tentries => {\n\t\t\t\tconst entry = entries[0]\n\t\t\t\tif (entry.isIntersecting && !this.isVisible) {\n\t\t\t\t\tthis.isVisible = true\n\t\t\t\t\tif (this.animated) {\n\t\t\t\t\t\tthis.startAnimation()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.animationProgress = 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ threshold: 0.1 }\n\t\t)\n\t}\n\n\tprotected firstUpdated() {\n\t\tif (this.observer) {\n\t\t\tthis.observer.observe(this)\n\t\t}\n\t}\n\n\tprotected updated(changedProperties: PropertyValues) {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Restart animation when data changes\n\t\tif (changedProperties.has('data') && this.isVisible && this.animated) {\n\t\t\tthis.animationProgress = 0\n\t\t\tthis.startAnimation()\n\t\t}\n\t}\n\n\tprivate startAnimation() {\n\t\tconst startTime = performance.now()\n\t\tconst duration = this.animationDuration\n\n\t\tconst animateFrame = (currentTime: number) => {\n\t\t\tconst elapsed = currentTime - startTime\n\t\t\tconst progress = Math.min(elapsed / duration, 1)\n\n\t\t\t// Ease out cubic\n\t\t\tthis.animationProgress = 1 - Math.pow(1 - progress, 3)\n\n\t\t\tif (progress < 1 && this.isVisible) {\n\t\t\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t\t\t}\n\t\t}\n\n\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t}\n\n\tprivate initializeCategoryColors(): void {\n\t\t// Build consistent color map from all segments in data\n\t\tconst categoryTotals = new Map<string, number>()\n\t\tconst explicitColors = new Map<string, string>()\n\n\t\tthis.data.forEach(d => {\n\t\t\tif (d.segments) {\n\t\t\t\td.segments.forEach(seg => {\n\t\t\t\t\tcategoryTotals.set(seg.label, (categoryTotals.get(seg.label) || 0) + seg.value)\n\t\t\t\t\t// Capture explicit colors from segments\n\t\t\t\t\tif (seg.color && !explicitColors.has(seg.label)) {\n\t\t\t\t\t\texplicitColors.set(seg.label, seg.color)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\t// Sort by total value (most = first color)\n\t\tconst sortedCategories = Array.from(categoryTotals.entries())\n\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t.map(([cat]) => cat)\n\n\t\t// Clear and rebuild - use explicit colors if available, otherwise default palette\n\t\tthis.categoryColorMap.clear()\n\t\tlet defaultColorIndex = 0\n\t\tsortedCategories.forEach(cat => {\n\t\t\tif (explicitColors.has(cat)) {\n\t\t\t\tthis.categoryColorMap.set(cat, explicitColors.get(cat)!)\n\t\t\t} else {\n\t\t\t\tthis.categoryColorMap.set(cat, DEFAULT_COLORS[defaultColorIndex % DEFAULT_COLORS.length])\n\t\t\t\tdefaultColorIndex++\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate getSegmentColor(segment: PillSegment): string {\n\t\t// Use explicit color if provided\n\t\tif (segment.color) return segment.color\n\t\t// Otherwise use from color map\n\t\treturn this.categoryColorMap.get(segment.label) || 'bg-primary'\n\t}\n\n\tprivate formatValue(value: number): string {\n\t\tconst formatted = value.toFixed(this.valueDecimals)\n\t\treturn `${this.valuePrefix}${formatted}${this.valueSuffix}`\n\t}\n\n\tprivate getMedalEmoji(rank: number | undefined): string {\n\t\tif (!this.showMedals || !rank) return ''\n\t\tif (rank === 1) return '🥇'\n\t\tif (rank === 2) return '🥈'\n\t\tif (rank === 3) return '🥉'\n\t\treturn ''\n\t}\n\n\tprivate getMaxValue(): number {\n\t\tif (this.data.length === 0) return 0\n\t\treturn Math.max(...this.data.map(d => d.value), 1)\n\t}\n\n\tprivate renderBar(dataPoint: PillDataPoint, maxValue: number): ReturnType<typeof html> {\n\t\tconst percentage = maxValue > 0 ? (dataPoint.value / maxValue) * 100 : 0\n\t\tconst animatedPercentage = percentage * this.animationProgress\n\n\t\t// If no segments, render solid bar\n\t\tif (!dataPoint.segments || dataPoint.segments.length === 0) {\n\t\t\tconst barColorClass = dataPoint.isPeak\n\t\t\t\t? 'bg-success'\n\t\t\t\t: dataPoint.isLow\n\t\t\t\t\t? 'bg-tertiary opacity-70'\n\t\t\t\t\t: dataPoint.value === 0\n\t\t\t\t\t\t? 'bg-tertiary/40'\n\t\t\t\t\t\t: 'bg-primary'\n\n\t\t\treturn html`\n\t\t\t\t<div\n\t\t\t\t\tclass=\"${barColorClass} h-full transition-all rounded-full\"\n\t\t\t\t\tstyle=\"width: ${Math.max(animatedPercentage, dataPoint.value > 0 ? 2 : 0)}%; transition-duration: ${this.animated ? '0ms' : '300ms'}\"\n\t\t\t\t\ttitle=\"${this.formatValue(dataPoint.value)}\"\n\t\t\t\t></div>\n\t\t\t`\n\t\t}\n\n\t\t// Stacked bar with segments\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"h-full flex\"\n\t\t\t\tstyle=\"width: ${Math.max(animatedPercentage, 2)}%; transition-duration: ${this.animated ? '0ms' : '300ms'}\"\n\t\t\t>\n\t\t\t\t${repeat(\n\t\t\t\t\tdataPoint.segments,\n\t\t\t\t\tseg => seg.label,\n\t\t\t\t\t(seg, index) => {\n\t\t\t\t\t\tconst segmentPercentage = dataPoint.value > 0 ? (seg.value / dataPoint.value) * 100 : 0\n\t\t\t\t\t\tconst marginLeft = index > 0 ? 'ml-px' : ''\n\t\t\t\t\t\tconst brightenClass = dataPoint.isPeak ? 'brightness-110' : ''\n\t\t\t\t\t\tconst colorClass = this.getSegmentColor(seg)\n\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"${colorClass} ${marginLeft} ${brightenClass} h-full transition-all\n\t\t\t\t\t\t\t\t\t${index === 0 ? 'rounded-l-full' : ''}\n\t\t\t\t\t\t\t\t\t${index === dataPoint.segments!.length - 1 ? 'rounded-r-full' : ''}\"\n\t\t\t\t\t\t\t\tstyle=\"width: ${segmentPercentage}%\"\n\t\t\t\t\t\t\t\ttitle=\"${seg.label}: ${this.formatValue(seg.value)}\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate renderLegend(): ReturnType<typeof html> {\n\t\tif (!this.showLegend || this.categoryColorMap.size === 0) {\n\t\t\treturn html``\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=\"flex flex-wrap gap-3 mt-4 pt-4 border-t border-outline-variant\">\n\t\t\t\t${repeat(\n\t\t\t\t\tArray.from(this.categoryColorMap.entries()),\n\t\t\t\t\t([cat]) => cat,\n\t\t\t\t\t([cat, color]) => html`\n\t\t\t\t\t\t<div class=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t<div class=\"${color} w-3 h-3 rounded-sm\"></div>\n\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"sm\" class=\"text-surface-onVariant\">\n\t\t\t\t\t\t\t\t${cat}\n\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender() {\n\t\t// Initialize colors before rendering\n\t\tthis.initializeCategoryColors()\n\n\t\tif (!this.data || this.data.length === 0) {\n\t\t\treturn html``\n\t\t}\n\n\t\tconst maxValue = this.getMaxValue()\n\n\t\treturn html`\n\t\t\t<div class=\"space-y-1\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.data,\n\t\t\t\t\td => d.label,\n\t\t\t\t\td => {\n\t\t\t\t\t\tconst rowBgClass = d.isPeak ? 'bg-success/10 rounded-lg' : ''\n\t\t\t\t\t\tconst textColorClass = d.isPeak ? 'text-success font-bold' : 'text-surface-on'\n\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-3 py-2 px-2 ${rowBgClass}\">\n\t\t\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t\t\t<div class=\"${this.labelWidth} shrink-0 text-right\">\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"md\" class=\"${textColorClass}\">\n\t\t\t\t\t\t\t\t\t\t${d.label}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Medal -->\n\t\t\t\t\t\t\t\t<div class=\"w-6 shrink-0 text-center\">\n\t\t\t\t\t\t\t\t\t${d.isPeak || (d.rank && d.rank <= 3)\n\t\t\t\t\t\t\t\t\t\t? html`<span class=\"text-sm\">${this.getMedalEmoji(d.rank)}</span>`\n\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Bar -->\n\t\t\t\t\t\t\t\t<div class=\"flex-1 h-6 bg-secondary/15 rounded-full overflow-hidden\">\n\t\t\t\t\t\t\t\t\t${this.renderBar(d, maxValue)}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t\t\t<div class=\"${this.valueWidth} shrink-0 text-right\">\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"md\" class=\"${textColorClass}\">\n\t\t\t\t\t\t\t\t\t\t${this.formatValue(d.value)}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<!-- Legend -->\n\t\t\t${this.renderLegend()}\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-pills': SchmancyPills\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"charts.cjs","names":[],"sources":["../src/charts/utils.ts","../src/charts/area-chart.ts","../src/charts/pills.ts"],"sourcesContent":["/**\n * Catmull-Rom spline interpolation for smooth curves\n * Returns the interpolated point between p1 and p2\n */\nexport function catmullRomSpline(\n\tp0: { x: number; y: number },\n\tp1: { x: number; y: number },\n\tp2: { x: number; y: number },\n\tp3: { x: number; y: number },\n\tt: number\n): { x: number; y: number } {\n\tconst t2 = t * t\n\tconst t3 = t2 * t\n\n\tconst x =\n\t\t0.5 *\n\t\t(2 * p1.x +\n\t\t\t(-p0.x + p2.x) * t +\n\t\t\t(2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 +\n\t\t\t(-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3)\n\n\tconst y =\n\t\t0.5 *\n\t\t(2 * p1.y +\n\t\t\t(-p0.y + p2.y) * t +\n\t\t\t(2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 +\n\t\t\t(-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3)\n\n\treturn { x, y }\n}\n\n/**\n * Converts hex or rgb color to rgba string\n */\nexport function hexToRgba(color: string, alpha: number): string {\n\t// Handle rgb/rgba format\n\tif (color.startsWith('rgb')) {\n\t\tconst match = color.match(/[\\d.]+/g)\n\t\tif (match && match.length >= 3) {\n\t\t\treturn `rgba(${match[0]}, ${match[1]}, ${match[2]}, ${alpha})`\n\t\t}\n\t}\n\n\t// Handle hex format\n\tlet hex = color.replace('#', '')\n\tif (hex.length === 3) {\n\t\thex = hex\n\t\t\t.split('')\n\t\t\t.map(c => c + c)\n\t\t\t.join('')\n\t}\n\n\tconst r = parseInt(hex.substring(0, 2), 16)\n\tconst g = parseInt(hex.substring(2, 4), 16)\n\tconst b = parseInt(hex.substring(4, 6), 16)\n\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\n/**\n * Cubic ease-out animation function\n */\nexport function easeOutCubic(t: number): number {\n\treturn 1 - Math.pow(1 - t, 3)\n}\n","import { html, css, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ref, createRef, Ref } from 'lit/directives/ref.js'\nimport { $LitElement } from '@mixins/index'\nimport type { ChartDataPoint, ChartTheme, ProcessedDataPoint } from './types'\nimport { catmullRomSpline, hexToRgba, easeOutCubic } from './utils'\n\ninterface TooltipData {\n\tvisible: boolean\n\tx: number\n\ty: number\n\tlabel: string\n\tvalue: number\n\tmetadata?: Record<string, unknown>\n}\n\n@customElement('schmancy-area-chart')\nexport class SchmancyAreaChart extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`) {\n\t/** Chart data points */\n\t@property({ type: Array })\n\tdata: ChartDataPoint[] = []\n\n\t/** Chart height in pixels */\n\t@property({ type: Number })\n\theight = 200\n\n\t/** Show grid lines */\n\t@property({ type: Boolean })\n\tshowGrid = true\n\n\t/** Show x-axis labels */\n\t@property({ type: Boolean })\n\tshowLabels = true\n\n\t/** Enable tooltips */\n\t@property({ type: Boolean })\n\tshowTooltip = true\n\n\t/** Number of peaks to highlight */\n\t@property({ type: Number })\n\tpeakCount = 3\n\n\t/** Animation duration in milliseconds */\n\t@property({ type: Number })\n\tanimationDuration = 800\n\n\t/** Enable entrance animation */\n\t@property({ type: Boolean })\n\tanimated = true\n\n\t/** Prefix for values (e.g., \"EUR \") */\n\t@property({ type: String })\n\tvaluePrefix = ''\n\n\t/** Suffix for values (e.g., \"%\") */\n\t@property({ type: String })\n\tvalueSuffix = ''\n\n\t/** Decimal places for value display */\n\t@property({ type: Number })\n\tvalueDecimals = 2\n\n\t/** Theme overrides */\n\t@property({ type: Object })\n\ttheme: Partial<ChartTheme> = {}\n\n\t@state() private tooltipData: TooltipData = {\n\t\tvisible: false,\n\t\tx: 0,\n\t\ty: 0,\n\t\tlabel: '',\n\t\tvalue: 0,\n\t}\n\n\t@state() private animationProgress = 0\n\t@state() private isVisible = false\n\n\tprivate canvasRef: Ref<HTMLCanvasElement> = createRef()\n\tprivate containerRef: Ref<HTMLDivElement> = createRef()\n\tprivate animationFrameId: number | null = null\n\tprivate observer: IntersectionObserver | null = null\n\tprivate processedData: ProcessedDataPoint[] = []\n\tprivate resizeObserver: ResizeObserver | null = null\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupIntersectionObserver()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.cleanup()\n\t}\n\n\tprivate cleanup() {\n\t\tif (this.animationFrameId !== null) {\n\t\t\tcancelAnimationFrame(this.animationFrameId)\n\t\t\tthis.animationFrameId = null\n\t\t}\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect()\n\t\t\tthis.observer = null\n\t\t}\n\t\tif (this.resizeObserver) {\n\t\t\tthis.resizeObserver.disconnect()\n\t\t\tthis.resizeObserver = null\n\t\t}\n\t}\n\n\tprivate setupIntersectionObserver() {\n\t\tthis.observer = new IntersectionObserver(\n\t\t\tentries => {\n\t\t\t\tconst entry = entries[0]\n\t\t\t\tif (entry.isIntersecting && !this.isVisible) {\n\t\t\t\t\tthis.isVisible = true\n\t\t\t\t\tif (this.animated) {\n\t\t\t\t\t\tthis.startAnimation()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.animationProgress = 1\n\t\t\t\t\t\tthis.drawChart()\n\t\t\t\t\t}\n\t\t\t\t} else if (!entry.isIntersecting) {\n\t\t\t\t\tthis.isVisible = false\n\t\t\t\t\tif (this.animationFrameId !== null) {\n\t\t\t\t\t\tcancelAnimationFrame(this.animationFrameId)\n\t\t\t\t\t\tthis.animationFrameId = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ threshold: 0.1 }\n\t\t)\n\t}\n\n\tprotected updated(changedProperties: PropertyValues) {\n\t\tsuper.updated(changedProperties)\n\n\t\tif (this.containerRef.value && this.observer) {\n\t\t\tthis.observer.observe(this.containerRef.value)\n\t\t}\n\n\t\tif (this.canvasRef.value && !this.resizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\t\tthis.drawChart()\n\t\t\t})\n\t\t\tthis.resizeObserver.observe(this.canvasRef.value)\n\t\t}\n\n\t\t// Redraw when data changes\n\t\tif (changedProperties.has('data') && this.isVisible) {\n\t\t\tif (this.animated) {\n\t\t\t\tthis.animationProgress = 0\n\t\t\t\tthis.startAnimation()\n\t\t\t} else {\n\t\t\t\tthis.animationProgress = 1\n\t\t\t\tthis.drawChart()\n\t\t\t}\n\t\t}\n\n\t\t// Redraw on theme or config changes\n\t\tif (\n\t\t\t(changedProperties.has('theme') ||\n\t\t\t\tchangedProperties.has('showGrid') ||\n\t\t\t\tchangedProperties.has('showLabels') ||\n\t\t\t\tchangedProperties.has('peakCount')) &&\n\t\t\tthis.isVisible\n\t\t) {\n\t\t\tthis.drawChart()\n\t\t}\n\t}\n\n\tprivate startAnimation() {\n\t\tconst startTime = performance.now()\n\t\tconst duration = this.animationDuration\n\n\t\tconst animateFrame = (currentTime: number) => {\n\t\t\tconst elapsed = currentTime - startTime\n\t\t\tconst progress = Math.min(elapsed / duration, 1)\n\n\t\t\tthis.animationProgress = easeOutCubic(progress)\n\t\t\tthis.drawChart()\n\n\t\t\tif (progress < 1 && this.isVisible) {\n\t\t\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t\t\t}\n\t\t}\n\n\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t}\n\n\tprivate processData(): ProcessedDataPoint[] {\n\t\tif (!this.data || this.data.length === 0) return []\n\n\t\t// Find top N peak values\n\t\tconst sortedByValue = [...this.data].sort((a, b) => b.value - a.value)\n\t\tconst peakLabels = new Set(sortedByValue.slice(0, this.peakCount).map(d => d.label))\n\n\t\treturn this.data.map(d => ({\n\t\t\t...d,\n\t\t\tx: 0, // Will be calculated during draw\n\t\t\ty: 0, // Will be calculated during draw\n\t\t\tisPeak: peakLabels.has(d.label),\n\t\t}))\n\t}\n\n\tprivate getThemeValue<K extends keyof ChartTheme>(\n\t\tkey: K,\n\t\tdefaultValue: NonNullable<ChartTheme[K]>\n\t): NonNullable<ChartTheme[K]> {\n\t\treturn (this.theme[key] as NonNullable<ChartTheme[K]>) ?? defaultValue\n\t}\n\n\tprivate drawChart() {\n\t\tconst canvas = this.canvasRef.value\n\t\tif (!canvas) return\n\n\t\tconst ctx = canvas.getContext('2d')\n\t\tif (!ctx) return\n\n\t\tconst dpr = window.devicePixelRatio || 1\n\t\tconst rect = canvas.getBoundingClientRect()\n\t\tconst width = rect.width\n\t\tconst height = rect.height\n\n\t\t// Set canvas size for high DPI\n\t\tcanvas.width = width * dpr\n\t\tcanvas.height = height * dpr\n\t\tctx.scale(dpr, dpr)\n\n\t\t// Clear canvas\n\t\tctx.clearRect(0, 0, width, height)\n\n\t\tconst data = this.processData()\n\t\tif (data.length === 0) return\n\n\t\tconst padding = { top: 20, right: 20, bottom: this.showLabels ? 40 : 20, left: 20 }\n\t\tconst chartWidth = width - padding.left - padding.right\n\t\tconst chartHeight = height - padding.top - padding.bottom\n\n\t\t// Find max value for scaling\n\t\tconst maxValue = Math.max(...data.map(d => d.value), 1)\n\n\t\t// Calculate positions\n\t\tconst points = data.map((d, i) => ({\n\t\t\t...d,\n\t\t\tx: padding.left + (data.length > 1 ? (i / (data.length - 1)) * chartWidth : chartWidth / 2),\n\t\t\ty: padding.top + chartHeight - (d.value / maxValue) * chartHeight,\n\t\t}))\n\n\t\tthis.processedData = points\n\n\t\t// Get primary color from CSS or theme\n\t\tconst computedStyle = getComputedStyle(this)\n\t\tconst defaultPrimaryColor =\n\t\t\tcomputedStyle.getPropertyValue('--schmancy-sys-color-primary').trim() || '#6750A4'\n\t\tconst primaryColor = this.getThemeValue('primaryColor', defaultPrimaryColor)\n\t\tconst [gradientOpacityTop, gradientOpacityBottom] = this.getThemeValue('gradientOpacity', [0.4, 0.05])\n\t\tconst strokeWidth = this.getThemeValue('strokeWidth', 2)\n\t\tconst pointRadius = this.getThemeValue('pointRadius', 4)\n\t\tconst peakRadius = this.getThemeValue('peakRadius', 6)\n\n\t\t// Draw grid lines\n\t\tif (this.showGrid) {\n\t\t\tctx.strokeStyle = 'rgba(128, 128, 128, 0.15)'\n\t\t\tctx.lineWidth = 1\n\t\t\tctx.setLineDash([4, 4])\n\n\t\t\tfor (let i = 1; i <= 3; i++) {\n\t\t\t\tconst y = padding.top + (chartHeight * i) / 4\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.moveTo(padding.left, y)\n\t\t\t\tctx.lineTo(width - padding.right, y)\n\t\t\t\tctx.stroke()\n\t\t\t}\n\n\t\t\tctx.setLineDash([])\n\t\t}\n\n\t\t// Create smooth curve path using Catmull-Rom spline\n\t\tconst curvePath = new Path2D()\n\t\tconst areaPath = new Path2D()\n\n\t\tif (points.length >= 2) {\n\t\t\t// Start area path from bottom left\n\t\t\tareaPath.moveTo(points[0].x, padding.top + chartHeight)\n\t\t\tcurvePath.moveTo(points[0].x, points[0].y)\n\t\t\tareaPath.lineTo(points[0].x, points[0].y)\n\n\t\t\tfor (let i = 0; i < points.length - 1; i++) {\n\t\t\t\tconst p0 = points[Math.max(0, i - 1)]\n\t\t\t\tconst p1 = points[i]\n\t\t\t\tconst p2 = points[Math.min(points.length - 1, i + 1)]\n\t\t\t\tconst p3 = points[Math.min(points.length - 1, i + 2)]\n\n\t\t\t\t// Draw curve segments\n\t\t\t\tconst segments = 16\n\t\t\t\tfor (let j = 1; j <= segments; j++) {\n\t\t\t\t\tconst t = j / segments\n\t\t\t\t\tconst point = catmullRomSpline(p0, p1, p2, p3, t)\n\t\t\t\t\tcurvePath.lineTo(point.x, point.y)\n\t\t\t\t\tareaPath.lineTo(point.x, point.y)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Close area path\n\t\t\tareaPath.lineTo(points[points.length - 1].x, padding.top + chartHeight)\n\t\t\tareaPath.closePath()\n\t\t} else if (points.length === 1) {\n\t\t\t// Single point - draw a dot\n\t\t\tcurvePath.arc(points[0].x, points[0].y, pointRadius, 0, Math.PI * 2)\n\t\t}\n\n\t\t// Apply animation clipping\n\t\tctx.save()\n\t\tctx.beginPath()\n\t\tctx.rect(0, 0, padding.left + chartWidth * this.animationProgress, height)\n\t\tctx.clip()\n\n\t\t// Draw gradient fill\n\t\tif (points.length >= 2) {\n\t\t\tconst gradient = ctx.createLinearGradient(0, padding.top, 0, padding.top + chartHeight)\n\t\t\tgradient.addColorStop(0, hexToRgba(primaryColor, gradientOpacityTop))\n\t\t\tgradient.addColorStop(1, hexToRgba(primaryColor, gradientOpacityBottom))\n\n\t\t\tctx.fillStyle = gradient\n\t\t\tctx.fill(areaPath)\n\t\t}\n\n\t\t// Draw stroke\n\t\tctx.strokeStyle = primaryColor\n\t\tctx.lineWidth = strokeWidth\n\t\tctx.lineCap = 'round'\n\t\tctx.lineJoin = 'round'\n\t\tctx.stroke(curvePath)\n\n\t\t// Draw data points\n\t\tpoints.forEach((point, index) => {\n\t\t\tconst pointProgress = (index / (points.length - 1 || 1)) * this.animationProgress\n\t\t\tif (pointProgress < index / (points.length || 1)) return\n\n\t\t\tconst radius = point.isPeak ? peakRadius - 1 : pointRadius - 1\n\t\t\tconst outerRadius = point.isPeak ? peakRadius + 4 : pointRadius + 2\n\n\t\t\t// Outer glow for peaks\n\t\t\tif (point.isPeak) {\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.arc(point.x, point.y, outerRadius, 0, Math.PI * 2)\n\t\t\t\tctx.fillStyle = hexToRgba(primaryColor, 0.2)\n\t\t\t\tctx.fill()\n\t\t\t}\n\n\t\t\t// Inner dot\n\t\t\tctx.beginPath()\n\t\t\tctx.arc(point.x, point.y, radius, 0, Math.PI * 2)\n\t\t\tctx.fillStyle = primaryColor\n\t\t\tctx.fill()\n\n\t\t\t// White center for peaks\n\t\t\tif (point.isPeak) {\n\t\t\t\tctx.beginPath()\n\t\t\t\tctx.arc(point.x, point.y, 2, 0, Math.PI * 2)\n\t\t\t\tctx.fillStyle = 'white'\n\t\t\t\tctx.fill()\n\t\t\t}\n\t\t})\n\n\t\tctx.restore()\n\n\t\t// Draw labels\n\t\tif (this.showLabels && points.length > 0) {\n\t\t\tctx.fillStyle = 'rgba(128, 128, 128, 0.8)'\n\t\t\tctx.font = '11px system-ui, sans-serif'\n\t\t\tctx.textAlign = 'center'\n\t\t\tctx.textBaseline = 'top'\n\n\t\t\t// Show fewer labels on narrow charts\n\t\t\tconst labelStep = width < 400 ? 3 : width < 600 ? 2 : 1\n\t\t\tpoints.forEach((point, index) => {\n\t\t\t\tif (index % labelStep === 0) {\n\t\t\t\t\tctx.fillText(point.label, point.x, height - padding.bottom + 8)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate formatValue(value: number): string {\n\t\tconst formatted = value.toFixed(this.valueDecimals)\n\t\treturn `${this.valuePrefix}${formatted}${this.valueSuffix}`\n\t}\n\n\tprivate handlePointerMove = (e: PointerEvent) => {\n\t\tif (this.processedData.length === 0 || !this.showTooltip) return\n\n\t\tconst canvas = this.canvasRef.value\n\t\tif (!canvas) return\n\n\t\tconst rect = canvas.getBoundingClientRect()\n\t\tconst x = e.clientX - rect.left\n\n\t\t// Find closest data point\n\t\tlet closestPoint: ProcessedDataPoint | null = null\n\t\tlet minDistance = Infinity\n\n\t\tthis.processedData.forEach(point => {\n\t\t\tconst distance = Math.abs(point.x - x)\n\t\t\tif (distance < minDistance) {\n\t\t\t\tminDistance = distance\n\t\t\t\tclosestPoint = point\n\t\t\t}\n\t\t})\n\n\t\tif (closestPoint && minDistance < 30) {\n\t\t\tthis.tooltipData = {\n\t\t\t\tvisible: true,\n\t\t\t\tx: closestPoint.x,\n\t\t\t\ty: closestPoint.y,\n\t\t\t\tlabel: closestPoint.label,\n\t\t\t\tvalue: closestPoint.value,\n\t\t\t\tmetadata: closestPoint.metadata,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.tooltipData = { ...this.tooltipData, visible: false }\n\t\t}\n\t}\n\n\tprivate handlePointerLeave = () => {\n\t\tthis.tooltipData = { ...this.tooltipData, visible: false }\n\t}\n\n\tprivate renderMetadata() {\n\t\tif (!this.tooltipData.metadata) return ''\n\t\treturn Object.entries(this.tooltipData.metadata).map(\n\t\t\t([key, value]) => html`\n\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"text-surface-onVariant\">\n\t\t\t\t\t${key}: ${String(value)}\n\t\t\t\t</schmancy-typography>\n\t\t\t`\n\t\t)\n\t}\n\n\trender() {\n\t\tif (!this.data || this.data.length === 0) {\n\t\t\treturn html``\n\t\t}\n\n\t\treturn html`\n\t\t\t<div ${ref(this.containerRef)} class=\"relative\">\n\t\t\t\t<div class=\"relative\" style=\"height: ${this.height}px; touch-action: pan-y;\">\n\t\t\t\t\t<canvas\n\t\t\t\t\t\t${ref(this.canvasRef)}\n\t\t\t\t\t\tclass=\"w-full h-full\"\n\t\t\t\t\t\tstyle=\"display: block;\"\n\t\t\t\t\t\t@pointermove=${this.handlePointerMove}\n\t\t\t\t\t\t@pointerleave=${this.handlePointerLeave}\n\t\t\t\t\t></canvas>\n\n\t\t\t\t\t<!-- Tooltip -->\n\t\t\t\t\t${this.showTooltip\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"absolute pointer-events-none transition-opacity duration-150 ${this.tooltipData.visible\n\t\t\t\t\t\t\t\t\t\t? 'opacity-100'\n\t\t\t\t\t\t\t\t\t\t: 'opacity-0'}\"\n\t\t\t\t\t\t\t\t\tstyle=\"\n left: ${this.tooltipData.x}px;\n top: ${this.tooltipData.y - 60}px;\n transform: translateX(-50%);\n \"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-surface elevation=\"3\" rounded=\"all\" class=\"px-3 py-2 min-w-max\">\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"sm\" class=\"text-surface-onVariant\">\n\t\t\t\t\t\t\t\t\t\t\t${this.tooltipData.label}\n\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\" class=\"text-surface-on font-semibold\">\n\t\t\t\t\t\t\t\t\t\t\t${this.formatValue(this.tooltipData.value)}\n\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${this.renderMetadata()}\n\t\t\t\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t `\n\t\t\t\t\t\t: ''}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area-chart': SchmancyAreaChart\n\t}\n}\n","import { html, css, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { $LitElement } from '@mixins/index'\nimport type { PillDataPoint, PillSegment } from './types'\n\n/** Default color palette for segments - expanded for uniqueness */\nconst DEFAULT_COLORS = [\n\t'bg-primary',\n\t'bg-secondary',\n\t'bg-tertiary',\n\t'bg-success',\n\t'bg-warning',\n\t'bg-error',\n\t'bg-primary/70',\n\t'bg-secondary/70',\n\t'bg-tertiary/70',\n\t'bg-success/70',\n\t'bg-warning/70',\n\t'bg-error/70',\n\t'bg-primary/40',\n\t'bg-secondary/40',\n\t'bg-tertiary/40',\n]\n\n@customElement('schmancy-pills')\nexport class SchmancyPills extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`) {\n\t/** Chart data points */\n\t@property({ type: Array })\n\tdata: PillDataPoint[] = []\n\n\t/** Prefix for values (e.g., \"EUR \") */\n\t@property({ type: String })\n\tvaluePrefix = ''\n\n\t/** Suffix for values (e.g., \"%\") */\n\t@property({ type: String })\n\tvalueSuffix = ''\n\n\t/** Decimal places for value display */\n\t@property({ type: Number })\n\tvalueDecimals = 2\n\n\t/** Show medals for top 3 */\n\t@property({ type: Boolean })\n\tshowMedals = true\n\n\t/** Show legend for segments */\n\t@property({ type: Boolean })\n\tshowLegend = true\n\n\t/** Animation duration in milliseconds */\n\t@property({ type: Number })\n\tanimationDuration = 500\n\n\t/** Enable entrance animation */\n\t@property({ type: Boolean })\n\tanimated = true\n\n\t/** Label column width (Tailwind class) */\n\t@property({ type: String })\n\tlabelWidth = 'w-14'\n\n\t/** Value column width (Tailwind class) */\n\t@property({ type: String })\n\tvalueWidth = 'w-20'\n\n\t@state() private animationProgress = 0\n\t@state() private isVisible = false\n\t@state() private categoryColorMap = new Map<string, string>()\n\n\tprivate observer: IntersectionObserver | null = null\n\tprivate animationFrameId: number | null = null\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupIntersectionObserver()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.cleanup()\n\t}\n\n\tprivate cleanup() {\n\t\tif (this.animationFrameId !== null) {\n\t\t\tcancelAnimationFrame(this.animationFrameId)\n\t\t\tthis.animationFrameId = null\n\t\t}\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect()\n\t\t\tthis.observer = null\n\t\t}\n\t}\n\n\tprivate setupIntersectionObserver() {\n\t\tthis.observer = new IntersectionObserver(\n\t\t\tentries => {\n\t\t\t\tconst entry = entries[0]\n\t\t\t\tif (entry.isIntersecting && !this.isVisible) {\n\t\t\t\t\tthis.isVisible = true\n\t\t\t\t\tif (this.animated) {\n\t\t\t\t\t\tthis.startAnimation()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.animationProgress = 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ threshold: 0.1 }\n\t\t)\n\t}\n\n\tprotected firstUpdated() {\n\t\tif (this.observer) {\n\t\t\tthis.observer.observe(this)\n\t\t}\n\t}\n\n\tprotected updated(changedProperties: PropertyValues) {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Restart animation when data changes\n\t\tif (changedProperties.has('data') && this.isVisible && this.animated) {\n\t\t\tthis.animationProgress = 0\n\t\t\tthis.startAnimation()\n\t\t}\n\t}\n\n\tprivate startAnimation() {\n\t\tconst startTime = performance.now()\n\t\tconst duration = this.animationDuration\n\n\t\tconst animateFrame = (currentTime: number) => {\n\t\t\tconst elapsed = currentTime - startTime\n\t\t\tconst progress = Math.min(elapsed / duration, 1)\n\n\t\t\t// Ease out cubic\n\t\t\tthis.animationProgress = 1 - Math.pow(1 - progress, 3)\n\n\t\t\tif (progress < 1 && this.isVisible) {\n\t\t\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t\t\t}\n\t\t}\n\n\t\tthis.animationFrameId = requestAnimationFrame(animateFrame)\n\t}\n\n\tprivate initializeCategoryColors(): void {\n\t\t// Build consistent color map from all segments in data\n\t\tconst categoryTotals = new Map<string, number>()\n\t\tconst explicitColors = new Map<string, string>()\n\n\t\tthis.data.forEach(d => {\n\t\t\tif (d.segments) {\n\t\t\t\td.segments.forEach(seg => {\n\t\t\t\t\tcategoryTotals.set(seg.label, (categoryTotals.get(seg.label) || 0) + seg.value)\n\t\t\t\t\t// Capture explicit colors from segments\n\t\t\t\t\tif (seg.color && !explicitColors.has(seg.label)) {\n\t\t\t\t\t\texplicitColors.set(seg.label, seg.color)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\t// Sort by total value (most = first color)\n\t\tconst sortedCategories = Array.from(categoryTotals.entries())\n\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t.map(([cat]) => cat)\n\n\t\t// Clear and rebuild - use explicit colors if available, otherwise default palette\n\t\tthis.categoryColorMap.clear()\n\t\tlet defaultColorIndex = 0\n\t\tsortedCategories.forEach(cat => {\n\t\t\tif (explicitColors.has(cat)) {\n\t\t\t\tthis.categoryColorMap.set(cat, explicitColors.get(cat)!)\n\t\t\t} else {\n\t\t\t\tthis.categoryColorMap.set(cat, DEFAULT_COLORS[defaultColorIndex % DEFAULT_COLORS.length])\n\t\t\t\tdefaultColorIndex++\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate getSegmentColor(segment: PillSegment): string {\n\t\t// Use explicit color if provided\n\t\tif (segment.color) return segment.color\n\t\t// Otherwise use from color map\n\t\treturn this.categoryColorMap.get(segment.label) || 'bg-primary'\n\t}\n\n\tprivate formatValue(value: number): string {\n\t\tconst formatted = value.toFixed(this.valueDecimals)\n\t\treturn `${this.valuePrefix}${formatted}${this.valueSuffix}`\n\t}\n\n\tprivate getMedalEmoji(rank: number | undefined): string {\n\t\tif (!this.showMedals || !rank) return ''\n\t\tif (rank === 1) return '🥇'\n\t\tif (rank === 2) return '🥈'\n\t\tif (rank === 3) return '🥉'\n\t\treturn ''\n\t}\n\n\tprivate getMaxValue(): number {\n\t\tif (this.data.length === 0) return 0\n\t\treturn Math.max(...this.data.map(d => d.value), 1)\n\t}\n\n\tprivate renderBar(dataPoint: PillDataPoint, maxValue: number): ReturnType<typeof html> {\n\t\tconst percentage = maxValue > 0 ? (dataPoint.value / maxValue) * 100 : 0\n\t\tconst animatedPercentage = percentage * this.animationProgress\n\n\t\t// If no segments, render solid bar\n\t\tif (!dataPoint.segments || dataPoint.segments.length === 0) {\n\t\t\tconst barColorClass = dataPoint.isPeak\n\t\t\t\t? 'bg-success'\n\t\t\t\t: dataPoint.isLow\n\t\t\t\t\t? 'bg-tertiary opacity-70'\n\t\t\t\t\t: dataPoint.value === 0\n\t\t\t\t\t\t? 'bg-tertiary/40'\n\t\t\t\t\t\t: 'bg-primary'\n\n\t\t\treturn html`\n\t\t\t\t<div\n\t\t\t\t\tclass=\"${barColorClass} h-full transition-all rounded-full\"\n\t\t\t\t\tstyle=\"width: ${Math.max(animatedPercentage, dataPoint.value > 0 ? 2 : 0)}%; transition-duration: ${this.animated ? '0ms' : '300ms'}\"\n\t\t\t\t\ttitle=\"${this.formatValue(dataPoint.value)}\"\n\t\t\t\t></div>\n\t\t\t`\n\t\t}\n\n\t\t// Stacked bar with segments\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"h-full flex\"\n\t\t\t\tstyle=\"width: ${Math.max(animatedPercentage, 2)}%; transition-duration: ${this.animated ? '0ms' : '300ms'}\"\n\t\t\t>\n\t\t\t\t${repeat(\n\t\t\t\t\tdataPoint.segments,\n\t\t\t\t\tseg => seg.label,\n\t\t\t\t\t(seg, index) => {\n\t\t\t\t\t\tconst segmentPercentage = dataPoint.value > 0 ? (seg.value / dataPoint.value) * 100 : 0\n\t\t\t\t\t\tconst marginLeft = index > 0 ? 'ml-px' : ''\n\t\t\t\t\t\tconst brightenClass = dataPoint.isPeak ? 'brightness-110' : ''\n\t\t\t\t\t\tconst colorClass = this.getSegmentColor(seg)\n\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"${colorClass} ${marginLeft} ${brightenClass} h-full transition-all\n\t\t\t\t\t\t\t\t\t${index === 0 ? 'rounded-l-full' : ''}\n\t\t\t\t\t\t\t\t\t${index === dataPoint.segments!.length - 1 ? 'rounded-r-full' : ''}\"\n\t\t\t\t\t\t\t\tstyle=\"width: ${segmentPercentage}%\"\n\t\t\t\t\t\t\t\ttitle=\"${seg.label}: ${this.formatValue(seg.value)}\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate renderLegend(): ReturnType<typeof html> {\n\t\tif (!this.showLegend || this.categoryColorMap.size === 0) {\n\t\t\treturn html``\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=\"flex flex-wrap gap-3 mt-4 pt-4 border-t border-outline-variant\">\n\t\t\t\t${repeat(\n\t\t\t\t\tArray.from(this.categoryColorMap.entries()),\n\t\t\t\t\t([cat]) => cat,\n\t\t\t\t\t([cat, color]) => html`\n\t\t\t\t\t\t<div class=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t<div class=\"${color} w-3 h-3 rounded-sm\"></div>\n\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"sm\" class=\"text-surface-onVariant\">\n\t\t\t\t\t\t\t\t${cat}\n\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender() {\n\t\t// Initialize colors before rendering\n\t\tthis.initializeCategoryColors()\n\n\t\tif (!this.data || this.data.length === 0) {\n\t\t\treturn html``\n\t\t}\n\n\t\tconst maxValue = this.getMaxValue()\n\n\t\treturn html`\n\t\t\t<div class=\"space-y-1\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.data,\n\t\t\t\t\td => d.label,\n\t\t\t\t\td => {\n\t\t\t\t\t\tconst rowBgClass = d.isPeak ? 'bg-success/10 rounded-lg' : ''\n\t\t\t\t\t\tconst textColorClass = d.isPeak ? 'text-success font-bold' : 'text-surface-on'\n\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-3 py-2 px-2 ${rowBgClass}\">\n\t\t\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t\t\t<div class=\"${this.labelWidth} shrink-0 text-right\">\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"md\" class=\"${textColorClass}\">\n\t\t\t\t\t\t\t\t\t\t${d.label}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Medal -->\n\t\t\t\t\t\t\t\t<div class=\"w-6 shrink-0 text-center\">\n\t\t\t\t\t\t\t\t\t${d.isPeak || (d.rank && d.rank <= 3)\n\t\t\t\t\t\t\t\t\t\t? html`<span class=\"text-sm\">${this.getMedalEmoji(d.rank)}</span>`\n\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Bar -->\n\t\t\t\t\t\t\t\t<div class=\"flex-1 h-6 bg-secondary/15 rounded-full overflow-hidden\">\n\t\t\t\t\t\t\t\t\t${this.renderBar(d, maxValue)}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t\t\t<div class=\"${this.valueWidth} shrink-0 text-right\">\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"md\" class=\"${textColorClass}\">\n\t\t\t\t\t\t\t\t\t\t${this.formatValue(d.value)}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<!-- Legend -->\n\t\t\t${this.renderLegend()}\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-pills': SchmancyPills\n\t}\n}\n"],"mappings":"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"}
|
package/dist/charts.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "./litElement.mixin-
|
|
1
|
+
import { t as e } from "./decorate-D_utPUsC.js";
|
|
2
|
+
import { t } from "./litElement.mixin-CncaUoxz.js";
|
|
3
3
|
import "./mixins.js";
|
|
4
4
|
import { customElement as n, property as r, state as i } from "lit/decorators.js";
|
|
5
5
|
import { css as a, html as o } from "lit";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as e } from "./tailwind.mixin-DufHBjmb.js";
|
|
2
|
+
import { t } from "./decorate-D_utPUsC.js";
|
|
2
3
|
import "./mixins.js";
|
|
3
|
-
import { t as n } from "./tslib.es6-
|
|
4
|
+
import { t as n } from "./tslib.es6-CI1onEZb.js";
|
|
4
5
|
import { classMap as r } from "lit/directives/class-map.js";
|
|
5
6
|
import { customElement as i, property as a, query as o, state as s } from "lit/decorators.js";
|
|
6
7
|
import { LitElement as c, css as l, html as u, isServer as d, nothing as f } from "lit";
|
|
@@ -561,10 +562,7 @@ X.shadowRootOptions = {
|
|
|
561
562
|
var Z = l`:host{border-start-start-radius:var(--md-checkbox-container-shape-start-start, var(--md-checkbox-container-shape, 2px));border-start-end-radius:var(--md-checkbox-container-shape-start-end, var(--md-checkbox-container-shape, 2px));border-end-end-radius:var(--md-checkbox-container-shape-end-end, var(--md-checkbox-container-shape, 2px));border-end-start-radius:var(--md-checkbox-container-shape-end-start, var(--md-checkbox-container-shape, 2px));display:inline-flex;height:var(--md-checkbox-container-size, 18px);position:relative;vertical-align:top;width:var(--md-checkbox-container-size, 18px);-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer}:host([disabled]){cursor:default}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--md-checkbox-container-size, 18px))/2)}md-focus-ring{height:44px;inset:unset;width:44px}input{appearance:none;height:48px;margin:0;opacity:0;outline:none;position:absolute;width:48px;z-index:1;cursor:inherit}:host([touch-target=none]) input{height:100%;width:100%}.container{border-radius:inherit;display:flex;height:100%;place-content:center;place-items:center;position:relative;width:100%}.outline,.background,.icon{inset:0;position:absolute}.outline,.background{border-radius:inherit}.outline{border-color:var(--md-checkbox-outline-color, var(--md-sys-color-on-surface-variant, #49454f));border-style:solid;border-width:var(--md-checkbox-outline-width, 2px);box-sizing:border-box}.background{background-color:var(--md-checkbox-selected-container-color, var(--md-sys-color-primary, #6750a4))}.background,.icon{opacity:0;transition-duration:150ms,50ms;transition-property:transform,opacity;transition-timing-function:cubic-bezier(0.3, 0, 0.8, 0.15),linear;transform:scale(0.6)}:where(.selected) :is(.background,.icon){opacity:1;transition-duration:350ms,50ms;transition-timing-function:cubic-bezier(0.05, 0.7, 0.1, 1),linear;transform:scale(1)}md-ripple{border-radius:var(--md-checkbox-state-layer-shape, var(--md-sys-shape-corner-full, 9999px));height:var(--md-checkbox-state-layer-size, 40px);inset:unset;width:var(--md-checkbox-state-layer-size, 40px);--md-ripple-hover-color: var(--md-checkbox-hover-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--md-ripple-hover-opacity: var(--md-checkbox-hover-state-layer-opacity, 0.08);--md-ripple-pressed-color: var(--md-checkbox-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--md-ripple-pressed-opacity: var(--md-checkbox-pressed-state-layer-opacity, 0.12)}.selected md-ripple{--md-ripple-hover-color: var(--md-checkbox-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--md-ripple-hover-opacity: var(--md-checkbox-selected-hover-state-layer-opacity, 0.08);--md-ripple-pressed-color: var(--md-checkbox-selected-pressed-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--md-ripple-pressed-opacity: var(--md-checkbox-selected-pressed-state-layer-opacity, 0.12)}.icon{fill:var(--md-checkbox-selected-icon-color, var(--md-sys-color-on-primary, #fff));height:var(--md-checkbox-icon-size, 18px);width:var(--md-checkbox-icon-size, 18px)}.mark.short{height:2px;transition-property:transform,height;width:2px}.mark.long{height:2px;transition-property:transform,width;width:10px}.mark{animation-duration:150ms;animation-timing-function:cubic-bezier(0.3, 0, 0.8, 0.15);transition-duration:150ms;transition-timing-function:cubic-bezier(0.3, 0, 0.8, 0.15)}.selected .mark{animation-duration:350ms;animation-timing-function:cubic-bezier(0.05, 0.7, 0.1, 1);transition-duration:350ms;transition-timing-function:cubic-bezier(0.05, 0.7, 0.1, 1)}.checked .mark,.prev-checked.unselected .mark{transform:scaleY(-1) translate(7px, -14px) rotate(45deg)}.checked .mark.short,.prev-checked.unselected .mark.short{height:5.6568542495px}.checked .mark.long,.prev-checked.unselected .mark.long{width:11.313708499px}.indeterminate .mark,.prev-indeterminate.unselected .mark{transform:scaleY(-1) translate(4px, -10px) rotate(0deg)}.prev-unselected .mark{transition-property:none}.prev-unselected.checked .mark.long{animation-name:prev-unselected-to-checked}@keyframes prev-unselected-to-checked{from{width:0}}:where(:hover) .outline{border-color:var(--md-checkbox-hover-outline-color, var(--md-sys-color-on-surface, #1d1b20));border-width:var(--md-checkbox-hover-outline-width, 2px)}:where(:hover) .background{background:var(--md-checkbox-selected-hover-container-color, var(--md-sys-color-primary, #6750a4))}:where(:hover) .icon{fill:var(--md-checkbox-selected-hover-icon-color, var(--md-sys-color-on-primary, #fff))}:where(:focus-within) .outline{border-color:var(--md-checkbox-focus-outline-color, var(--md-sys-color-on-surface, #1d1b20));border-width:var(--md-checkbox-focus-outline-width, 2px)}:where(:focus-within) .background{background:var(--md-checkbox-selected-focus-container-color, var(--md-sys-color-primary, #6750a4))}:where(:focus-within) .icon{fill:var(--md-checkbox-selected-focus-icon-color, var(--md-sys-color-on-primary, #fff))}:where(:active) .outline{border-color:var(--md-checkbox-pressed-outline-color, var(--md-sys-color-on-surface, #1d1b20));border-width:var(--md-checkbox-pressed-outline-width, 2px)}:where(:active) .background{background:var(--md-checkbox-selected-pressed-container-color, var(--md-sys-color-primary, #6750a4))}:where(:active) .icon{fill:var(--md-checkbox-selected-pressed-icon-color, var(--md-sys-color-on-primary, #fff))}:where(.disabled,.prev-disabled) :is(.background,.icon,.mark){animation-duration:0s;transition-duration:0s}:where(.disabled) .outline{border-color:var(--md-checkbox-disabled-outline-color, var(--md-sys-color-on-surface, #1d1b20));border-width:var(--md-checkbox-disabled-outline-width, 2px);opacity:var(--md-checkbox-disabled-container-opacity, 0.38)}:where(.selected.disabled) .outline{visibility:hidden}:where(.selected.disabled) .background{background:var(--md-checkbox-selected-disabled-container-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-checkbox-selected-disabled-container-opacity, 0.38)}:where(.disabled) .icon{fill:var(--md-checkbox-selected-disabled-icon-color, var(--md-sys-color-surface, #fef7ff))}@media(forced-colors: active){.background{background-color:CanvasText}.selected.disabled .background{background-color:GrayText;opacity:1}.outline{border-color:CanvasText}.disabled .outline{border-color:GrayText;opacity:1}.icon{fill:Canvas}}
|
|
562
563
|
`, Q = class extends X {};
|
|
563
564
|
Q.styles = [Z], Q = n([i("md-checkbox")], Q);
|
|
564
|
-
var $ = class extends
|
|
565
|
-
constructor(...e) {
|
|
566
|
-
super(...e), this.value = !1, this.disabled = !1, this.required = !1, this.name = "checkbox-" + Math.random().toString(36), this.id = "checkbox-" + Math.random().toString(36), this.size = "md";
|
|
567
|
-
}
|
|
565
|
+
var $ = class extends e() {
|
|
568
566
|
static {
|
|
569
567
|
this.shadowRootOptions = {
|
|
570
568
|
...c.shadowRootOptions,
|
|
@@ -574,6 +572,12 @@ var $ = class extends t() {
|
|
|
574
572
|
static {
|
|
575
573
|
this.formAssociated = !0;
|
|
576
574
|
}
|
|
575
|
+
constructor() {
|
|
576
|
+
super(), this.value = !1, this.disabled = !1, this.required = !1, this.name = "checkbox-" + Math.random().toString(36), this.id = "checkbox-" + Math.random().toString(36), this.size = "md";
|
|
577
|
+
try {
|
|
578
|
+
this.internals = this.attachInternals();
|
|
579
|
+
} catch {}
|
|
580
|
+
}
|
|
577
581
|
get form() {
|
|
578
582
|
return this.internals?.form;
|
|
579
583
|
}
|
|
@@ -584,7 +588,22 @@ var $ = class extends t() {
|
|
|
584
588
|
this.value = e;
|
|
585
589
|
}
|
|
586
590
|
connectedCallback() {
|
|
587
|
-
super.connectedCallback();
|
|
591
|
+
super.connectedCallback(), this._syncFormValue();
|
|
592
|
+
}
|
|
593
|
+
updated(e) {
|
|
594
|
+
super.updated?.(e), (e.has("value") || e.has("name")) && this._syncFormValue(), (e.has("required") || e.has("value")) && this._syncValidity(), e.has("value") && (this.value ? this.internals?.states.add("checked") : this.internals?.states.delete("checked"));
|
|
595
|
+
}
|
|
596
|
+
_syncFormValue() {
|
|
597
|
+
this.internals?.setFormValue(this.value ? this.getAttribute("true-value") ?? "on" : null);
|
|
598
|
+
}
|
|
599
|
+
_syncValidity() {
|
|
600
|
+
this.required && !this.value ? this.internals?.setValidity({ valueMissing: !0 }, "Please check this box if you want to proceed.") : this.internals?.setValidity({});
|
|
601
|
+
}
|
|
602
|
+
checkValidity() {
|
|
603
|
+
return this.internals?.checkValidity() ?? !0;
|
|
604
|
+
}
|
|
605
|
+
reportValidity() {
|
|
606
|
+
return this.internals?.reportValidity() ?? !0;
|
|
588
607
|
}
|
|
589
608
|
render() {
|
|
590
609
|
return u`
|
|
@@ -603,8 +622,8 @@ var $ = class extends t() {
|
|
|
603
622
|
`;
|
|
604
623
|
}
|
|
605
624
|
};
|
|
606
|
-
|
|
625
|
+
t([a({
|
|
607
626
|
type: Boolean,
|
|
608
627
|
reflect: !0
|
|
609
|
-
})], $.prototype, "value", void 0),
|
|
628
|
+
})], $.prototype, "value", void 0), t([a({ type: Boolean })], $.prototype, "checked", null), t([a({ type: Boolean })], $.prototype, "disabled", void 0), t([a({ type: Boolean })], $.prototype, "required", void 0), t([a({ type: String })], $.prototype, "name", void 0), t([a({ type: String })], $.prototype, "id", void 0), t([a({ type: String })], $.prototype, "label", void 0), t([a({ type: String })], $.prototype, "size", void 0), $ = t([i("schmancy-checkbox")], $);
|
|
610
629
|
export { $ as t };
|