@mhmo91/schmancy 0.4.92 → 0.4.94
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/ai/area.md +181 -968
- package/dist/ai/area.md +181 -968
- package/dist/{animated-text-CUFCt7Zg.js → animated-text-BLDqQ33G.js} +3 -3
- package/dist/{animated-text-CUFCt7Zg.js.map → animated-text-BLDqQ33G.js.map} +1 -1
- package/dist/{animated-text-CM1zqBki.cjs → animated-text-CIgDmUF0.cjs} +2 -2
- package/dist/{animated-text-CM1zqBki.cjs.map → animated-text-CIgDmUF0.cjs.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CFREt7Vm.cjs → autocomplete-35wx4zfo.cjs} +6 -6
- package/dist/autocomplete-35wx4zfo.cjs.map +1 -0
- package/dist/{autocomplete-09_SfjsP.js → autocomplete-DMbJLodc.js} +35 -35
- package/dist/autocomplete-DMbJLodc.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-CKp3Ukk4.js → avatar-BqGZ5lKc.js} +152 -200
- package/dist/avatar-BqGZ5lKc.js.map +1 -0
- package/dist/{avatar-C8PC_n9i.cjs → avatar-UnP-o7T9.cjs} +21 -69
- package/dist/avatar-UnP-o7T9.cjs.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-DDJK4CS4.js → boat-PVy1fXfm.js} +2 -2
- package/dist/{boat-DDJK4CS4.js.map → boat-PVy1fXfm.js.map} +1 -1
- package/dist/{boat-Ddi4PegB.cjs → boat-zVJF22wK.cjs} +2 -2
- package/dist/{boat-Ddi4PegB.cjs.map → boat-zVJF22wK.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-TclkD2h5.cjs → checkbox-BtZqKgPT.cjs} +2 -2
- package/dist/{checkbox-TclkD2h5.cjs.map → checkbox-BtZqKgPT.cjs.map} +1 -1
- package/dist/{checkbox-BU1x0W8U.js → checkbox-DAFDBz7J.js} +2 -2
- package/dist/{checkbox-BU1x0W8U.js.map → checkbox-DAFDBz7J.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DQBHJNSu.cjs → chips-BRigd0oB.cjs} +10 -21
- package/dist/{chips-DQBHJNSu.cjs.map → chips-BRigd0oB.cjs.map} +1 -1
- package/dist/{chips-Bxsoq1vm.js → chips-BnA6mVWq.js} +56 -67
- package/dist/{chips-Bxsoq1vm.js.map → chips-BnA6mVWq.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-C9Imx-RX.cjs → code-preview-BYWzA52m.cjs} +2 -2
- package/dist/{code-preview-C9Imx-RX.cjs.map → code-preview-BYWzA52m.cjs.map} +1 -1
- package/dist/{code-preview-DnUM87ZB.js → code-preview-CUc2NHQu.js} +2 -2
- package/dist/{code-preview-DnUM87ZB.js.map → code-preview-CUc2NHQu.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-DF7MnRi3.js → date-range-DFNdMN6p.js} +4 -4
- package/dist/{date-range-DF7MnRi3.js.map → date-range-DFNdMN6p.js.map} +1 -1
- package/dist/{date-range-D1A1Xrmw.cjs → date-range-DhWbY9Ph.cjs} +2 -2
- package/dist/{date-range-D1A1Xrmw.cjs.map → date-range-DhWbY9Ph.cjs.map} +1 -1
- package/dist/{date-range-inline-CwLJLOe1.cjs → date-range-inline-FiCLIta4.cjs} +2 -2
- package/dist/{date-range-inline-CwLJLOe1.cjs.map → date-range-inline-FiCLIta4.cjs.map} +1 -1
- package/dist/{date-range-inline-Ca4DPfeR.js → date-range-inline-xh0mrWH9.js} +3 -3
- package/dist/{date-range-inline-Ca4DPfeR.js.map → date-range-inline-xh0mrWH9.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-hXu_bFxW.js → delay-BTRy2v5H.js} +2 -2
- package/dist/{delay-hXu_bFxW.js.map → delay-BTRy2v5H.js.map} +1 -1
- package/dist/{delay-DQKt6VVn.cjs → delay-dCLgp1B7.cjs} +2 -2
- package/dist/{delay-DQKt6VVn.cjs.map → delay-dCLgp1B7.cjs.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Ft0ivj0F.cjs → details-Bf0qMDKW.cjs} +2 -2
- package/dist/{details-Ft0ivj0F.cjs.map → details-Bf0qMDKW.cjs.map} +1 -1
- package/dist/{details-Ci0XXz0g.js → details-BsmaD0yr.js} +2 -2
- package/dist/{details-Ci0XXz0g.js.map → details-BsmaD0yr.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-7tFlrTFn.cjs → dialog-content-0w0WQYF3.cjs} +2 -2
- package/dist/{dialog-content-7tFlrTFn.cjs.map → dialog-content-0w0WQYF3.cjs.map} +1 -1
- package/dist/{dialog-content-DXnLwUtv.js → dialog-content-r1Ai3BZj.js} +4 -4
- package/dist/{dialog-content-DXnLwUtv.js.map → dialog-content-r1Ai3BZj.js.map} +1 -1
- package/dist/dialog-service-CgJH8clD.cjs +2 -0
- package/dist/dialog-service-CgJH8clD.cjs.map +1 -0
- package/dist/{dialog-service-DwhuICgc.js → dialog-service-PQ9ssbsY.js} +53 -47
- package/dist/dialog-service-PQ9ssbsY.js.map +1 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +1 -1
- package/dist/divider-BPsLFNzK.js +22 -0
- package/dist/divider-BPsLFNzK.js.map +1 -0
- package/dist/divider-CYPKRC_-.cjs +2 -0
- package/dist/divider-CYPKRC_-.cjs.map +1 -0
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-BCk2WbXc.js → dropdown-content-B51-eGbI.js} +40 -41
- package/dist/dropdown-content-B51-eGbI.js.map +1 -0
- package/dist/{dropdown-content-CXxTjA0j.cjs → dropdown-content-DelDUcfW.cjs} +5 -10
- package/dist/dropdown-content-DelDUcfW.cjs.map +1 -0
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-BWIYYwA8.cjs → email-recipients-BlSATi3L.cjs} +24 -24
- package/dist/email-recipients-BlSATi3L.cjs.map +1 -0
- package/dist/{email-recipients-BT3xPoBN.js → email-recipients-hkvv_vgI.js} +141 -144
- package/dist/email-recipients-hkvv_vgI.js.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-DJEZ1DdQ.js → flex-BDtCUg0s.js} +2 -2
- package/dist/{flex-DJEZ1DdQ.js.map → flex-BDtCUg0s.js.map} +1 -1
- package/dist/{flex-DflXFgVs.cjs → flex-_K-5RVZM.cjs} +2 -2
- package/dist/{flex-DflXFgVs.cjs.map → flex-_K-5RVZM.cjs.map} +1 -1
- package/dist/{form-7OiDtJT4.js → form-BTmhZIB8.js} +11 -23
- package/dist/form-BTmhZIB8.js.map +1 -0
- package/dist/form-jw1NVkyp.cjs +2 -0
- package/dist/form-jw1NVkyp.cjs.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-3i7VOHMH.js → formField.mixin-D_1WwNWJ.js} +2 -2
- package/dist/{formField.mixin-3i7VOHMH.js.map → formField.mixin-D_1WwNWJ.js.map} +1 -1
- package/dist/{formField.mixin-B1vJlhmI.cjs → formField.mixin-HN79lSIE.cjs} +2 -2
- package/dist/{formField.mixin-B1vJlhmI.cjs.map → formField.mixin-HN79lSIE.cjs.map} +1 -1
- package/dist/{icon-BMhWh8Ib.js → icon-Clqcexag.js} +2 -2
- package/dist/{icon-BMhWh8Ib.js.map → icon-Clqcexag.js.map} +1 -1
- package/dist/{icon-button-DOZuY9x8.js → icon-button-Bu_eEqfk.js} +5 -5
- package/dist/icon-button-Bu_eEqfk.js.map +1 -0
- package/dist/{icon-button-CLDy5tUS.cjs → icon-button-M5CqyRR4.cjs} +4 -4
- package/dist/icon-button-M5CqyRR4.cjs.map +1 -0
- package/dist/{icon-TPLdDnCq.cjs → icon-pFAWVSGq.cjs} +2 -2
- package/dist/{icon-TPLdDnCq.cjs.map → icon-pFAWVSGq.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +49 -49
- package/dist/{input-Dre3bMuF.js → input-CFlQ_9Cq.js} +40 -44
- package/dist/input-CFlQ_9Cq.js.map +1 -0
- package/dist/input-CWOVMdSb.cjs +51 -0
- package/dist/input-CWOVMdSb.cjs.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/lazy-DObpkuL6.cjs.map +1 -1
- package/dist/lazy-E2LCDm7n.js.map +1 -1
- package/dist/{list-DZ43cTnR.cjs → list-CDXL73JQ.cjs} +2 -2
- package/dist/{list-DZ43cTnR.cjs.map → list-CDXL73JQ.cjs.map} +1 -1
- package/dist/{list-2mBZmMCP.js → list-rmfIuWZK.js} +2 -2
- package/dist/{list-2mBZmMCP.js.map → list-rmfIuWZK.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-Bj0zv3lK.js → litElement.mixin-Dm9SOPDp.js} +2 -2
- package/dist/{litElement.mixin-Bj0zv3lK.js.map → litElement.mixin-Dm9SOPDp.js.map} +1 -1
- package/dist/{litElement.mixin-CjRG_9tZ.cjs → litElement.mixin-YJ8D9a8Z.cjs} +2 -2
- package/dist/{litElement.mixin-CjRG_9tZ.cjs.map → litElement.mixin-YJ8D9a8Z.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-sSS6ACVH.js → map-BfP3ZVm_.js} +2 -2
- package/dist/{map-sSS6ACVH.js.map → map-BfP3ZVm_.js.map} +1 -1
- package/dist/{map-D69SEPpf.cjs → map-DQwGv46m.cjs} +2 -2
- package/dist/{map-D69SEPpf.cjs.map → map-DQwGv46m.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/media-B28J9yez.js +261 -0
- package/dist/media-B28J9yez.js.map +1 -0
- package/dist/media-DtYChqKs.cjs +177 -0
- package/dist/media-DtYChqKs.cjs.map +1 -0
- package/dist/{menu-CATzB9tA.js → menu-C0iTDVTM.js} +3 -3
- package/dist/{menu-CATzB9tA.js.map → menu-C0iTDVTM.js.map} +1 -1
- package/dist/{menu-BOeTdvk_.cjs → menu-jcodrTEA.cjs} +2 -2
- package/dist/{menu-BOeTdvk_.cjs.map → menu-jcodrTEA.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/{notification-service-DrwmIgoR.js → notification-service-BIH173dS.js} +62 -58
- package/dist/notification-service-BIH173dS.js.map +1 -0
- package/dist/{notification-service-LnNx5EDh.cjs → notification-service-CD-XzDeP.cjs} +7 -7
- package/dist/notification-service-CD-XzDeP.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-C41nYdUf.js → notify-4u_P6A9W.js} +2 -2
- package/dist/{notify-C41nYdUf.js.map → notify-4u_P6A9W.js.map} +1 -1
- package/dist/{notify-DQMcgjgZ.cjs → notify-C95rxXiW.cjs} +2 -2
- package/dist/{notify-DQMcgjgZ.cjs.map → notify-C95rxXiW.cjs.map} +1 -1
- package/dist/{option-DbBr0StZ.js → option-CTkTl7Pz.js} +12 -12
- package/dist/option-CTkTl7Pz.js.map +1 -0
- package/dist/{option-BNKGfKgL.cjs → option-D-Itfwmu.cjs} +5 -5
- package/dist/option-D-Itfwmu.cjs.map +1 -0
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-_jHodv7G.js → payment-card-form-DcipYS1-.js} +3 -3
- package/dist/{payment-card-form-_jHodv7G.js.map → payment-card-form-DcipYS1-.js.map} +1 -1
- package/dist/{payment-card-form-ByWbYHhd.cjs → payment-card-form-HQsOp4z5.cjs} +2 -2
- package/dist/{payment-card-form-ByWbYHhd.cjs.map → payment-card-form-HQsOp4z5.cjs.map} +1 -1
- package/dist/{progress-BY7K7Etz.cjs → progress-B3Q1qs5e.cjs} +2 -2
- package/dist/{progress-BY7K7Etz.cjs.map → progress-B3Q1qs5e.cjs.map} +1 -1
- package/dist/{progress-Cix7Mu1p.js → progress-zOZKeIA7.js} +2 -2
- package/dist/{progress-Cix7Mu1p.js.map → progress-zOZKeIA7.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-BNmjg-i9.js → radio-button-C4TI0v9W.js} +27 -27
- package/dist/radio-button-C4TI0v9W.js.map +1 -0
- package/dist/radio-button-COzEX5Ar.cjs +41 -0
- package/dist/radio-button-COzEX5Ar.cjs.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{ripple-BumgqsDT.js → ripple-Cy-nvO8W.js} +24 -22
- package/dist/ripple-Cy-nvO8W.js.map +1 -0
- package/dist/ripple-DqQrvaTe.cjs +16 -0
- package/dist/ripple-DqQrvaTe.cjs.map +1 -0
- package/dist/route.component-Cr-M16SZ.cjs +12 -0
- package/dist/route.component-Cr-M16SZ.cjs.map +1 -0
- package/dist/route.component-Df4CQy4C.js +320 -0
- package/dist/route.component-Df4CQy4C.js.map +1 -0
- package/dist/{schmancy-steps-container-BUE4fG8_.js → schmancy-steps-container-DC6Ca6-A.js} +2 -2
- package/dist/{schmancy-steps-container-BUE4fG8_.js.map → schmancy-steps-container-DC6Ca6-A.js.map} +1 -1
- package/dist/{schmancy-steps-container-D69TfC2I.cjs → schmancy-steps-container-DfzodwEn.cjs} +2 -2
- package/dist/{schmancy-steps-container-D69TfC2I.cjs.map → schmancy-steps-container-DfzodwEn.cjs.map} +1 -1
- package/dist/{select-Bspcrc-h.js → select-Br2sY6MK.js} +16 -16
- package/dist/select-Br2sY6MK.js.map +1 -0
- package/dist/select-wUk1qE31.cjs +57 -0
- package/dist/select-wUk1qE31.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BxOGSGJ0.js → sheet-BjJdVvvp.js} +3 -3
- package/dist/{sheet-BxOGSGJ0.js.map → sheet-BjJdVvvp.js.map} +1 -1
- package/dist/{sheet-CuE9tUeo.cjs → sheet-D3RmdvbL.cjs} +2 -2
- package/dist/{sheet-CuE9tUeo.cjs.map → sheet-D3RmdvbL.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-ChQVbnYO.js → slider-Dgwlzvr-.js} +3 -3
- package/dist/{slider-ChQVbnYO.js.map → slider-Dgwlzvr-.js.map} +1 -1
- package/dist/{slider-DeKwZONn.cjs → slider-XoN7Z9iO.cjs} +2 -2
- package/dist/{slider-DeKwZONn.cjs.map → slider-XoN7Z9iO.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-C5tMQys5.cjs → spinner-D9l0j12i.cjs} +2 -2
- package/dist/{spinner-C5tMQys5.cjs.map → spinner-D9l0j12i.cjs.map} +1 -1
- package/dist/{spinner-y1dPMTQp.js → spinner-e06PNB2u.js} +2 -2
- package/dist/{spinner-y1dPMTQp.js.map → spinner-e06PNB2u.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-4MzhEaru.cjs → surface-BgLZnRcp.cjs} +2 -2
- package/dist/{surface-4MzhEaru.cjs.map → surface-BgLZnRcp.cjs.map} +1 -1
- package/dist/{surface-BYmdH754.js → surface-trk3Zpii.js} +2 -2
- package/dist/{surface-BYmdH754.js.map → surface-trk3Zpii.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-YBHaxQzQ.js → table-BfFAQg7K.js} +2 -2
- package/dist/{table-YBHaxQzQ.js.map → table-BfFAQg7K.js.map} +1 -1
- package/dist/{table-J5EVvpXy.cjs → table-g0Wsm45r.cjs} +2 -2
- package/dist/{table-J5EVvpXy.cjs.map → table-g0Wsm45r.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-ezB19WI8.js → tabs-compatibility-D1RfuRqZ.js} +2 -2
- package/dist/{tabs-compatibility-ezB19WI8.js.map → tabs-compatibility-D1RfuRqZ.js.map} +1 -1
- package/dist/{tabs-compatibility-JMTsaND_.cjs → tabs-compatibility-FkpvGEG3.cjs} +2 -2
- package/dist/{tabs-compatibility-JMTsaND_.cjs.map → tabs-compatibility-FkpvGEG3.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-CPuO9c5y.js +43 -0
- package/dist/{tailwind.mixin-Cwbr8x57.js.map → tailwind.mixin-CPuO9c5y.js.map} +1 -1
- package/dist/tailwind.mixin-Cb-fyJ_y.cjs +2 -0
- package/dist/{tailwind.mixin-B-VcpMHn.cjs.map → tailwind.mixin-Cb-fyJ_y.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-B3nWhCra.cjs → textarea-DBKIOjBp.cjs} +2 -2
- package/dist/{textarea-B3nWhCra.cjs.map → textarea-DBKIOjBp.cjs.map} +1 -1
- package/dist/{textarea-yn7IFbnu.js → textarea-U-fvfv2M.js} +3 -3
- package/dist/{textarea-yn7IFbnu.js.map → textarea-U-fvfv2M.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-I_c1ZWWV.cjs → theme-button-C-6Y_Mib.cjs} +2 -2
- package/dist/{theme-button-I_c1ZWWV.cjs.map → theme-button-C-6Y_Mib.cjs.map} +1 -1
- package/dist/{theme-button-CGArg1pu.js → theme-button-CnWM9ZCv.js} +2 -2
- package/dist/{theme-button-CGArg1pu.js.map → theme-button-CnWM9ZCv.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.component-B5zp-4OG.js → theme.component-CfLAvCYi.js} +168 -168
- package/dist/{theme.component-B5zp-4OG.js.map → theme.component-CfLAvCYi.js.map} +1 -1
- package/dist/{theme.component-CdSDaeU0.cjs → theme.component-Dko2yi2n.cjs} +3 -3
- package/dist/{theme.component-CdSDaeU0.cjs.map → theme.component-Dko2yi2n.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-CepyC8kw.js → timezone-CXGJk88N.js} +3 -3
- package/dist/{timezone-CepyC8kw.js.map → timezone-CXGJk88N.js.map} +1 -1
- package/dist/{timezone-DRBf5biI.cjs → timezone-Wy7jf5gf.cjs} +2 -2
- package/dist/{timezone-DRBf5biI.cjs.map → timezone-Wy7jf5gf.cjs.map} +1 -1
- package/dist/tooltip-BXCWSU_6.cjs +7 -0
- package/dist/tooltip-BXCWSU_6.cjs.map +1 -0
- package/dist/{tooltip-C6HlAqs2.js → tooltip-CuDCLzkr.js} +55 -55
- package/dist/tooltip-CuDCLzkr.js.map +1 -0
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-CpqWMdfb.cjs → tree-Bux6udiH.cjs} +2 -2
- package/dist/{tree-CpqWMdfb.cjs.map → tree-Bux6udiH.cjs.map} +1 -1
- package/dist/{tree-CxJAr7G3.js → tree-CfcLl-dV.js} +2 -2
- package/dist/{tree-CxJAr7G3.js.map → tree-CfcLl-dV.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-D3QLAVdz.js → typewriter-C63WkKf1.js} +64 -76
- package/dist/typewriter-C63WkKf1.js.map +1 -0
- package/dist/{typewriter-BWg7Otk8.cjs → typewriter-HZThI3m1.cjs} +3 -15
- package/dist/typewriter-HZThI3m1.cjs.map +1 -0
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DGOOlbC1.cjs → typography-DNj4eHeR.cjs} +2 -2
- package/dist/{typography-DGOOlbC1.cjs.map → typography-DNj4eHeR.cjs.map} +1 -1
- package/dist/{typography-C8NCP_rr.js → typography-DRkYb9R0.js} +2 -2
- package/dist/{typography-C8NCP_rr.js.map → typography-DRkYb9R0.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/area/area.component.d.ts +8 -3
- package/types/src/area/area.service.d.ts +1 -0
- package/types/src/area/route.component.d.ts +4 -5
- package/types/src/area/utils.d.ts +2 -1
- package/types/src/card/card.d.ts +56 -3
- package/types/src/directives/ripple.d.ts +2 -1
- package/types/src/dropdown/dropdown-component.d.ts +1 -0
- package/types/src/form/form-v2.d.ts +0 -1
- package/types/src/form/form.d.ts +0 -1
- package/types/src/mailbox/email-editor.d.ts +1 -2
- package/types/src/notification/notification-audio.d.ts +9 -0
- package/types/src/notification/notification-container.d.ts +1 -0
- package/dist/autocomplete-09_SfjsP.js.map +0 -1
- package/dist/autocomplete-CFREt7Vm.cjs.map +0 -1
- package/dist/avatar-C8PC_n9i.cjs.map +0 -1
- package/dist/avatar-CKp3Ukk4.js.map +0 -1
- package/dist/dialog-service-DwhuICgc.js.map +0 -1
- package/dist/dialog-service-juvsgc5X.cjs +0 -2
- package/dist/dialog-service-juvsgc5X.cjs.map +0 -1
- package/dist/divider-BG9uDpUp.js +0 -103
- package/dist/divider-BG9uDpUp.js.map +0 -1
- package/dist/divider-CWnAg2p-.cjs +0 -83
- package/dist/divider-CWnAg2p-.cjs.map +0 -1
- package/dist/dropdown-content-BCk2WbXc.js.map +0 -1
- package/dist/dropdown-content-CXxTjA0j.cjs.map +0 -1
- package/dist/email-recipients-BT3xPoBN.js.map +0 -1
- package/dist/email-recipients-BWIYYwA8.cjs.map +0 -1
- package/dist/form-7OiDtJT4.js.map +0 -1
- package/dist/form-nHwPpyhJ.cjs +0 -14
- package/dist/form-nHwPpyhJ.cjs.map +0 -1
- package/dist/icon-button-CLDy5tUS.cjs.map +0 -1
- package/dist/icon-button-DOZuY9x8.js.map +0 -1
- package/dist/input-CqLneJhz.cjs +0 -51
- package/dist/input-CqLneJhz.cjs.map +0 -1
- package/dist/input-Dre3bMuF.js.map +0 -1
- package/dist/media-B-VIbSH_.js +0 -151
- package/dist/media-B-VIbSH_.js.map +0 -1
- package/dist/media-Cew1Mxkj.cjs +0 -100
- package/dist/media-Cew1Mxkj.cjs.map +0 -1
- package/dist/notification-service-DrwmIgoR.js.map +0 -1
- package/dist/notification-service-LnNx5EDh.cjs.map +0 -1
- package/dist/option-BNKGfKgL.cjs.map +0 -1
- package/dist/option-DbBr0StZ.js.map +0 -1
- package/dist/radio-button-BNmjg-i9.js.map +0 -1
- package/dist/radio-button-CYq6qTSb.cjs +0 -41
- package/dist/radio-button-CYq6qTSb.cjs.map +0 -1
- package/dist/ripple-BumgqsDT.js.map +0 -1
- package/dist/ripple-C2BHbhcS.cjs +0 -16
- package/dist/ripple-C2BHbhcS.cjs.map +0 -1
- package/dist/route.component-CzCd2fMa.cjs +0 -12
- package/dist/route.component-CzCd2fMa.cjs.map +0 -1
- package/dist/route.component-Q3rCkryr.js +0 -321
- package/dist/route.component-Q3rCkryr.js.map +0 -1
- package/dist/select-B-yc3JB7.cjs +0 -57
- package/dist/select-B-yc3JB7.cjs.map +0 -1
- package/dist/select-Bspcrc-h.js.map +0 -1
- package/dist/tailwind.mixin-B-VcpMHn.cjs +0 -2
- package/dist/tailwind.mixin-Cwbr8x57.js +0 -43
- package/dist/tooltip-C6HlAqs2.js.map +0 -1
- package/dist/tooltip-CCX8PidC.cjs +0 -7
- package/dist/tooltip-CCX8PidC.cjs.map +0 -1
- package/dist/typewriter-BWg7Otk8.cjs.map +0 -1
- package/dist/typewriter-D3QLAVdz.js.map +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";const l=require("lit"),n=require("lit/decorators.js"),o=require("lit/directives/if-defined.js"),d=require("lit/directives/ref.js"),h=require("lit/directives/when.js"),i=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const m=require("./formField.mixin-HN79lSIE.cjs");require("./tailwind.mixin-Cb-fyJ_y.cjs");var y=Object.defineProperty,f=Object.getOwnPropertyDescriptor,a=(t,e,s,r)=>{for(var u,p=r>1?void 0:r?f(e,s):e,c=t.length-1;c>=0;c--)(u=t[c])&&(p=(r?u(e,s,p):u(p))||p);return r&&p&&y(e,s,p),p};exports.SchmancyInput=class extends m.SchmancyFormField("/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */:host{width:100%;min-width:calc(var(--spacing,.25rem)*0);box-sizing:border-box;max-width:100%;display:block}.date-input-container{width:100%;min-width:0;width:100%!important;max-width:100%!important}input{appearance:none;border-radius:8px;width:-webkit-fill-available;font-size:16px}input[type=number]::-webkit-inner-spin-button{appearance:none;margin:calc(var(--spacing,.25rem)*0)}input[type=number]::-webkit-outer-spin-button{appearance:none;margin:calc(var(--spacing,.25rem)*0)}input[type=number]{appearance:textfield}input:-webkit-autofill{animation-name:onAutoFillStart;-webkit-box-shadow:0 0 0 30px var(--schmancy-sys-color-surface-highest)inset!important;-webkit-text-fill-color:var(--schmancy-sys-color-surface-on)!important}input:autofill{background-color:var(--schmancy-sys-color-surface-highest)!important;color:var(--schmancy-sys-color-surface-on)!important}input[type=date],input[type=datetime-local],input[type=time],input[type=month],input[type=week]{appearance:none;width:100%;line-height:inherit;border-radius:8px;min-width:100%;max-width:100%;margin:0;display:block;overflow:hidden;border-radius:8px!important;width:100%!important}input::-webkit-datetime-edit{align-items:center;width:100%;height:100%;margin:0;padding:0;display:flex}input::-webkit-datetime-edit-fields-wrapper{align-items:center;width:100%;height:100%;margin:0;padding:0;display:flex}input::-webkit-datetime-edit{flex:1;width:100%}input::-webkit-datetime-edit-fields-wrapper{flex:1;justify-content:space-between;width:100%}input::-webkit-datetime-edit-text{align-items:center;display:flex}input::-webkit-datetime-edit-day-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-month-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-year-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-hour-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-minute-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-second-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-millisecond-field{flex-shrink:0;padding:0 2px}input::-webkit-datetime-edit-meridiem-field{flex-shrink:0;padding:0 2px}input[type=date]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}input[type=datetime-local]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}input[type=time]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}input[type=month]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}input[type=week]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}@-moz-document url-prefix(){input[type=date],input[type=datetime-local],input[type=time]{min-height:inherit}}@supports (-webkit-touch-callout:none){input[type=date],input[type=datetime-local],input[type=time],input[type=month],input[type=week]{appearance:none;border-radius:0;width:-webkit-fill-available!important;width:fill-available!important;padding-left:12px!important;padding-right:12px!important}input::-webkit-datetime-edit{width:100%!important;padding-left:0!important;padding-right:0!important}input::-webkit-datetime-edit-fields-wrapper{width:100%!important;margin:0!important;padding:0!important}}"){constructor(){super(...arguments),this.value="",this.type="text",this.placeholder="",this.clickable=!1,this.spellcheck=!1,this.align="left",this.autofocus=!1,this.autocomplete="on",this.tabIndex=0,this.size="md",this.validateOn="touched",this.inputRef=d.createRef(),this.isAutofilled=!1,this.touched=!1,this.dirty=!1,this.submitted=!1,this.defaultValue=""}willUpdate(t){this.id||(this.id="sch-input-"+exports.SchmancyInput._idCounter++),super.willUpdate(t)}updated(t){super.updated(t),t.has("value")&&(this.value!==this.defaultValue&&(this.dirty=!0),this.validateInput()),!this.hasUpdated&&t.has("value")&&(this.defaultValue=this.value)}connectedCallback(){super.connectedCallback(),this.defaultValue=this.value,this.setupFormIntegration(),this.setupExternalLabelAssociation()}setupFormIntegration(){this.form&&(this.formResetObserver=new MutationObserver(t=>{for(const e of t)e.type==="attributes"&&e.attributeName==="reset"&&this.resetToDefault()}),this.formResetObserver.observe(this.form,{attributes:!0,childList:!1,subtree:!1}),i.fromEvent(this.form,"reset").pipe(i.takeUntil(this.disconnecting)).subscribe(()=>{this.resetToDefault()}),i.fromEvent(this.form,"submit").pipe(i.takeUntil(this.disconnecting)).subscribe(()=>{this.submitted=!0,this.validateInput(!0)}))}setupExternalLabelAssociation(){if(this.id){const t=()=>{document.querySelectorAll(`label[for="${this.id}"]`).forEach(e=>{i.fromEvent(e,"click").pipe(i.takeUntil(this.disconnecting)).subscribe(()=>{this.focus()})})};document.readyState==="complete"?t():i.fromEvent(document,"DOMContentLoaded").pipe(i.takeUntil(this.disconnecting)).subscribe(t)}}disconnectedCallback(){super.disconnectedCallback(),this.formResetObserver&&this.formResetObserver.disconnect()}resetToDefault(){this.value=this.defaultValue,this.touched=!1,this.dirty=!1,this.submitted=!1,this.error=!1,this.validationMessage="",this.dispatchEvent(new CustomEvent("reset",{bubbles:!0}))}shouldShowValidation(t=!1){if(t)return!0;switch(this.validateOn){case"always":return!0;case"touched":default:return this.touched;case"dirty":return this.dirty;case"submitted":return this.submitted}}validateInput(t=!1){if(this.disabled)return;const e=this.shouldShowValidation(t),s=this.inputElement?.validity??{customError:!1,valid:!0},r=!s.valid&&!s.customError;e&&r?(this.error=!0,this.validationMessage=this.inputElement?.validationMessage||""):s.valid?(this.error=!1,s.customError||(this.validationMessage="")):e||(this.error=!1)}checkValidity(){const t=this.inputRef.value?.checkValidity()??!0,e=super.checkValidity();return t&&e}reportValidity(){this.touched=!0,this.submitted=!0;const t=this.inputRef.value?.reportValidity()??!0;this.validateInput(!0);const e=super.reportValidity();return t&&e}setCustomValidity(t){this.inputRef.value&&this.inputRef.value.setCustomValidity(t),super.setCustomValidity(t),this.error=t!==""&&this.shouldShowValidation()}firstUpdated(){this.autofocus&&setTimeout(()=>{this.focus()},0),this.setupInputEvents(),this.setupFocusBlurEvents(),this.setupAutofillDetection(),this.setupEnterKeyEvents()}setupInputEvents(){i.fromEvent(this.inputElement,"input").pipe(i.map(t=>{const e=t;return{value:t.target.value,inputType:e.inputType,data:e.data,isComposing:e.isComposing,originalEvent:t}}),i.takeUntil(this.disconnecting)).subscribe(t=>{this.value=t.value,this.dirty=this.value!==this.defaultValue;const e=new CustomEvent("input",{detail:{value:t.value},bubbles:!0,composed:!0});Object.defineProperties(e,{inputType:{value:t.inputType},data:{value:t.data},isComposing:{value:t.isComposing}}),this.dispatchEvent(e),this.validateInput()}),i.fromEvent(this.inputElement,"change").pipe(i.map(t=>t.target.value),i.distinctUntilChanged(),i.takeUntil(this.disconnecting)).subscribe(t=>{this.value=t,this.dirty=this.value!==this.defaultValue,this.emitChange({value:t}),this.validateInput()})}setupFocusBlurEvents(){i.fromEvent(this.inputElement,"focus").pipe(i.takeUntil(this.disconnecting)).subscribe(t=>{const e=new CustomEvent("focus",{bubbles:t.bubbles,cancelable:t.cancelable,composed:t.composed});Object.defineProperties(e,{relatedTarget:{value:t.relatedTarget}}),this.dispatchEvent(e)}),i.fromEvent(this.inputElement,"blur").pipe(i.takeUntil(this.disconnecting)).subscribe(t=>{this.touched=!0,this.disabled||this.validateInput();const e=new CustomEvent("blur",{bubbles:t.bubbles,cancelable:t.cancelable,composed:t.composed});Object.defineProperties(e,{relatedTarget:{value:t.relatedTarget}}),this.dispatchEvent(e)})}setupAutofillDetection(){i.fromEvent(this.inputElement,"animationstart").pipe(i.filter(t=>t.animationName==="onAutoFillStart"),i.takeUntil(this.disconnecting)).subscribe(t=>{const{value:e}=t.target;this.value=e,this.isAutofilled=!0,this.dirty=this.value!==this.defaultValue,this.dispatchEvent(new CustomEvent("autofill",{detail:{value:e},bubbles:!0,composed:!0})),this.emitChange({value:e})}),i.fromEvent(this.inputElement,"animationstart").pipe(i.filter(t=>t.animationName==="onAutoFillCancel"),i.takeUntil(this.disconnecting)).subscribe(()=>{this.isAutofilled=!1})}setupEnterKeyEvents(){i.fromEvent(this.inputElement,"keydown").pipe(i.filter(t=>t.key==="Enter"),i.takeUntil(this.disconnecting)).subscribe(t=>{const{value:e}=t.target;this.value!==e&&(this.value=e,this.dirty=this.value!==this.defaultValue),this.inputElement.blur();const s=new CustomEvent("enter",{detail:{value:this.value},bubbles:!0,composed:!0});Object.defineProperties(s,{key:{value:"Enter"},code:{value:"Enter"},keyCode:{value:13},which:{value:13}}),this.dispatchEvent(s)})}select(){return this.inputRef.value?.select()}getValidity(){return this.inputRef.value?.validity}setSelectionRange(t,e,s){this.inputRef.value?.setSelectionRange(t,e,s)}get selectionStart(){return this.inputRef.value?.selectionStart??null}get selectionEnd(){return this.inputRef.value?.selectionEnd??null}get selectionDirection(){return this.inputRef.value?.selectionDirection??null}setRangeText(t,e,s,r){e!==void 0&&s!==void 0?this.inputRef.value?.setRangeText(t,e,s,r):this.inputRef.value?.setRangeText(t)}focus(t){this.inputRef.value?.focus(t),this.dispatchEvent(new Event("focus"))}click(){this.inputRef.value?.click(),this.dispatchEvent(new Event("click"))}blur(){this.inputRef.value?.blur(),this.dispatchEvent(new Event("blur"))}render(){const{height:t,padding:e,fontSize:s}=(()=>{switch(this.size){case"sm":return{height:"40px",padding:"0 8px",fontSize:"0.875rem"};case"lg":return{height:"60px",padding:"0 20px",fontSize:"1.125rem"};default:return{height:"50px",padding:"0 16px",fontSize:"1rem"}}})(),r=["date","datetime-local","time","month","week"].includes(this.type),u={"block w-full min-w-0 rounded-[8px] border-0 bg-surface-highest text-surface-on":!0,"outline-secondary-default focus:outline-1":!0,"disabled:opacity-40 disabled:cursor-not-allowed":!0,"placeholder:text-muted":!0,"ring-0 ring-inset focus:ring-1 focus:ring-inset":!0,"ring-secondary-default ring-outline focus:ring-secondary-default":!this.error,"ring-error-default focus:ring-error-default":this.error,"caret-transparent focus:outline-hidden cursor-pointer select-none":this.readonly,"cursor-pointer":this.clickable,"text-left":this.align==="left"||r,"text-center":this.align==="center"&&!r,"text-right":this.align==="right"&&!r,autofilled:this.isAutofilled},p={"block mb-1 font-medium":!0,"opacity-40":this.disabled,"text-sm":this.size==="sm","text-base":this.size==="md","text-lg":this.size==="lg","text-primary-default":!this.error,"text-error-default":this.error},c={height:t,padding:e,fontSize:s,lineHeight:t};return l.html`
|
|
2
|
+
<div class="w-full min-w-0 ${r?"date-input-container":""}">
|
|
3
|
+
${h.when(this.label,()=>l.html`
|
|
4
|
+
<label
|
|
5
|
+
for=${this.id}
|
|
6
|
+
class=${this.classMap(p)}
|
|
7
|
+
>
|
|
8
|
+
${this.label}
|
|
9
|
+
</label>
|
|
10
|
+
`)}
|
|
11
|
+
|
|
12
|
+
<input
|
|
13
|
+
${d.ref(this.inputRef)}
|
|
14
|
+
id=${this.id}
|
|
15
|
+
name=${this.name}
|
|
16
|
+
class=${this.classMap(u)}
|
|
17
|
+
style=${this.styleMap(c)}
|
|
18
|
+
.value=${this.value}
|
|
19
|
+
.type=${this.type}
|
|
20
|
+
.autocomplete=${this.autocomplete}
|
|
21
|
+
.spellcheck=${this.spellcheck}
|
|
22
|
+
placeholder=${this.placeholder}
|
|
23
|
+
inputmode=${o.ifDefined(this.inputmode)}
|
|
24
|
+
pattern=${o.ifDefined(this.pattern)}
|
|
25
|
+
step=${o.ifDefined(this.step)}
|
|
26
|
+
minlength=${o.ifDefined(this.minlength)}
|
|
27
|
+
maxlength=${o.ifDefined(this.maxlength)}
|
|
28
|
+
min=${o.ifDefined(this.min)}
|
|
29
|
+
max=${o.ifDefined(this.max)}
|
|
30
|
+
list=${o.ifDefined(this.list)}
|
|
31
|
+
?required=${this.required}
|
|
32
|
+
?disabled=${this.disabled}
|
|
33
|
+
?readonly=${this.readonly}
|
|
34
|
+
aria-invalid=${this.error?"true":"false"}
|
|
35
|
+
aria-required=${this.required?"true":"false"}
|
|
36
|
+
aria-labelledby=${this.label?`label-${this.id}`:l.nothing}
|
|
37
|
+
aria-describedby=${this.hint||this.validationMessage?`hint-${this.id}`:l.nothing}
|
|
38
|
+
aria-label=${o.ifDefined(this.label?void 0:this.placeholder||"Input")}
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
${h.when(this.hint||this.error&&this.validationMessage,()=>l.html`
|
|
42
|
+
<div
|
|
43
|
+
id="hint-${this.id}"
|
|
44
|
+
class="mt-1 text-sm ${this.error?"text-error-default":"text-surface-onVariant"}"
|
|
45
|
+
>
|
|
46
|
+
${this.error&&this.validationMessage?this.validationMessage:this.hint}
|
|
47
|
+
</div>
|
|
48
|
+
`)}
|
|
49
|
+
</div>
|
|
50
|
+
`}},exports.SchmancyInput._idCounter=0,exports.SchmancyInput.shadowRootOptions={...l.LitElement.shadowRootOptions,delegatesFocus:!0},a([n.property({type:String,reflect:!0})],exports.SchmancyInput.prototype,"value",2),a([n.property({reflect:!0})],exports.SchmancyInput.prototype,"type",2),a([n.property()],exports.SchmancyInput.prototype,"placeholder",2),a([n.property({type:String,reflect:!0})],exports.SchmancyInput.prototype,"pattern",2),a([n.property({type:Boolean,reflect:!0})],exports.SchmancyInput.prototype,"clickable",2),a([n.property({type:Boolean,reflect:!0})],exports.SchmancyInput.prototype,"spellcheck",2),a([n.property({type:String,reflect:!0})],exports.SchmancyInput.prototype,"align",2),a([n.property()],exports.SchmancyInput.prototype,"inputmode",2),a([n.property({type:Number,reflect:!0})],exports.SchmancyInput.prototype,"minlength",2),a([n.property({type:Number})],exports.SchmancyInput.prototype,"maxlength",2),a([n.property()],exports.SchmancyInput.prototype,"min",2),a([n.property()],exports.SchmancyInput.prototype,"max",2),a([n.property({type:Number,reflect:!0})],exports.SchmancyInput.prototype,"step",2),a([n.property({type:Boolean})],exports.SchmancyInput.prototype,"autofocus",2),a([n.property({type:String,reflect:!0})],exports.SchmancyInput.prototype,"autocomplete",2),a([n.property({type:Number,reflect:!0})],exports.SchmancyInput.prototype,"tabIndex",2),a([n.property({type:String,reflect:!0})],exports.SchmancyInput.prototype,"size",2),a([n.property({type:String})],exports.SchmancyInput.prototype,"validateOn",2),a([n.property({type:String})],exports.SchmancyInput.prototype,"list",2),a([n.query("input")],exports.SchmancyInput.prototype,"inputElement",2),a([n.state()],exports.SchmancyInput.prototype,"isAutofilled",2),a([n.state()],exports.SchmancyInput.prototype,"touched",2),a([n.state()],exports.SchmancyInput.prototype,"dirty",2),a([n.state()],exports.SchmancyInput.prototype,"submitted",2),a([n.state()],exports.SchmancyInput.prototype,"defaultValue",2),exports.SchmancyInput=a([n.customElement("schmancy-input")],exports.SchmancyInput),exports.SchmancyInputCompat=class extends exports.SchmancyInput{},exports.SchmancyInputCompat=a([n.customElement("sch-input")],exports.SchmancyInputCompat);
|
|
51
|
+
//# sourceMappingURL=input-CWOVMdSb.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-CWOVMdSb.cjs","sources":["../src/input/input.ts"],"sourcesContent":["import { html, LitElement, nothing, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map, takeUntil } from 'rxjs'\n\nimport { SchmancyFormField } from '@mixins/index'\n\n// Import styles\nimport style from './input.scss?inline'\n\n// If you want to be form-associated, define the type on `ElementInternals`.\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-input': SchmancyInput\n\t\t'sch-input': SchmancyInput\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\n/**\n * Custom events the component may emit:\n * - 'input': on every keystroke\n * - 'change': on native blur/change\n * - 'enter': specifically when user presses Enter\n */\nexport type SchmancyInputInputEvent = CustomEvent<EventDetails>\nexport type SchmancyInputChangeEvent = CustomEvent<EventDetails>\nexport type SchmancyInputEnterEvent = CustomEvent<EventDetails>\n\n/**\n * Size variants for the input.\n * - sm: Small, compact input (40px height)\n * - md: Medium input (50px height, default)\n * - lg: Large, spacious input (60px height)\n */\nexport type InputSize = 'sm' | 'md' | 'lg'\n\n/**\n * Enhanced version of the SchmancyInput component with improved form integration\n * and compatibility with legacy API.\n *\n * This component uses the native form association API and maintains parity with\n * native input behaviors while providing a stylish, accessible interface.\n * \n * @prop {string} label - Label text for the form field (inherited from FormFieldMixin)\n * @prop {boolean} required - Whether the field is required (inherited from FormFieldMixin)\n * @prop {boolean} disabled - Whether the field is disabled (inherited from FormFieldMixin)\n * @prop {boolean} readonly - Whether the field is read-only (inherited from FormFieldMixin)\n * @prop {boolean} error - Whether the field is in an error state (inherited from FormFieldMixin)\n * @prop {string} validationMessage - The validation message to display (inherited from FormFieldMixin)\n * @prop {string} hint - Optional hint text to display below the field (inherited from FormFieldMixin)\n */\n@customElement('schmancy-input')\nexport default class SchmancyInput extends SchmancyFormField(style) {\n\t// ----------------------------\n\t// A) Public properties\n\t// ----------------------------\n\n\t/** Auto-incrementing counter for generating unique IDs */\n\tstatic _idCounter = 0\n\n\t/** Override value to be string only for input element */\n\t@property({ type: String, reflect: true })\n\tpublic override value = ''\n\n\n\t/**\n\t * The type of input. (e.g. 'text', 'password', 'email', etc.)\n\t */\n\t@property({ reflect: true })\n\tpublic type: HTMLInputElement['type'] = 'text'\n\n\n\t@property()\n\tpublic placeholder = ''\n\n\n\t/** Pattern validation attribute. */\n\t@property({ type: String, reflect: true })\n\tpublic pattern?: string\n\n\n\t/** If true, we visually show a pointer cursor even if readOnly. */\n\t@property({ type: Boolean, reflect: true }) public clickable = false\n\n\t/** Whether browser spellcheck is enabled. */\n\t@property({ type: Boolean, reflect: true })\n\tpublic spellcheck = false\n\n\t/**\n\t * Text alignment within the input.\n\t * - 'left' | 'center' | 'right'\n\t */\n\t@property({ type: String, reflect: true })\n\tpublic align: 'left' | 'center' | 'right' = 'left'\n\n\t/** inputmode attribute (affects on-screen keyboards in mobile). */\n\t@property()\n\tpublic inputmode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n\n\t@property({ type: Number, reflect: true })\n\tpublic minlength?: number\n\n\t@property({ type: Number })\n\tpublic maxlength?: number\n\n\t@property()\n\tpublic min?: string\n\n\t@property()\n\tpublic max?: string\n\n\t@property({ type: Number, reflect: true })\n\tpublic step?: number\n\n\t/** If true, auto-focus this input on first render. */\n\t@property({ type: Boolean })\n\tpublic autofocus = false\n\n\t/** Autocomplete/autofill hints. */\n\t@property({ type: String, reflect: true })\n\tpublic autocomplete: AutoFill = 'on'\n\n\t/**\n\t * tabIndex for focusing by tab key. Typically 0 or -1.\n\t */\n\t@property({ type: Number, reflect: true })\n\tpublic override tabIndex = 0\n\n\n\t/**\n\t * The size of the input.\n\t * - 'sm': Small, compact size\n\t * - 'md': Medium size (default)\n\t * - 'lg': Large size\n\t */\n\t@property({ type: String, reflect: true })\n\tpublic size: InputSize = 'md'\n\n\t/**\n\t * Controls when validation should show.\n\t * - 'always' - Always show validation\n\t * - 'touched' - Only show after field has been focused and then blurred\n\t * - 'dirty' - Only show after value has changed\n\t * - 'submitted' - Only show after form submission\n\t */\n\t@property({ type: String })\n\tpublic validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\n\t/**\n\t * For datalist support\n\t */\n\t@property({ type: String })\n\tpublic list?: string\n\n\n\t// ----------------------------\n\t// B) Queries & Refs\n\t// ----------------------------\n\t@query('input') private inputElement!: HTMLInputElement\n\tprivate inputRef = createRef<HTMLInputElement>()\n\n\t// ----------------------------\n\t// C) Internal States\n\t// ----------------------------\n\n\t/**\n\t * For integration with browser's autofill support\n\t */\n\t@state()\n\tprivate isAutofilled = false\n\n\t/**\n\t * Track user interaction state for validation\n\t */\n\t@state()\n\tprivate touched = false\n\n\t@state()\n\tprivate dirty = false\n\n\t@state()\n\tprivate submitted = false\n\n\t/**\n\t * Store the default value for reset behavior\n\t */\n\t@state()\n\tprivate defaultValue = ''\n\n\t// ----------------------------\n\t// D) Form-associated logic\n\t// ----------------------------\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true, // so focus() goes to <input>\n\t}\n\n\tprivate formResetObserver?: MutationObserver\n\n\t/**\n\t * If user did not provide an ID, auto-generate one so <label for=\"...\">\n\t * and various aria-* attributes can reference it.\n\t */\n\tprotected override willUpdate(changedProps: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n\t\tif (!this.id) {\n\t\t\tthis.id = `sch-input-${SchmancyInput._idCounter++}`\n\t\t}\n\t\tsuper.willUpdate(changedProps)\n\t}\n\n\n\tprotected override updated(changedProps: Map<string, unknown>) {\n\t\tsuper.updated(changedProps)\n\n\t\t// Handle value changes\n\t\tif (changedProps.has('value')) {\n\t\t\t// If value changes from original default, mark as dirty\n\t\t\tif (this.value !== this.defaultValue) {\n\t\t\t\tthis.dirty = true\n\t\t\t}\n\n\t\t\t// Update validation state when value changes\n\t\t\tthis.validateInput()\n\t\t}\n\n\t\t// Store default value if this is the first update\n\t\tif (!this.hasUpdated && changedProps.has('value')) {\n\t\t\tthis.defaultValue = this.value\n\t\t}\n\t}\n\n\t/**\n\t * Connect to the closest form element and set up form integration\n\t */\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Store initial default value for form reset\n\t\tthis.defaultValue = this.value\n\n\t\t// Set up form integration\n\t\tthis.setupFormIntegration()\n\n\t\t// Setup for external label association\n\t\tthis.setupExternalLabelAssociation()\n\t}\n\n\t/**\n\t * Set up form integration with ElementInternals\n\t */\n\tprivate setupFormIntegration() {\n\t\tif (this.form) {\n\t\t\t// Listen for form reset events\n\t\t\tthis.formResetObserver = new MutationObserver(mutations => {\n\t\t\t\tfor (const mutation of mutations) {\n\t\t\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'reset') {\n\t\t\t\t\t\tthis.resetToDefault()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// Observe the form for reset events\n\t\t\tthis.formResetObserver.observe(this.form, {\n\t\t\t\tattributes: true,\n\t\t\t\tchildList: false,\n\t\t\t\tsubtree: false,\n\t\t\t})\n\n\t\t\t// Use RxJS for form reset events\n\t\t\tfromEvent(this.form, 'reset')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis.resetToDefault()\n\t\t\t\t})\n\n\t\t\t// Use RxJS for form submit events to mark field as submitted\n\t\t\tfromEvent(this.form, 'submit')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis.submitted = true\n\t\t\t\t\t// Validate on form submission\n\t\t\t\t\tthis.validateInput(true)\n\t\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Set up external label association for native HTML label support\n\t */\n\tprivate setupExternalLabelAssociation() {\n\t\tif (this.id) {\n\t\t\tconst setupLabelClickListener = () => {\n\t\t\t\tconst labels = document.querySelectorAll(`label[for=\"${this.id}\"]`)\n\t\t\t\tlabels.forEach(label => {\n\t\t\t\t\t// Use RxJS for label click events\n\t\t\t\t\tfromEvent(label, 'click')\n\t\t\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\tthis.focus()\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Initialize after DOM is ready\n\t\t\tif (document.readyState === 'complete') {\n\t\t\t\tsetupLabelClickListener()\n\t\t\t} else {\n\t\t\t\t// Use RxJS for DOMContentLoaded event\n\t\t\t\tfromEvent(document, 'DOMContentLoaded')\n\t\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t\t.subscribe(setupLabelClickListener)\n\t\t\t}\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\n\t\t// Clean up the form observer\n\t\tif (this.formResetObserver) {\n\t\t\tthis.formResetObserver.disconnect()\n\t\t}\n\n\t\t// Note: RxJS subscriptions are automatically cleaned up via takeUntil(this.disconnecting)\n\t\t// No manual removeEventListener calls needed for RxJS-managed events\n\t}\n\n\t/**\n\t * Reset the input to its default state\n\t */\n\tprivate resetToDefault() {\n\t\tthis.value = this.defaultValue\n\t\tthis.touched = false\n\t\tthis.dirty = false\n\t\tthis.submitted = false\n\t\tthis.error = false\n\t\tthis.validationMessage = ''\n\t\tthis.dispatchEvent(new CustomEvent('reset', { bubbles: true }))\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this.touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this.dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this.submitted\n\t\t\tdefault:\n\t\t\t\treturn this.touched\n\t\t}\n\t}\n\n\n\t/**\n\t * Validate input based on required, pattern, etc.\n\t * This mimics native validation behavior\n\t */\n\tprivate validateInput(forceValidation = false) {\n\t\t// Skip validation for disabled inputs\n\t\tif (this.disabled) return\n\n\t\t// Only show validation errors if we should based on the validation strategy\n\t\tconst shouldValidate = this.shouldShowValidation(forceValidation)\n\n\t\t// Get validity state from internal input if available\n\t\tconst validity: ValidityState = this.inputElement?.validity ?? {\n\t\t\tbadInput: false,\n\t\t\tcustomError: false,\n\t\t\tpatternMismatch: false,\n\t\t\trangeOverflow: false,\n\t\t\trangeUnderflow: false,\n\t\t\tstepMismatch: false,\n\t\t\ttooLong: false,\n\t\t\ttooShort: false,\n\t\t\ttypeMismatch: false,\n\t\t\tvalid: true,\n\t\t\tvalueMissing: false,\n\t\t}\n\n\t\t// Check if the input has an actual validation error (not a custom error)\n\t\tconst hasError = !validity.valid && !validity.customError\n\n\t\tif (shouldValidate && hasError) {\n\t\t\t// There's an error and we should show it\n\t\t\tthis.error = true\n\t\t\tthis.validationMessage = this.inputElement?.validationMessage || ''\n\t\t} else if (validity.valid) {\n\t\t\t// Input is valid, so clear the error state\n\t\t\tthis.error = false\n\n\t\t\t// Only clear validation message if there's no custom error\n\t\t\tif (!validity.customError) {\n\t\t\t\tthis.validationMessage = ''\n\t\t\t}\n\t\t} else if (!shouldValidate) {\n\t\t\t// We shouldn't show validation yet, so clear visual error state\n\t\t\tthis.error = false\n\t\t}\n\n\t\t// The mixin will handle updating internals based on error state\n\t}\n\n\t/**\n\t * Check validity without showing validation UI\n\t */\n\tpublic override checkValidity() {\n\t\t// Check internal input first\n\t\tconst inputValid = this.inputRef.value?.checkValidity() ?? true\n\n\t\t// Call parent implementation for basic validation\n\t\tconst parentValid = super.checkValidity()\n\n\t\treturn inputValid && parentValid\n\t}\n\n\t/**\n\t * Show validation UI and check validity\n\t */\n\tpublic override reportValidity() {\n\t\t// Mark as touched and submitted to show validation\n\t\tthis.touched = true\n\t\tthis.submitted = true\n\n\t\t// First check using native input\n\t\tconst inputValid = this.inputRef.value?.reportValidity() ?? true\n\n\t\t// Update our component's validation state with force=true\n\t\tthis.validateInput(true)\n\n\t\t// Call parent implementation\n\t\tconst parentValid = super.reportValidity()\n\n\t\treturn inputValid && parentValid\n\t}\n\n\t/**\n\t * Set a custom validation error message\n\t */\n\tpublic override setCustomValidity(message: string) {\n\t\t// Set on the native input\n\t\tif (this.inputRef.value) {\n\t\t\tthis.inputRef.value.setCustomValidity(message)\n\t\t}\n\n\t\t// Call parent implementation\n\t\tsuper.setCustomValidity(message)\n\t\t\n\t\t// Update error state based on validation strategy\n\t\tthis.error = message !== '' && this.shouldShowValidation()\n\t}\n\n\t// ----------------------------\n\t// E) Lifecycle Hooks & Event Handlers\n\t// ----------------------------\n\tfirstUpdated() {\n\t\t// Autofocus if desired\n\t\tif (this.autofocus) {\n\t\t\t// Use setTimeout to match browser behavior - autofocus happens after initial rendering\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.focus()\n\t\t\t}, 0)\n\t\t}\n\n\t\t// Subscribe to input events\n\t\tthis.setupInputEvents()\n\t\tthis.setupFocusBlurEvents()\n\t\tthis.setupAutofillDetection()\n\t\tthis.setupEnterKeyEvents()\n\t}\n\n\t/**\n\t * Set up input event handling for value changes\n\t */\n\tprivate setupInputEvents() {\n\t\tfromEvent<InputEvent>(this.inputElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(ev => {\n\t\t\t\t\t// Capture all input event properties for complete event forwarding\n\t\t\t\t\tconst inputEvent = ev as InputEvent\n\t\t\t\t\tconst target = ev.target as HTMLInputElement\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: target.value,\n\t\t\t\t\t\tinputType: inputEvent.inputType,\n\t\t\t\t\t\tdata: inputEvent.data,\n\t\t\t\t\t\tisComposing: inputEvent.isComposing,\n\t\t\t\t\t\toriginalEvent: ev,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(eventData => {\n\t\t\t\t// Update component value\n\t\t\t\tthis.value = eventData.value\n\n\t\t\t\t// Mark as dirty when user types\n\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\n\t\t\t\t// Fire custom 'input' event with extended details\n\t\t\t\tconst customEvent = new CustomEvent<EventDetails>('input', {\n\t\t\t\t\tdetail: { value: eventData.value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\n\t\t\t\t// Add additional properties to match native events more closely\n\t\t\t\tObject.defineProperties(customEvent, {\n\t\t\t\t\tinputType: { value: eventData.inputType },\n\t\t\t\t\tdata: { value: eventData.data },\n\t\t\t\t\tisComposing: { value: eventData.isComposing },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(customEvent)\n\n\t\t\t\t// REMOVED: Duplicate change event dispatch that was here\n\t\t\t\t// Run validation like native inputs do on input, but respect the validation strategy\n\t\t\t\tthis.validateInput()\n\t\t\t})\n\n\t\t// Subscribe to native change events (usually on blur)\n\t\tfromEvent<Event>(this.inputElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(ev => (ev.target as HTMLInputElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\n\t\t\t\t// Fire regular change event using mixin helper\n\t\t\t\tthis.emitChange({ value })\n\n\t\t\t\t// Run validation on change like native inputs\n\t\t\t\tthis.validateInput()\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up focus/blur event handling\n\t */\n\tprivate setupFocusBlurEvents() {\n\t\tfromEvent<FocusEvent>(this.inputElement, 'focus')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(ev => {\n\t\t\t\t// Create a custom focus event that includes standard props\n\t\t\t\tconst focusEvent = new CustomEvent('focus', {\n\t\t\t\t\tbubbles: ev.bubbles,\n\t\t\t\t\tcancelable: ev.cancelable,\n\t\t\t\t\tcomposed: ev.composed,\n\t\t\t\t})\n\n\t\t\t\t// Add focus-specific properties\n\t\t\t\tObject.defineProperties(focusEvent, {\n\t\t\t\t\trelatedTarget: { value: ev.relatedTarget },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(focusEvent)\n\t\t\t})\n\n\t\tfromEvent<FocusEvent>(this.inputElement, 'blur')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(ev => {\n\t\t\t\t// Mark as touched when field loses focus\n\t\t\t\tthis.touched = true\n\n\t\t\t\t// Run validation on blur like native inputs, respecting validation strategy\n\t\t\t\tif (!this.disabled) {\n\t\t\t\t\tthis.validateInput()\n\t\t\t\t}\n\n\t\t\t\t// Create a custom blur event that includes standard props\n\t\t\t\tconst blurEvent = new CustomEvent('blur', {\n\t\t\t\t\tbubbles: ev.bubbles,\n\t\t\t\t\tcancelable: ev.cancelable,\n\t\t\t\t\tcomposed: ev.composed,\n\t\t\t\t})\n\n\t\t\t\t// Add blur-specific properties\n\t\t\t\tObject.defineProperties(blurEvent, {\n\t\t\t\t\trelatedTarget: { value: ev.relatedTarget },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(blurEvent)\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up autofill detection\n\t */\n\tprivate setupAutofillDetection() {\n\t\t// Detect autofill animation (Chrome, etc.)\n\t\tfromEvent<AnimationEvent>(this.inputElement, 'animationstart')\n\t\t\t.pipe(\n\t\t\t\tfilter(ev => ev.animationName === 'onAutoFillStart'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(ev => {\n\t\t\t\tconst { value } = ev.target as HTMLInputElement\n\t\t\t\tthis.value = value\n\t\t\t\tthis.isAutofilled = true\n\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\n\t\t\t\t// Dispatch autofill event for integration with autofill systems\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent('autofill', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\t// Also propagate as a change event like browsers do\n\t\t\t\tthis.emitChange({ value })\n\t\t\t})\n\n\t\t// Detect end of autofill (Chrome)\n\t\tfromEvent<AnimationEvent>(this.inputElement, 'animationstart')\n\t\t\t.pipe(\n\t\t\t\tfilter(ev => ev.animationName === 'onAutoFillCancel'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.isAutofilled = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up enter key event handling\n\t */\n\tprivate setupEnterKeyEvents() {\n\t\t// Listen for Enter on keydown\n\t\tfromEvent<KeyboardEvent>(this.inputElement, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(ev => ev.key === 'Enter'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(ev => {\n\t\t\t\tconst { value } = ev.target as HTMLInputElement\n\t\t\t\t\n\t\t\t\t// Update value if changed\n\t\t\t\tif (this.value !== value) {\n\t\t\t\t\tthis.value = value\n\t\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Blur the input to trigger change event naturally\n\t\t\t\t// This mimics what happens when you tab out of the field\n\t\t\t\tthis.inputElement.blur()\n\n\t\t\t\t// Dispatch enhanced enter event\n\t\t\t\tconst enterEvent = new CustomEvent<EventDetails>('enter', {\n\t\t\t\t\tdetail: { value: this.value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\n\t\t\t\t// Add extra keyboard event props\n\t\t\t\tObject.defineProperties(enterEvent, {\n\t\t\t\t\tkey: { value: 'Enter' },\n\t\t\t\t\tcode: { value: 'Enter' },\n\t\t\t\t\tkeyCode: { value: 13 },\n\t\t\t\t\twhich: { value: 13 },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(enterEvent)\n\t\t\t})\n\t}\n\n\t// ----------------------------\n\t// F) Utility Methods\n\t// ----------------------------\n\t/** Selects all text within the input. */\n\tpublic select() {\n\t\treturn this.inputRef.value?.select()\n\t}\n\n\t/** Returns the native validity state of the inner <input>. */\n\tpublic getValidity(): ValidityState | undefined {\n\t\treturn this.inputRef.value?.validity\n\t}\n\n\t/**\n\t * Sets the selection range. Mirrors native input.setSelectionRange\n\t */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.inputRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/**\n\t * Returns the selected text within the input (start position)\n\t */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.inputRef.value?.selectionStart ?? null\n\t}\n\n\t/**\n\t * Returns the selected text within the input (end position)\n\t */\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.inputRef.value?.selectionEnd ?? null\n\t}\n\n\t/**\n\t * Returns the direction of selection\n\t */\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.inputRef.value?.selectionDirection ?? null\n\t}\n\n\t/**\n\t * Sets the range of text to be selected.\n\t */\n\tpublic setRangeText(\n\t\treplacement: string,\n\t\tstart?: number,\n\t\tend?: number,\n\t\tselectMode?: 'select' | 'start' | 'end' | 'preserve',\n\t) {\n\t\tif (start !== undefined && end !== undefined) {\n\t\t\tthis.inputRef.value?.setRangeText(replacement, start, end, selectMode)\n\t\t} else {\n\t\t\tthis.inputRef.value?.setRangeText(replacement)\n\t\t}\n\t}\n\n\t/**\n\t * Override to forward focus to the internal <input>.\n\t * Also dispatch a 'focus' event for external listeners.\n\t */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.inputRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\t/**\n\t * Override to forward clicks to the internal <input>.\n\t * Also dispatch a 'click' event for external listeners.\n\t */\n\tpublic override click() {\n\t\tthis.inputRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\t/** Forward blur to the internal <input>. */\n\tpublic override blur() {\n\t\tthis.inputRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\t// ----------------------------\n\t// G) Rendering\n\t// ----------------------------\n\tprotected override render() {\n\t\t// Determine height and padding based on size\n\t\tconst getHeightAndPadding = () => {\n\t\t\tswitch (this.size) {\n\t\t\t\tcase 'sm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: '40px',\n\t\t\t\t\t\tpadding: '0 8px',\n\t\t\t\t\t\tfontSize: '0.875rem', // 14px\n\t\t\t\t\t}\n\t\t\t\tcase 'lg':\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: '60px',\n\t\t\t\t\t\tpadding: '0 20px',\n\t\t\t\t\t\tfontSize: '1.125rem', // 18px\n\t\t\t\t\t}\n\t\t\t\tcase 'md':\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: '50px',\n\t\t\t\t\t\tpadding: '0 16px',\n\t\t\t\t\t\tfontSize: '1rem', // 16px\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst { height, padding, fontSize } = getHeightAndPadding()\n\n\t\t// Check if it's a date-type input\n\t\tconst isDateType = ['date', 'datetime-local', 'time', 'month', 'week'].includes(this.type)\n\n\t\tconst inputClasses = {\n\t\t\t// Base styles\n\t\t\t'block w-full min-w-0 rounded-[8px] border-0 bg-surface-highest text-surface-on': true,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles\n\t\t\t'ring-0 ring-inset focus:ring-1 focus:ring-inset': true,\n\t\t\t// Ring colors based on error state\n\t\t\t'ring-secondary-default ring-outline focus:ring-secondary-default': !this.error,\n\t\t\t'ring-error-default focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t'cursor-pointer': this.clickable,\n\t\t\t// Text alignment (date inputs always left-aligned)\n\t\t\t'text-left': this.align === 'left' || isDateType,\n\t\t\t'text-center': this.align === 'center' && !isDateType,\n\t\t\t'text-right': this.align === 'right' && !isDateType,\n\t\t\t// Autofill\n\t\t\tautofilled: this.isAutofilled,\n\t\t}\n\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-sm': this.size === 'sm',\n\t\t\t'text-base': this.size === 'md',\n\t\t\t'text-lg': this.size === 'lg',\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\n\t\tconst styles = {\n\t\t\theight,\n\t\t\tpadding,\n\t\t\tfontSize,\n\t\t\t// Ensure vertical centering for all input types\n\t\t\tlineHeight: height,\n\t\t}\n\n\t\t/**\n\t\t * - If `this.label` is present, we render a proper `<label for=\"${this.id}\">`.\n\t\t * - If not, we add an aria-label to the <input> for better accessibility.\n\t\t * - If there's a `hint`, we reference it via aria-describedby.\n\t\t * - If there's an error, we set aria-invalid and could set aria-errormessage.\n\t\t */\n\t\treturn html`\n\t\t\t<div class=\"w-full min-w-0 ${isDateType ? 'date-input-container' : ''}\">\n\t\t\t\t${when(\n\t\t\t\t\tthis.label,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tfor=${this.id}\n\t\t\t\t\t\t\tclass=${this.classMap(labelClasses)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${this.label}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\tid=${this.id}\n\t\t\t\t\tname=${this.name}\n\t\t\t\t\tclass=${this.classMap(inputClasses)}\n\t\t\t\t\tstyle=${this.styleMap(styles)}\n\t\t\t\t\t.value=${this.value}\n\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t.autocomplete=${this.autocomplete}\n\t\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\t\tplaceholder=${this.placeholder}\n\t\t\t\t\tinputmode=${ifDefined(this.inputmode)}\n\t\t\t\t\tpattern=${ifDefined(this.pattern)}\n\t\t\t\t\tstep=${ifDefined(this.step)}\n\t\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t\tmin=${ifDefined(this.min)}\n\t\t\t\t\tmax=${ifDefined(this.max)}\n\t\t\t\t\tlist=${ifDefined(this.list)}\n\t\t\t\t\t?required=${this.required}\n\t\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t\t?readonly=${this.readonly}\n\t\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\t\taria-labelledby=${this.label ? `label-${this.id}` : nothing}\n\t\t\t\t\taria-describedby=${this.hint || this.validationMessage ? `hint-${this.id}` : nothing}\n\t\t\t\t\taria-label=${ifDefined(!this.label ? this.placeholder || 'Input' : undefined)}\n\t\t\t\t/>\n\n\t\t\t\t${when(\n\t\t\t\t\tthis.hint || (this.error && this.validationMessage),\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid=\"hint-${this.id}\"\n\t\t\t\t\t\t\tclass=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${this.error && this.validationMessage ? this.validationMessage : this.hint}\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\n/**\n * Register the component with the legacy tag name for backward compatibility\n * @prop {string} label - Label text for the form field (inherited from FormFieldMixin)\n * @prop {boolean} required - Whether the field is required (inherited from FormFieldMixin)\n * @prop {boolean} disabled - Whether the field is disabled (inherited from FormFieldMixin)\n * @prop {boolean} readonly - Whether the field is read-only (inherited from FormFieldMixin)\n * @prop {boolean} error - Whether the field is in an error state (inherited from FormFieldMixin)\n * @prop {string} validationMessage - The validation message to display (inherited from FormFieldMixin)\n * @prop {string} hint - Optional hint text to display below the field (inherited from FormFieldMixin)\n */\n@customElement('sch-input')\nexport class SchmancyInputCompat extends SchmancyInput {}\n"],"names":["SchmancyInput","SchmancyFormField","constructor","super","arguments","this","value","type","placeholder","clickable","spellcheck","align","autofocus","autocomplete","tabIndex","size","validateOn","inputRef","createRef","isAutofilled","touched","dirty","submitted","defaultValue","changedProps","id","_idCounter","willUpdate","updated","has","validateInput","hasUpdated","connectedCallback","setupFormIntegration","setupExternalLabelAssociation","form","formResetObserver","MutationObserver","mutations","mutation","attributeName","resetToDefault","observe","attributes","childList","subtree","fromEvent","pipe","takeUntil","disconnecting","subscribe","setupLabelClickListener","document","querySelectorAll","forEach","label","focus","readyState","disconnectedCallback","disconnect","error","validationMessage","dispatchEvent","CustomEvent","bubbles","forceValidation","disabled","shouldValidate","shouldShowValidation","validity","inputElement","customError","valid","hasError","checkValidity","inputValid","parentValid","reportValidity","message","setCustomValidity","firstUpdated","setTimeout","setupInputEvents","setupFocusBlurEvents","setupAutofillDetection","setupEnterKeyEvents","map","ev","inputEvent","target","inputType","data","isComposing","originalEvent","eventData","customEvent","detail","composed","Object","defineProperties","distinctUntilChanged","emitChange","focusEvent","cancelable","relatedTarget","blurEvent","filter","animationName","key","blur","enterEvent","code","keyCode","which","select","getValidity","start","end","direction","setSelectionRange","selectionStart","selectionEnd","selectionDirection","replacement","selectMode","setRangeText","options","Event","click","render","height","padding","fontSize","getHeightAndPadding","isDateType","includes","inputClasses","readonly","autofilled","labelClasses","styles","lineHeight","html","when","classMap","ref","name","styleMap","ifDefined","inputmode","pattern","step","minlength","maxlength","min","max","list","required","nothing","hint","shadowRootOptions","LitElement","delegatesFocus","__decorateClass","property","String","reflect","prototype","Boolean","Number","query","state","customElement","SchmancyInputCompat"],"mappings":"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"}
|
package/dist/input.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./input-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./input-CWOVMdSb.cjs");Object.defineProperty(exports,"SchmancyInput",{enumerable:!0,get:()=>e.SchmancyInput}),Object.defineProperty(exports,"SchmancyInputCompat",{enumerable:!0,get:()=>e.SchmancyInputCompat});
|
|
2
2
|
//# sourceMappingURL=input.cjs.map
|
package/dist/input.js
CHANGED
package/dist/layout.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./flex-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./flex-_K-5RVZM.cjs");Object.defineProperty(exports,"SchmancyFlex",{enumerable:!0,get:()=>e.SchmancyFlex}),Object.defineProperty(exports,"SchmancyFlexV2",{enumerable:!0,get:()=>e.SchmancyFlexV2}),Object.defineProperty(exports,"SchmancyGrid",{enumerable:!0,get:()=>e.SchmancyGrid}),Object.defineProperty(exports,"SchmancyScroll",{enumerable:!0,get:()=>e.SchmancyScroll});
|
|
2
2
|
//# sourceMappingURL=layout.cjs.map
|
package/dist/layout.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-DObpkuL6.cjs","sources":["../src/area/utils.ts","../src/area/lazy.ts"],"sourcesContent":["import { RouteAction, ActiveRoute } from './router.types'\n\n/**\n * Compare two custom element constructors for equality\n * @param constructor1 First constructor to compare\n * @param constructor2 Second constructor to compare\n * @returns true if constructors are functionally equivalent\n */\nexport function compareCustomElementConstructors(\n\tconstructor1: CustomElementConstructor | Function,\n\tconstructor2: CustomElementConstructor | Function\n): boolean {\n\t// Quick reference check\n\tif (constructor1 === constructor2) {\n\t\treturn true\n\t}\n\n\t// Check if both are functions\n\tif (typeof constructor1 !== 'function' || typeof constructor2 !== 'function') {\n\t\treturn false\n\t}\n\n\t// Compare by name (handles minification)\n\tif (constructor1.name && constructor2.name && constructor1.name === constructor2.name) {\n\t\treturn true\n\t}\n\n\t// Compare observed attributes if available\n\tconst obs1 = (constructor1 as any).observedAttributes\n\tconst obs2 = (constructor2 as any).observedAttributes\n\t\n\tif (obs1 && obs2) {\n\t\tif (Array.isArray(obs1) && Array.isArray(obs2)) {\n\t\t\tif (obs1.length !== obs2.length) return false\n\t\t\treturn obs1.every((attr, i) => attr === obs2[i])\n\t\t}\n\t}\n\n\t// Try to compare prototypes\n\ttry {\n\t\tconst proto1 = constructor1.prototype\n\t\tconst proto2 = constructor2.prototype\n\t\t\n\t\t// Check if they have the same prototype chain\n\t\tif (Object.getPrototypeOf(proto1) === Object.getPrototypeOf(proto2)) {\n\t\t\t// Check if they have the same property names\n\t\t\tconst keys1 = Object.getOwnPropertyNames(proto1).sort()\n\t\t\tconst keys2 = Object.getOwnPropertyNames(proto2).sort()\n\t\t\t\n\t\t\treturn keys1.length === keys2.length && \n\t\t\t\t keys1.every((key, i) => key === keys2[i])\n\t\t}\n\t} catch {\n\t\t// Ignore prototype access errors\n\t}\n\n\treturn false\n}\n\n/**\n * Normalize a component tag name for comparison\n * @param tagName Tag name to normalize\n * @returns Normalized tag name\n */\nexport function normalizeTagName(tagName: string): string {\n\treturn tagName\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]/g, '') // Remove all non-alphanumeric characters\n}\n\n/**\n * Get tag name from a component\n * @param component Component to get tag name from\n * @returns Tag name or null if unable to determine\n */\nexport function getTagName(component: any): string | null {\n\tif (typeof component === 'string') {\n\t\treturn component.toLowerCase()\n\t}\n\t\n\tif (component instanceof HTMLElement) {\n\t\treturn component.tagName.toLowerCase()\n\t}\n\t\n\tif (typeof component === 'function') {\n\t\t// Try to get custom element name from constructor\n\t\tconst name = component.name\n\t\tif (name) {\n\t\t\t// Convert PascalCase to kebab-case\n\t\t\treturn name\n\t\t\t\t.replace(/([A-Z])/g, '-$1')\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/^-/, '')\n\t\t}\n\t}\n\t\n\treturn null\n}\n\n/**\n * Deep merge two objects\n * @param target Target object\n * @param source Source object to merge\n * @returns Merged object\n */\nexport function deepMerge<T extends Record<string, any>>(\n\ttarget: T,\n\tsource: Partial<T>\n): T {\n\tconst output = { ...target }\n\t\n\tfor (const key in source) {\n\t\tif (source.hasOwnProperty(key)) {\n\t\t\tconst sourceValue = source[key]\n\t\t\tconst targetValue = output[key]\n\t\t\t\n\t\t\tif (isObject(sourceValue) && isObject(targetValue)) {\n\t\t\t\toutput[key] = deepMerge(targetValue, sourceValue)\n\t\t\t} else {\n\t\t\t\toutput[key] = sourceValue as T[Extract<keyof T, string>]\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn output\n}\n\n/**\n * Check if value is a plain object\n * @param obj Value to check\n * @returns true if value is a plain object\n */\nexport function isObject(obj: any): obj is Record<string, any> {\n\treturn obj !== null && \n\t\t typeof obj === 'object' && \n\t\t obj.constructor === Object &&\n\t\t Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/**\n * Debounce a function\n * @param func Function to debounce\n * @param wait Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: any[]) => any>(\n\tfunc: T,\n\twait: number\n): (...args: Parameters<T>) => void {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null\n\t\n\treturn function (this: any, ...args: Parameters<T>) {\n\t\tconst context = this\n\t\t\n\t\tif (timeout !== null) {\n\t\t\tclearTimeout(timeout)\n\t\t}\n\t\t\n\t\ttimeout = setTimeout(() => {\n\t\t\tfunc.apply(context, args)\n\t\t\ttimeout = null\n\t\t}, wait)\n\t}\n}\n\n/**\n * Create a URL-safe string from route state\n * @param state Route state object\n * @returns URL-safe encoded string\n */\nexport function encodeRouteState(state: Record<string, unknown>): string {\n\ttry {\n\t\tconst json = JSON.stringify(state)\n\t\treturn encodeURIComponent(json)\n\t} catch (error) {\n\t\tconsole.error('Failed to encode route state:', error)\n\t\treturn ''\n\t}\n}\n\n/**\n * Decode a URL-safe string to route state\n * @param encoded Encoded string\n * @returns Decoded route state or empty object\n */\nexport function decodeRouteState(encoded: string): Record<string, unknown> {\n\tif (!encoded) return {}\n\t\n\ttry {\n\t\tconst decoded = decodeURIComponent(encoded)\n\t\tconst parsed = JSON.parse(decoded)\n\t\t\n\t\tif (isObject(parsed)) {\n\t\t\treturn parsed\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Failed to decode route state:', error)\n\t}\n\t\n\treturn {}\n}\n\n/**\n * Compare two route actions for equality\n * @param a First route action\n * @param b Second route action\n * @returns true if route actions are equal\n */\nexport function compareRouteActions(a: RouteAction, b: RouteAction): boolean {\n\t// Compare areas\n\tif (a.area !== b.area) return false\n\t\n\t// Compare components\n\tif (typeof a.component !== typeof b.component) return false\n\t\n\tif (typeof a.component === 'string' && typeof b.component === 'string') {\n\t\tif (normalizeTagName(a.component) !== normalizeTagName(b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (typeof a.component === 'function' && typeof b.component === 'function') {\n\t\tif (!compareCustomElementConstructors(a.component, b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (a.component !== b.component) {\n\t\treturn false\n\t}\n\t\n\t// Compare state\n\tif (JSON.stringify(a.state || {}) !== JSON.stringify(b.state || {})) {\n\t\treturn false\n\t}\n\t\n\t// Compare params\n\tif (JSON.stringify(a.params || {}) !== JSON.stringify(b.params || {})) {\n\t\treturn false\n\t}\n\t\n\treturn true\n}\n\n/**\n * Compare two active routes for equality\n * @param a First active route\n * @param b Second active route\n * @returns true if active routes are equal\n */\nexport function compareActiveRoutes(a: ActiveRoute, b: ActiveRoute): boolean {\n\treturn a.area === b.area &&\n\t\t a.component === b.component &&\n\t\t JSON.stringify(a.state || {}) === JSON.stringify(b.state || {}) &&\n\t\t JSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n}\n\n/**\n * Create a cache key from a route action\n * @param route Route action\n * @returns Cache key string\n */\nexport function createRouteCacheKey(route: RouteAction): string {\n\tconst tagName = getTagName(route.component) || 'unknown'\n\tconst stateHash = simpleHash(JSON.stringify(route.state || {}))\n\tconst paramsHash = simpleHash(JSON.stringify(route.params || {}))\n\t\n\treturn `${route.area}:${tagName}:${stateHash}:${paramsHash}`\n}\n\n/**\n * Simple hash function for creating cache keys\n * @param str String to hash\n * @returns Hash string\n */\nfunction simpleHash(str: string): string {\n\tlet hash = 0\n\t\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + char\n\t\thash = hash & hash // Convert to 32-bit integer\n\t}\n\t\n\treturn Math.abs(hash).toString(36)\n}\n\n/**\n * Sanitize route state to remove sensitive data\n * @param state Route state\n * @param keysToRemove Keys to remove from state\n * @returns Sanitized state\n */\nexport function sanitizeRouteState(\n\tstate: Record<string, unknown>,\n\tkeysToRemove: string[] = ['password', 'token', 'secret', 'apiKey']\n): Record<string, unknown> {\n\tconst sanitized: Record<string, unknown> = {}\n\t\n\tfor (const key in state) {\n\t\tif (state.hasOwnProperty(key) && !keysToRemove.includes(key)) {\n\t\t\tconst value = state[key]\n\t\t\t\n\t\t\tif (isObject(value)) {\n\t\t\t\tsanitized[key] = sanitizeRouteState(value, keysToRemove)\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tsanitized[key] = value.map(item => \n\t\t\t\t\tisObject(item) ? sanitizeRouteState(item, keysToRemove) : item\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tsanitized[key] = value\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn sanitized\n}\n\n/**\n * Extract query parameters from URL\n * @param url URL string or URLSearchParams\n * @returns Object with query parameters\n */\nexport function extractQueryParams(url?: string | URLSearchParams): Record<string, string> {\n\tconst params: Record<string, string> = {}\n\t\n\tlet searchParams: URLSearchParams\n\t\n\tif (url instanceof URLSearchParams) {\n\t\tsearchParams = url\n\t} else if (typeof url === 'string') {\n\t\tconst urlObj = new URL(url, window.location.origin)\n\t\tsearchParams = urlObj.searchParams\n\t} else {\n\t\tsearchParams = new URLSearchParams(window.location.search)\n\t}\n\t\n\tsearchParams.forEach((value, key) => {\n\t\tparams[key] = value\n\t})\n\t\n\treturn params\n}\n\n/**\n * Build query string from parameters object\n * @param params Parameters object\n * @returns Query string with leading '?'\n */\nexport function buildQueryString(params: Record<string, string | number | boolean>): string {\n\tconst searchParams = new URLSearchParams()\n\t\n\tfor (const key in params) {\n\t\tif (params.hasOwnProperty(key)) {\n\t\t\tconst value = params[key]\n\t\t\tif (value !== undefined && value !== null && value !== '') {\n\t\t\t\tsearchParams.set(key, String(value))\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst queryString = searchParams.toString()\n\treturn queryString ? `?${queryString}` : ''\n}","/**\r\n * Lazy loading for Schmancy Area components\r\n * Similar to React.lazy() but adapted for Web Components\r\n */\r\n\r\n// Type definition for custom element constructors\r\ntype CustomElementConstructor = typeof HTMLElement\r\n\r\n/**\r\n * LazyComponent interface with preload capability\r\n */\r\nexport interface LazyComponent<T extends CustomElementConstructor = CustomElementConstructor> {\r\n (): Promise<{ default: T }>\r\n preload(): Promise<void>\r\n _promise?: Promise<{ default: T }>\r\n _module?: { default: T }\r\n}\r\n\r\n/**\r\n * Create a lazy-loaded component that will be imported on demand\r\n *\r\n * @example\r\n * ```typescript\r\n * const LazyProfile = lazy(() => import('./profile'))\r\n *\r\n * // Use with area.push\r\n * area.push({\r\n * component: LazyProfile,\r\n * area: 'main'\r\n * })\r\n *\r\n * // Preload on hover\r\n * element.addEventListener('mouseenter', () => LazyProfile.preload())\r\n * ```\r\n *\r\n * @param loader - Dynamic import function that returns a module with default export\r\n * @returns LazyComponent function compatible with area.push()\r\n */\r\nexport function lazy<T extends CustomElementConstructor>(\r\n loader: () => Promise<{ default: T }>\r\n): LazyComponent<T> {\r\n\r\n // Create the lazy component function\r\n const lazyComponent = function(): Promise<{ default: T }> {\r\n // Return cached promise if already loading/loaded\r\n if (lazyComponent._promise) {\r\n return lazyComponent._promise\r\n }\r\n\r\n // Return cached module if already loaded\r\n if (lazyComponent._module) {\r\n return Promise.resolve(lazyComponent._module)\r\n }\r\n\r\n // Start loading and cache the promise\r\n lazyComponent._promise = loader()\r\n .then(module => {\r\n // Cache the loaded module\r\n lazyComponent._module = module\r\n return module\r\n })\r\n .catch(error => {\r\n // Clear promise on error to allow retry\r\n lazyComponent._promise = undefined\r\n throw error\r\n })\r\n\r\n return lazyComponent._promise\r\n } as LazyComponent<T>\r\n\r\n // Add preload method for manual preloading\r\n lazyComponent.preload = async function(): Promise<void> {\r\n try {\r\n await lazyComponent()\r\n } catch (error) {\r\n console.error('Failed to preload component:', error)\r\n }\r\n }\r\n\r\n return lazyComponent\r\n}\r\n\r\n\r\n"],"names":["compareCustomElementConstructors","constructor1","constructor2","name","obs1","observedAttributes","obs2","Array","isArray","length","every","attr","i","proto1","prototype","proto2","Object","getPrototypeOf","keys1","getOwnPropertyNames","sort","keys2","key","normalizeTagName","tagName","toLowerCase","replace","getTagName","component","HTMLElement","isObject","obj","constructor","toString","call","simpleHash","str","hash","charCodeAt","Math","abs","params","searchParams","URLSearchParams","hasOwnProperty","value","set","String","queryString","a","b","area","JSON","stringify","state","route","stateHash","paramsHash","func","wait","timeout","args","context","this","clearTimeout","setTimeout","apply","encoded","decoded","decodeURIComponent","parsed","parse","error","deepMerge","target","source","output","sourceValue","targetValue","json","encodeURIComponent","url","URL","window","location","origin","search","forEach","loader","lazyComponent","_promise","_module","Promise","resolve","then","module","catch","preload","async","sanitizeRouteState","keysToRemove","sanitized","includes","map","item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lazy-DObpkuL6.cjs","sources":["../src/area/utils.ts","../src/area/lazy.ts"],"sourcesContent":["import { ComponentType } from './area.component'\nimport { RouteAction, ActiveRoute } from './router.types'\n\n/**\n * Compare two custom element constructors for equality\n * @param constructor1 First constructor to compare\n * @param constructor2 Second constructor to compare\n * @returns true if constructors are functionally equivalent\n */\nexport function compareCustomElementConstructors(\n\tconstructor1: CustomElementConstructor | Function,\n\tconstructor2: CustomElementConstructor | Function,\n): boolean {\n\t// Quick reference check\n\tif (constructor1 === constructor2) {\n\t\treturn true\n\t}\n\n\t// Check if both are functions\n\tif (typeof constructor1 !== 'function' || typeof constructor2 !== 'function') {\n\t\treturn false\n\t}\n\n\t// Compare by name (handles minification)\n\tif (constructor1.name && constructor2.name && constructor1.name === constructor2.name) {\n\t\treturn true\n\t}\n\n\t// Compare observed attributes if available\n\tconst obs1 = (constructor1 as any).observedAttributes\n\tconst obs2 = (constructor2 as any).observedAttributes\n\n\tif (obs1 && obs2) {\n\t\tif (Array.isArray(obs1) && Array.isArray(obs2)) {\n\t\t\tif (obs1.length !== obs2.length) return false\n\t\t\treturn obs1.every((attr, i) => attr === obs2[i])\n\t\t}\n\t}\n\n\t// Try to compare prototypes\n\ttry {\n\t\tconst proto1 = constructor1.prototype\n\t\tconst proto2 = constructor2.prototype\n\n\t\t// Check if they have the same prototype chain\n\t\tif (Object.getPrototypeOf(proto1) === Object.getPrototypeOf(proto2)) {\n\t\t\t// Check if they have the same property names\n\t\t\tconst keys1 = Object.getOwnPropertyNames(proto1).sort()\n\t\t\tconst keys2 = Object.getOwnPropertyNames(proto2).sort()\n\n\t\t\treturn keys1.length === keys2.length && keys1.every((key, i) => key === keys2[i])\n\t\t}\n\t} catch {\n\t\t// Ignore prototype access errors\n\t}\n\n\treturn false\n}\n\n/**\n * Normalize a component tag name for comparison\n * @param tagName Tag name to normalize\n * @returns Normalized tag name\n */\nexport function normalizeTagName(tagName: string): string {\n\treturn tagName.toLowerCase().replace(/[^a-z0-9]/g, '') // Remove all non-alphanumeric characters\n}\n\n/**\n * Get tag name from a component\n * @param component Component to get tag name from\n * @returns Tag name or null if unable to determine\n */\nexport function getTagName(component: ComponentType): string | null {\n\tif (typeof component === 'string') {\n\t\treturn component.toLowerCase()\n\t}\n\n\tif (component instanceof HTMLElement) {\n\t\treturn component.tagName.toLowerCase()\n\t}\n\n\tif (typeof component === 'function') {\n\t\t// Try to get custom element name from constructor\n\t\tconst name = component.name\n\t\tif (name) {\n\t\t\t// Convert PascalCase to kebab-case\n\t\t\treturn name\n\t\t\t\t.replace(/([A-Z])/g, '-$1')\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/^-/, '')\n\t\t}\n\t}\n\n\treturn null\n}\n\n/**\n * Deep merge two objects\n * @param target Target object\n * @param source Source object to merge\n * @returns Merged object\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n\tconst output = { ...target }\n\n\tfor (const key in source) {\n\t\tif (source.hasOwnProperty(key)) {\n\t\t\tconst sourceValue = source[key]\n\t\t\tconst targetValue = output[key]\n\n\t\t\tif (isObject(sourceValue) && isObject(targetValue)) {\n\t\t\t\toutput[key] = deepMerge(targetValue, sourceValue)\n\t\t\t} else {\n\t\t\t\toutput[key] = sourceValue as T[Extract<keyof T, string>]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output\n}\n\n/**\n * Check if value is a plain object\n * @param obj Value to check\n * @returns true if value is a plain object\n */\nexport function isObject(obj: any): obj is Record<string, any> {\n\treturn (\n\t\tobj !== null &&\n\t\ttypeof obj === 'object' &&\n\t\tobj.constructor === Object &&\n\t\tObject.prototype.toString.call(obj) === '[object Object]'\n\t)\n}\n\n/**\n * Debounce a function\n * @param func Function to debounce\n * @param wait Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null\n\n\treturn function (this: any, ...args: Parameters<T>) {\n\t\tconst context = this\n\n\t\tif (timeout !== null) {\n\t\t\tclearTimeout(timeout)\n\t\t}\n\n\t\ttimeout = setTimeout(() => {\n\t\t\tfunc.apply(context, args)\n\t\t\ttimeout = null\n\t\t}, wait)\n\t}\n}\n\n/**\n * Create a URL-safe string from route state\n * @param state Route state object\n * @returns URL-safe encoded string\n */\nexport function encodeRouteState(state: Record<string, unknown>): string {\n\ttry {\n\t\tconst json = JSON.stringify(state)\n\t\treturn encodeURIComponent(json)\n\t} catch (error) {\n\t\tconsole.error('Failed to encode route state:', error)\n\t\treturn ''\n\t}\n}\n\n/**\n * Decode a URL-safe string to route state\n * @param encoded Encoded string\n * @returns Decoded route state or empty object\n */\nexport function decodeRouteState(encoded: string): Record<string, unknown> {\n\tif (!encoded) return {}\n\n\ttry {\n\t\tconst decoded = decodeURIComponent(encoded)\n\t\tconst parsed = JSON.parse(decoded)\n\n\t\tif (isObject(parsed)) {\n\t\t\treturn parsed\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Failed to decode route state:', error)\n\t}\n\n\treturn {}\n}\n\n/**\n * Compare two route actions for equality\n * @param a First route action\n * @param b Second route action\n * @returns true if route actions are equal\n */\nexport function compareRouteActions(a: RouteAction, b: RouteAction): boolean {\n\t// Compare areas\n\tif (a.area !== b.area) return false\n\n\t// Compare components\n\tif (typeof a.component !== typeof b.component) return false\n\n\tif (typeof a.component === 'string' && typeof b.component === 'string') {\n\t\tif (normalizeTagName(a.component) !== normalizeTagName(b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (typeof a.component === 'function' && typeof b.component === 'function') {\n\t\tif (!compareCustomElementConstructors(a.component, b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (a.component !== b.component) {\n\t\treturn false\n\t}\n\n\t// Compare state\n\tif (JSON.stringify(a.state || {}) !== JSON.stringify(b.state || {})) {\n\t\treturn false\n\t}\n\n\t// Compare params\n\tif (JSON.stringify(a.params || {}) !== JSON.stringify(b.params || {})) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n/**\n * Compare two active routes for equality\n * @param a First active route\n * @param b Second active route\n * @returns true if active routes are equal\n */\nexport function compareActiveRoutes(a: ActiveRoute, b: ActiveRoute): boolean {\n\treturn (\n\t\ta.area === b.area &&\n\t\ta.component === b.component &&\n\t\tJSON.stringify(a.state || {}) === JSON.stringify(b.state || {}) &&\n\t\tJSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n\t)\n}\n\n/**\n * Create a cache key from a route action\n * @param route Route action\n * @returns Cache key string\n */\nexport function createRouteCacheKey(route: RouteAction): string {\n\tconst tagName = getTagName(route.component) || 'unknown'\n\tconst stateHash = simpleHash(JSON.stringify(route.state || {}))\n\tconst paramsHash = simpleHash(JSON.stringify(route.params || {}))\n\n\treturn `${route.area}:${tagName}:${stateHash}:${paramsHash}`\n}\n\n/**\n * Simple hash function for creating cache keys\n * @param str String to hash\n * @returns Hash string\n */\nfunction simpleHash(str: string): string {\n\tlet hash = 0\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charCodeAt(i)\n\t\thash = (hash << 5) - hash + char\n\t\thash = hash & hash // Convert to 32-bit integer\n\t}\n\n\treturn Math.abs(hash).toString(36)\n}\n\n/**\n * Sanitize route state to remove sensitive data\n * @param state Route state\n * @param keysToRemove Keys to remove from state\n * @returns Sanitized state\n */\nexport function sanitizeRouteState(\n\tstate: Record<string, unknown>,\n\tkeysToRemove: string[] = ['password', 'token', 'secret', 'apiKey'],\n): Record<string, unknown> {\n\tconst sanitized: Record<string, unknown> = {}\n\n\tfor (const key in state) {\n\t\tif (state.hasOwnProperty(key) && !keysToRemove.includes(key)) {\n\t\t\tconst value = state[key]\n\n\t\t\tif (isObject(value)) {\n\t\t\t\tsanitized[key] = sanitizeRouteState(value, keysToRemove)\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tsanitized[key] = value.map(item => (isObject(item) ? sanitizeRouteState(item, keysToRemove) : item))\n\t\t\t} else {\n\t\t\t\tsanitized[key] = value\n\t\t\t}\n\t\t}\n\t}\n\n\treturn sanitized\n}\n\n/**\n * Extract query parameters from URL\n * @param url URL string or URLSearchParams\n * @returns Object with query parameters\n */\nexport function extractQueryParams(url?: string | URLSearchParams): Record<string, string> {\n\tconst params: Record<string, string> = {}\n\n\tlet searchParams: URLSearchParams\n\n\tif (url instanceof URLSearchParams) {\n\t\tsearchParams = url\n\t} else if (typeof url === 'string') {\n\t\tconst urlObj = new URL(url, window.location.origin)\n\t\tsearchParams = urlObj.searchParams\n\t} else {\n\t\tsearchParams = new URLSearchParams(window.location.search)\n\t}\n\n\tsearchParams.forEach((value, key) => {\n\t\tparams[key] = value\n\t})\n\n\treturn params\n}\n\n/**\n * Build query string from parameters object\n * @param params Parameters object\n * @returns Query string with leading '?'\n */\nexport function buildQueryString(params: Record<string, string | number | boolean>): string {\n\tconst searchParams = new URLSearchParams()\n\n\tfor (const key in params) {\n\t\tif (params.hasOwnProperty(key)) {\n\t\t\tconst value = params[key]\n\t\t\tif (value !== undefined && value !== null && value !== '') {\n\t\t\t\tsearchParams.set(key, String(value))\n\t\t\t}\n\t\t}\n\t}\n\n\tconst queryString = searchParams.toString()\n\treturn queryString ? `?${queryString}` : ''\n}\n","/**\r\n * Lazy loading for Schmancy Area components\r\n * Similar to React.lazy() but adapted for Web Components\r\n */\r\n\r\n// Type definition for custom element constructors\r\ntype CustomElementConstructor = typeof HTMLElement\r\n\r\n/**\r\n * LazyComponent interface with preload capability\r\n */\r\nexport interface LazyComponent<T extends CustomElementConstructor = CustomElementConstructor> {\r\n (): Promise<{ default: T }>\r\n preload(): Promise<void>\r\n _promise?: Promise<{ default: T }>\r\n _module?: { default: T }\r\n}\r\n\r\n/**\r\n * Create a lazy-loaded component that will be imported on demand\r\n *\r\n * @example\r\n * ```typescript\r\n * const LazyProfile = lazy(() => import('./profile'))\r\n *\r\n * // Use with area.push\r\n * area.push({\r\n * component: LazyProfile,\r\n * area: 'main'\r\n * })\r\n *\r\n * // Preload on hover\r\n * element.addEventListener('mouseenter', () => LazyProfile.preload())\r\n * ```\r\n *\r\n * @param loader - Dynamic import function that returns a module with default export\r\n * @returns LazyComponent function compatible with area.push()\r\n */\r\nexport function lazy<T extends CustomElementConstructor>(\r\n loader: () => Promise<{ default: T }>\r\n): LazyComponent<T> {\r\n\r\n // Create the lazy component function\r\n const lazyComponent = function(): Promise<{ default: T }> {\r\n // Return cached promise if already loading/loaded\r\n if (lazyComponent._promise) {\r\n return lazyComponent._promise\r\n }\r\n\r\n // Return cached module if already loaded\r\n if (lazyComponent._module) {\r\n return Promise.resolve(lazyComponent._module)\r\n }\r\n\r\n // Start loading and cache the promise\r\n lazyComponent._promise = loader()\r\n .then(module => {\r\n // Cache the loaded module\r\n lazyComponent._module = module\r\n return module\r\n })\r\n .catch(error => {\r\n // Clear promise on error to allow retry\r\n lazyComponent._promise = undefined\r\n throw error\r\n })\r\n\r\n return lazyComponent._promise\r\n } as LazyComponent<T>\r\n\r\n // Add preload method for manual preloading\r\n lazyComponent.preload = async function(): Promise<void> {\r\n try {\r\n await lazyComponent()\r\n } catch (error) {\r\n console.error('Failed to preload component:', error)\r\n }\r\n }\r\n\r\n return lazyComponent\r\n}\r\n\r\n\r\n"],"names":["compareCustomElementConstructors","constructor1","constructor2","name","obs1","observedAttributes","obs2","Array","isArray","length","every","attr","i","proto1","prototype","proto2","Object","getPrototypeOf","keys1","getOwnPropertyNames","sort","keys2","key","normalizeTagName","tagName","toLowerCase","replace","getTagName","component","HTMLElement","isObject","obj","constructor","toString","call","simpleHash","str","hash","charCodeAt","Math","abs","params","searchParams","URLSearchParams","hasOwnProperty","value","set","String","queryString","a","b","area","JSON","stringify","state","route","stateHash","paramsHash","func","wait","timeout","args","context","this","clearTimeout","setTimeout","apply","encoded","decoded","decodeURIComponent","parsed","parse","error","deepMerge","target","source","output","sourceValue","targetValue","json","encodeURIComponent","url","URL","window","location","origin","search","forEach","loader","lazyComponent","_promise","_module","Promise","resolve","then","module","catch","preload","async","sanitizeRouteState","keysToRemove","sanitized","includes","map","item"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-E2LCDm7n.js","sources":["../src/area/utils.ts","../src/area/lazy.ts"],"sourcesContent":["import { RouteAction, ActiveRoute } from './router.types'\n\n/**\n * Compare two custom element constructors for equality\n * @param constructor1 First constructor to compare\n * @param constructor2 Second constructor to compare\n * @returns true if constructors are functionally equivalent\n */\nexport function compareCustomElementConstructors(\n\tconstructor1: CustomElementConstructor | Function,\n\tconstructor2: CustomElementConstructor | Function\n): boolean {\n\t// Quick reference check\n\tif (constructor1 === constructor2) {\n\t\treturn true\n\t}\n\n\t// Check if both are functions\n\tif (typeof constructor1 !== 'function' || typeof constructor2 !== 'function') {\n\t\treturn false\n\t}\n\n\t// Compare by name (handles minification)\n\tif (constructor1.name && constructor2.name && constructor1.name === constructor2.name) {\n\t\treturn true\n\t}\n\n\t// Compare observed attributes if available\n\tconst obs1 = (constructor1 as any).observedAttributes\n\tconst obs2 = (constructor2 as any).observedAttributes\n\t\n\tif (obs1 && obs2) {\n\t\tif (Array.isArray(obs1) && Array.isArray(obs2)) {\n\t\t\tif (obs1.length !== obs2.length) return false\n\t\t\treturn obs1.every((attr, i) => attr === obs2[i])\n\t\t}\n\t}\n\n\t// Try to compare prototypes\n\ttry {\n\t\tconst proto1 = constructor1.prototype\n\t\tconst proto2 = constructor2.prototype\n\t\t\n\t\t// Check if they have the same prototype chain\n\t\tif (Object.getPrototypeOf(proto1) === Object.getPrototypeOf(proto2)) {\n\t\t\t// Check if they have the same property names\n\t\t\tconst keys1 = Object.getOwnPropertyNames(proto1).sort()\n\t\t\tconst keys2 = Object.getOwnPropertyNames(proto2).sort()\n\t\t\t\n\t\t\treturn keys1.length === keys2.length && \n\t\t\t\t keys1.every((key, i) => key === keys2[i])\n\t\t}\n\t} catch {\n\t\t// Ignore prototype access errors\n\t}\n\n\treturn false\n}\n\n/**\n * Normalize a component tag name for comparison\n * @param tagName Tag name to normalize\n * @returns Normalized tag name\n */\nexport function normalizeTagName(tagName: string): string {\n\treturn tagName\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]/g, '') // Remove all non-alphanumeric characters\n}\n\n/**\n * Get tag name from a component\n * @param component Component to get tag name from\n * @returns Tag name or null if unable to determine\n */\nexport function getTagName(component: any): string | null {\n\tif (typeof component === 'string') {\n\t\treturn component.toLowerCase()\n\t}\n\t\n\tif (component instanceof HTMLElement) {\n\t\treturn component.tagName.toLowerCase()\n\t}\n\t\n\tif (typeof component === 'function') {\n\t\t// Try to get custom element name from constructor\n\t\tconst name = component.name\n\t\tif (name) {\n\t\t\t// Convert PascalCase to kebab-case\n\t\t\treturn name\n\t\t\t\t.replace(/([A-Z])/g, '-$1')\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/^-/, '')\n\t\t}\n\t}\n\t\n\treturn null\n}\n\n/**\n * Deep merge two objects\n * @param target Target object\n * @param source Source object to merge\n * @returns Merged object\n */\nexport function deepMerge<T extends Record<string, any>>(\n\ttarget: T,\n\tsource: Partial<T>\n): T {\n\tconst output = { ...target }\n\t\n\tfor (const key in source) {\n\t\tif (source.hasOwnProperty(key)) {\n\t\t\tconst sourceValue = source[key]\n\t\t\tconst targetValue = output[key]\n\t\t\t\n\t\t\tif (isObject(sourceValue) && isObject(targetValue)) {\n\t\t\t\toutput[key] = deepMerge(targetValue, sourceValue)\n\t\t\t} else {\n\t\t\t\toutput[key] = sourceValue as T[Extract<keyof T, string>]\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn output\n}\n\n/**\n * Check if value is a plain object\n * @param obj Value to check\n * @returns true if value is a plain object\n */\nexport function isObject(obj: any): obj is Record<string, any> {\n\treturn obj !== null && \n\t\t typeof obj === 'object' && \n\t\t obj.constructor === Object &&\n\t\t Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/**\n * Debounce a function\n * @param func Function to debounce\n * @param wait Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: any[]) => any>(\n\tfunc: T,\n\twait: number\n): (...args: Parameters<T>) => void {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null\n\t\n\treturn function (this: any, ...args: Parameters<T>) {\n\t\tconst context = this\n\t\t\n\t\tif (timeout !== null) {\n\t\t\tclearTimeout(timeout)\n\t\t}\n\t\t\n\t\ttimeout = setTimeout(() => {\n\t\t\tfunc.apply(context, args)\n\t\t\ttimeout = null\n\t\t}, wait)\n\t}\n}\n\n/**\n * Create a URL-safe string from route state\n * @param state Route state object\n * @returns URL-safe encoded string\n */\nexport function encodeRouteState(state: Record<string, unknown>): string {\n\ttry {\n\t\tconst json = JSON.stringify(state)\n\t\treturn encodeURIComponent(json)\n\t} catch (error) {\n\t\tconsole.error('Failed to encode route state:', error)\n\t\treturn ''\n\t}\n}\n\n/**\n * Decode a URL-safe string to route state\n * @param encoded Encoded string\n * @returns Decoded route state or empty object\n */\nexport function decodeRouteState(encoded: string): Record<string, unknown> {\n\tif (!encoded) return {}\n\t\n\ttry {\n\t\tconst decoded = decodeURIComponent(encoded)\n\t\tconst parsed = JSON.parse(decoded)\n\t\t\n\t\tif (isObject(parsed)) {\n\t\t\treturn parsed\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Failed to decode route state:', error)\n\t}\n\t\n\treturn {}\n}\n\n/**\n * Compare two route actions for equality\n * @param a First route action\n * @param b Second route action\n * @returns true if route actions are equal\n */\nexport function compareRouteActions(a: RouteAction, b: RouteAction): boolean {\n\t// Compare areas\n\tif (a.area !== b.area) return false\n\t\n\t// Compare components\n\tif (typeof a.component !== typeof b.component) return false\n\t\n\tif (typeof a.component === 'string' && typeof b.component === 'string') {\n\t\tif (normalizeTagName(a.component) !== normalizeTagName(b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (typeof a.component === 'function' && typeof b.component === 'function') {\n\t\tif (!compareCustomElementConstructors(a.component, b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (a.component !== b.component) {\n\t\treturn false\n\t}\n\t\n\t// Compare state\n\tif (JSON.stringify(a.state || {}) !== JSON.stringify(b.state || {})) {\n\t\treturn false\n\t}\n\t\n\t// Compare params\n\tif (JSON.stringify(a.params || {}) !== JSON.stringify(b.params || {})) {\n\t\treturn false\n\t}\n\t\n\treturn true\n}\n\n/**\n * Compare two active routes for equality\n * @param a First active route\n * @param b Second active route\n * @returns true if active routes are equal\n */\nexport function compareActiveRoutes(a: ActiveRoute, b: ActiveRoute): boolean {\n\treturn a.area === b.area &&\n\t\t a.component === b.component &&\n\t\t JSON.stringify(a.state || {}) === JSON.stringify(b.state || {}) &&\n\t\t JSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n}\n\n/**\n * Create a cache key from a route action\n * @param route Route action\n * @returns Cache key string\n */\nexport function createRouteCacheKey(route: RouteAction): string {\n\tconst tagName = getTagName(route.component) || 'unknown'\n\tconst stateHash = simpleHash(JSON.stringify(route.state || {}))\n\tconst paramsHash = simpleHash(JSON.stringify(route.params || {}))\n\t\n\treturn `${route.area}:${tagName}:${stateHash}:${paramsHash}`\n}\n\n/**\n * Simple hash function for creating cache keys\n * @param str String to hash\n * @returns Hash string\n */\nfunction simpleHash(str: string): string {\n\tlet hash = 0\n\t\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + char\n\t\thash = hash & hash // Convert to 32-bit integer\n\t}\n\t\n\treturn Math.abs(hash).toString(36)\n}\n\n/**\n * Sanitize route state to remove sensitive data\n * @param state Route state\n * @param keysToRemove Keys to remove from state\n * @returns Sanitized state\n */\nexport function sanitizeRouteState(\n\tstate: Record<string, unknown>,\n\tkeysToRemove: string[] = ['password', 'token', 'secret', 'apiKey']\n): Record<string, unknown> {\n\tconst sanitized: Record<string, unknown> = {}\n\t\n\tfor (const key in state) {\n\t\tif (state.hasOwnProperty(key) && !keysToRemove.includes(key)) {\n\t\t\tconst value = state[key]\n\t\t\t\n\t\t\tif (isObject(value)) {\n\t\t\t\tsanitized[key] = sanitizeRouteState(value, keysToRemove)\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tsanitized[key] = value.map(item => \n\t\t\t\t\tisObject(item) ? sanitizeRouteState(item, keysToRemove) : item\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tsanitized[key] = value\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn sanitized\n}\n\n/**\n * Extract query parameters from URL\n * @param url URL string or URLSearchParams\n * @returns Object with query parameters\n */\nexport function extractQueryParams(url?: string | URLSearchParams): Record<string, string> {\n\tconst params: Record<string, string> = {}\n\t\n\tlet searchParams: URLSearchParams\n\t\n\tif (url instanceof URLSearchParams) {\n\t\tsearchParams = url\n\t} else if (typeof url === 'string') {\n\t\tconst urlObj = new URL(url, window.location.origin)\n\t\tsearchParams = urlObj.searchParams\n\t} else {\n\t\tsearchParams = new URLSearchParams(window.location.search)\n\t}\n\t\n\tsearchParams.forEach((value, key) => {\n\t\tparams[key] = value\n\t})\n\t\n\treturn params\n}\n\n/**\n * Build query string from parameters object\n * @param params Parameters object\n * @returns Query string with leading '?'\n */\nexport function buildQueryString(params: Record<string, string | number | boolean>): string {\n\tconst searchParams = new URLSearchParams()\n\t\n\tfor (const key in params) {\n\t\tif (params.hasOwnProperty(key)) {\n\t\t\tconst value = params[key]\n\t\t\tif (value !== undefined && value !== null && value !== '') {\n\t\t\t\tsearchParams.set(key, String(value))\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst queryString = searchParams.toString()\n\treturn queryString ? `?${queryString}` : ''\n}","/**\r\n * Lazy loading for Schmancy Area components\r\n * Similar to React.lazy() but adapted for Web Components\r\n */\r\n\r\n// Type definition for custom element constructors\r\ntype CustomElementConstructor = typeof HTMLElement\r\n\r\n/**\r\n * LazyComponent interface with preload capability\r\n */\r\nexport interface LazyComponent<T extends CustomElementConstructor = CustomElementConstructor> {\r\n (): Promise<{ default: T }>\r\n preload(): Promise<void>\r\n _promise?: Promise<{ default: T }>\r\n _module?: { default: T }\r\n}\r\n\r\n/**\r\n * Create a lazy-loaded component that will be imported on demand\r\n *\r\n * @example\r\n * ```typescript\r\n * const LazyProfile = lazy(() => import('./profile'))\r\n *\r\n * // Use with area.push\r\n * area.push({\r\n * component: LazyProfile,\r\n * area: 'main'\r\n * })\r\n *\r\n * // Preload on hover\r\n * element.addEventListener('mouseenter', () => LazyProfile.preload())\r\n * ```\r\n *\r\n * @param loader - Dynamic import function that returns a module with default export\r\n * @returns LazyComponent function compatible with area.push()\r\n */\r\nexport function lazy<T extends CustomElementConstructor>(\r\n loader: () => Promise<{ default: T }>\r\n): LazyComponent<T> {\r\n\r\n // Create the lazy component function\r\n const lazyComponent = function(): Promise<{ default: T }> {\r\n // Return cached promise if already loading/loaded\r\n if (lazyComponent._promise) {\r\n return lazyComponent._promise\r\n }\r\n\r\n // Return cached module if already loaded\r\n if (lazyComponent._module) {\r\n return Promise.resolve(lazyComponent._module)\r\n }\r\n\r\n // Start loading and cache the promise\r\n lazyComponent._promise = loader()\r\n .then(module => {\r\n // Cache the loaded module\r\n lazyComponent._module = module\r\n return module\r\n })\r\n .catch(error => {\r\n // Clear promise on error to allow retry\r\n lazyComponent._promise = undefined\r\n throw error\r\n })\r\n\r\n return lazyComponent._promise\r\n } as LazyComponent<T>\r\n\r\n // Add preload method for manual preloading\r\n lazyComponent.preload = async function(): Promise<void> {\r\n try {\r\n await lazyComponent()\r\n } catch (error) {\r\n console.error('Failed to preload component:', error)\r\n }\r\n }\r\n\r\n return lazyComponent\r\n}\r\n\r\n\r\n"],"names":["compareCustomElementConstructors","constructor1","constructor2","name","obs1","observedAttributes","obs2","Array","isArray","length","every","attr","i","proto1","prototype","proto2","Object","getPrototypeOf","keys1","getOwnPropertyNames","sort","keys2","key","normalizeTagName","tagName","toLowerCase","replace","getTagName","component","HTMLElement","deepMerge","target","source","output","hasOwnProperty","sourceValue","targetValue","isObject","obj","constructor","toString","call","debounce","func","wait","timeout","args","context","this","clearTimeout","setTimeout","apply","encodeRouteState","state","json","JSON","stringify","encodeURIComponent","error","decodeRouteState","encoded","decoded","decodeURIComponent","parsed","parse","compareRouteActions","a","b","area","params","compareActiveRoutes","createRouteCacheKey","route","stateHash","simpleHash","paramsHash","str","hash","charCodeAt","Math","abs","sanitizeRouteState","keysToRemove","sanitized","includes","value","map","item","extractQueryParams","url","searchParams","URLSearchParams","URL","window","location","origin","search","forEach","buildQueryString","set","String","queryString","lazy","loader","lazyComponent","_promise","_module","Promise","resolve","then","module","catch","preload","async"],"mappings":"AAQO,SAASA,EACfC,GACAC,GAAAA;AAGA,MAAID,MAAiBC,EACpB,QAAA;AAID,MAA4B,OAAjBD,KAAiB,cAAsC,OAAjBC,KAAiB,WACjE;AAID,MAAID,EAAaE,QAAQD,EAAaC,QAAQF,EAAaE,SAASD,EAAaC,KAChF,QAAA;AAID,QAAMC,IAAQH,EAAqBI,oBAC7BC,IAAQJ,EAAqBG;AAEnC,MAAID,KAAQE,KACPC,MAAMC,QAAQJ,CAAAA,KAASG,MAAMC,QAAQF,CAAAA,EACxC,QAAIF,EAAKK,WAAWH,EAAKG,UAClBL,EAAKM,MAAM,CAACC,GAAMC,MAAMD,MAASL,EAAKM,CAAAA,CAAAA;AAK/C;AACC,UAAMC,IAASZ,EAAaa,WACtBC,IAASb,EAAaY;AAG5B,QAAIE,OAAOC,eAAeJ,CAAAA,MAAYG,OAAOC,eAAeF,CAAAA,GAAS;AAEpE,YAAMG,IAAQF,OAAOG,oBAAoBN,CAAAA,EAAQO,QAC3CC,IAAQL,OAAOG,oBAAoBJ,CAAAA,EAAQK,KAAAA;AAEjD,aAAOF,EAAMT,WAAWY,EAAMZ,UAC1BS,EAAMR,MAAM,CAACY,GAAKV,MAAMU,MAAQD,EAAMT;IAC3C;AAAA,EACD;EAEA;AAEA,SAAA;AACD;AAOO,SAASW,EAAiBC,GAAAA;AAChC,SAAOA,EACLC,YAAAA,EACAC,QAAQ,cAAc;AACzB;AAOO,SAASC,EAAWC,GAAAA;AAC1B,MAAyB,OAAdA,KAAc,SACxB,QAAOA,EAAUH,YAAAA;AAGlB,MAAIG,aAAqBC,YACxB,QAAOD,EAAUJ,QAAQC,YAAAA;AAG1B,MAAyB,OAAdG,KAAc,YAAY;AAEpC,UAAMzB,IAAOyB,EAAUzB;AACvB,QAAIA,EAEH,QAAOA,EACLuB,QAAQ,YAAY,OACpBD,YAAAA,EACAC,QAAQ,MAAM,EAAA;AAAA,EAElB;AAEA,SAAO;AACR;AAQO,SAASI,EACfC,GACAC,GAAAA;AAEA,QAAMC,IAAS,EAAA,GAAKF;AAEpB,aAAWT,KAAOU,EACjB,KAAIA,EAAOE,eAAeZ,CAAAA,GAAM;AAC/B,UAAMa,IAAcH,EAAOV,CAAAA,GACrBc,IAAcH,EAAOX;AAEvBe,IAAAA,EAASF,CAAAA,KAAgBE,EAASD,CAAAA,IACrCH,EAAOX,CAAAA,IAAOQ,EAAUM,GAAaD,CAAAA,IAErCF,EAAOX,KAAOa;AAAAA,EAEhB;AAGD,SAAOF;AACR;AAOO,SAASI,EAASC,GAAAA;AACxB,SAAOA,MAAQ,QACI,OAARA,KAAQ,YACfA,EAAIC,gBAAgBvB,UACpBA,OAAOF,UAAU0B,SAASC,KAAKH,CAAAA,MAAS;AAC7C;AAQO,SAASI,EACfC,GACAC,GAAAA;AAEA,MAAIC,IAAgD;AAEpD,SAAO,YAAwBC,GAAAA;AAC9B,UAAMC,IAAUC;AAEA,IAAZH,MAAY,QACfI,aAAaJ,CAAAA,GAGdA,IAAUK,WAAW,MAAA;AACpBP,MAAAA,EAAKQ,MAAMJ,GAASD,IACpBD,IAAU;AAAA,IAAA,GACRD;EACJ;AACD;AAOO,SAASQ,EAAiBC,GAAAA;AAChC,MAAA;AACC,UAAMC,IAAOC,KAAKC,UAAUH;AAC5B,WAAOI,mBAAmBH;EAC3B,QAASI;AAER,WAAO;AAAA,EACR;AACD;AAOO,SAASC,EAAiBC;AAChC,MAAA,CAAKA,EAAS,QAAO,CAAA;AAErB,MAAA;AACC,UAAMC,IAAUC,mBAAmBF,CAAAA,GAC7BG,IAASR,KAAKS,MAAMH,CAAAA;AAE1B,QAAIxB,EAAS0B,CAAAA,EACZ,QAAOA;AAAAA,EAET,QAASL;AAAAA,EAET;AAEA,SAAO,CAAA;AACR;AAQO,SAASO,EAAoBC,GAAgBC,GAAAA;AAKnD,MAHID,EAAEE,SAASD,EAAEC,QAGjB,OAAWF,EAAEtC,aAAAA,OAAqBuC,EAAEvC,UAAW,QAAA;AAE/C,aAAWsC,EAAEtC,aAAc,mBAAmBuC,EAAEvC,aAAc;AAC7D,QAAIL,EAAiB2C,EAAEtC,SAAAA,MAAeL,EAAiB4C,EAAEvC,SAAAA,EACxD,QAAA;AAAA,aAEgC,OAAhBsC,EAAEtC,aAAc,cAAqC,OAAhBuC,EAAEvC,aAAc;AACtE,SAAK5B,EAAiCkE,EAAEtC,WAAWuC,EAAEvC,SAAAA,EACpD;aAESsC,EAAEtC,cAAcuC,EAAEvC,UAC5B,QAAA;AAID,SAAI2B,KAAKC,UAAUU,EAAEb,SAAS,CAAA,OAAQE,KAAKC,UAAUW,EAAEd,SAAS,CAAA,MAK5DE,KAAKC,UAAUU,EAAEG,UAAU,CAAA,CAAA,MAAQd,KAAKC,UAAUW,EAAEE,UAAU,CAAA,CAAA;AAKnE;AAQO,SAASC,EAAoBJ,GAAgBC,GAAAA;AACnD,SAAOD,EAAEE,SAASD,EAAEC,QAChBF,EAAEtC,cAAcuC,EAAEvC,aAClB2B,KAAKC,UAAUU,EAAEb,SAAS,CAAA,CAAA,MAAQE,KAAKC,UAAUW,EAAEd,SAAS,CAAA,CAAA,KAC5DE,KAAKC,UAAUU,EAAEG,UAAU,CAAA,CAAA,MAAQd,KAAKC,UAAUW,EAAEE,UAAU,CAAA,CAAA;AACnE;AAOO,SAASE,EAAoBC,GAAAA;AACnC,QAAMhD,IAAUG,EAAW6C,EAAM5C,SAAAA,KAAc,WACzC6C,IAAYC,EAAWnB,KAAKC,UAAUgB,EAAMnB,SAAS,CAAA,KACrDsB,IAAaD,EAAWnB,KAAKC,UAAUgB,EAAMH,UAAU,CAAA,CAAA,CAAA;AAE7D,SAAO,GAAGG,EAAMJ,IAAAA,IAAQ5C,KAAWiD,CAAAA,IAAaE,CAAAA;AACjD;AAOA,SAASD,EAAWE,GAAAA;AACnB,MAAIC,IAAO;AAEX,WAASjE,IAAI,GAAGA,IAAIgE,EAAInE,QAAQG;AAE/BiE,IAAAA,KAASA,KAAQ,KAAKA,IADTD,EAAIE,WAAWlE,CAAAA,GAE5BiE,KAAcA;AAGf,SAAOE,KAAKC,IAAIH,CAAAA,EAAMrC,SAAS;AAChC;AAQO,SAASyC,EACf5B,GACA6B,IAAyB,CAAC,YAAY,SAAS,UAAU,QAAA,GAAA;AAEzD,QAAMC,IAAqC,CAAA;AAE3C,aAAW7D,KAAO+B,EACjB,KAAIA,EAAMnB,eAAeZ,OAAS4D,EAAaE,SAAS9D,CAAAA,GAAM;AAC7D,UAAM+D,IAAQhC,EAAM/B;AAEhBe,IAAAA,EAASgD,CAAAA,IACZF,EAAU7D,CAAAA,IAAO2D,EAAmBI,GAAOH,CAAAA,IACjC3E,MAAMC,QAAQ6E,CAAAA,IACxBF,EAAU7D,CAAAA,IAAO+D,EAAMC,WACtBjD,EAASkD,CAAAA,IAAQN,EAAmBM,GAAML,CAAAA,IAAgBK,KAG3DJ,EAAU7D,CAAAA,IAAO+D;AAAAA,EAEnB;AAGD,SAAOF;AACR;AAOO,SAASK,EAAmBC,GAAAA;AAClC,QAAMpB,IAAiC,CAAA;AAEvC,MAAIqB;AAEJ,SAAID,aAAeE,kBAClBD,IAAeD,IACU,OAARA,KAAQ,WAEzBC,IADe,IAAIE,IAAIH,GAAKI,OAAOC,SAASC,MAAAA,EACtBL,eAEtBA,IAAe,IAAIC,gBAAgBE,OAAOC,SAASE,MAAAA,GAGpDN,EAAaO,QAAQ,CAACZ,GAAO/D,MAAAA;AAC5B+C,IAAAA,EAAO/C,CAAAA,IAAO+D;AAAAA,EAAAA,CAAAA,GAGRhB;AACR;AAOO,SAAS6B,EAAiB7B,GAAAA;AAChC,QAAMqB,IAAe,IAAIC;AAEzB,aAAWrE,KAAO+C,EACjB,KAAIA,EAAOnC,eAAeZ,CAAAA,GAAM;AAC/B,UAAM+D,IAAQhB,EAAO/C,CAAAA;AACjB+D,SAAAA,QAAyCA,MAAU,MACtDK,EAAaS,IAAI7E,GAAK8E,OAAOf,CAAAA,CAAAA;AAAAA,EAE/B;AAGD,QAAMgB,IAAcX,EAAalD,SAAAA;AACjC,SAAO6D,IAAc,IAAIA,MAAgB;AAC1C;ACjUO,SAASC,EACdC;AAIA,QAAMC,IAAgB,WAAA;AAEpB,WAAIA,EAAcC,WACTD,EAAcC,WAInBD,EAAcE,UACTC,QAAQC,QAAQJ,EAAcE,OAAAA,KAIvCF,EAAcC,WAAWF,EAAAA,EACtBM,KAAKC,QAEJN,EAAcE,UAAUI,GACjBA,EAAAA,EAERC,MAAMrD,OAAAA;AAGL,YADA8C,EAAcC,WAAAA,QACR/C;AAAAA,IAAAA,CAAAA,GAGH8C,EAAcC;AAAAA,EACvB;AAWA,SARAD,EAAcQ,UAAUC;AACtB,QAAA;AAAA,YACQT,EAAAA;AAAAA,IACR;IAEA;AAAA,EACF,GAEOA;AACT;"}
|
|
1
|
+
{"version":3,"file":"lazy-E2LCDm7n.js","sources":["../src/area/utils.ts","../src/area/lazy.ts"],"sourcesContent":["import { ComponentType } from './area.component'\nimport { RouteAction, ActiveRoute } from './router.types'\n\n/**\n * Compare two custom element constructors for equality\n * @param constructor1 First constructor to compare\n * @param constructor2 Second constructor to compare\n * @returns true if constructors are functionally equivalent\n */\nexport function compareCustomElementConstructors(\n\tconstructor1: CustomElementConstructor | Function,\n\tconstructor2: CustomElementConstructor | Function,\n): boolean {\n\t// Quick reference check\n\tif (constructor1 === constructor2) {\n\t\treturn true\n\t}\n\n\t// Check if both are functions\n\tif (typeof constructor1 !== 'function' || typeof constructor2 !== 'function') {\n\t\treturn false\n\t}\n\n\t// Compare by name (handles minification)\n\tif (constructor1.name && constructor2.name && constructor1.name === constructor2.name) {\n\t\treturn true\n\t}\n\n\t// Compare observed attributes if available\n\tconst obs1 = (constructor1 as any).observedAttributes\n\tconst obs2 = (constructor2 as any).observedAttributes\n\n\tif (obs1 && obs2) {\n\t\tif (Array.isArray(obs1) && Array.isArray(obs2)) {\n\t\t\tif (obs1.length !== obs2.length) return false\n\t\t\treturn obs1.every((attr, i) => attr === obs2[i])\n\t\t}\n\t}\n\n\t// Try to compare prototypes\n\ttry {\n\t\tconst proto1 = constructor1.prototype\n\t\tconst proto2 = constructor2.prototype\n\n\t\t// Check if they have the same prototype chain\n\t\tif (Object.getPrototypeOf(proto1) === Object.getPrototypeOf(proto2)) {\n\t\t\t// Check if they have the same property names\n\t\t\tconst keys1 = Object.getOwnPropertyNames(proto1).sort()\n\t\t\tconst keys2 = Object.getOwnPropertyNames(proto2).sort()\n\n\t\t\treturn keys1.length === keys2.length && keys1.every((key, i) => key === keys2[i])\n\t\t}\n\t} catch {\n\t\t// Ignore prototype access errors\n\t}\n\n\treturn false\n}\n\n/**\n * Normalize a component tag name for comparison\n * @param tagName Tag name to normalize\n * @returns Normalized tag name\n */\nexport function normalizeTagName(tagName: string): string {\n\treturn tagName.toLowerCase().replace(/[^a-z0-9]/g, '') // Remove all non-alphanumeric characters\n}\n\n/**\n * Get tag name from a component\n * @param component Component to get tag name from\n * @returns Tag name or null if unable to determine\n */\nexport function getTagName(component: ComponentType): string | null {\n\tif (typeof component === 'string') {\n\t\treturn component.toLowerCase()\n\t}\n\n\tif (component instanceof HTMLElement) {\n\t\treturn component.tagName.toLowerCase()\n\t}\n\n\tif (typeof component === 'function') {\n\t\t// Try to get custom element name from constructor\n\t\tconst name = component.name\n\t\tif (name) {\n\t\t\t// Convert PascalCase to kebab-case\n\t\t\treturn name\n\t\t\t\t.replace(/([A-Z])/g, '-$1')\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/^-/, '')\n\t\t}\n\t}\n\n\treturn null\n}\n\n/**\n * Deep merge two objects\n * @param target Target object\n * @param source Source object to merge\n * @returns Merged object\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n\tconst output = { ...target }\n\n\tfor (const key in source) {\n\t\tif (source.hasOwnProperty(key)) {\n\t\t\tconst sourceValue = source[key]\n\t\t\tconst targetValue = output[key]\n\n\t\t\tif (isObject(sourceValue) && isObject(targetValue)) {\n\t\t\t\toutput[key] = deepMerge(targetValue, sourceValue)\n\t\t\t} else {\n\t\t\t\toutput[key] = sourceValue as T[Extract<keyof T, string>]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output\n}\n\n/**\n * Check if value is a plain object\n * @param obj Value to check\n * @returns true if value is a plain object\n */\nexport function isObject(obj: any): obj is Record<string, any> {\n\treturn (\n\t\tobj !== null &&\n\t\ttypeof obj === 'object' &&\n\t\tobj.constructor === Object &&\n\t\tObject.prototype.toString.call(obj) === '[object Object]'\n\t)\n}\n\n/**\n * Debounce a function\n * @param func Function to debounce\n * @param wait Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null\n\n\treturn function (this: any, ...args: Parameters<T>) {\n\t\tconst context = this\n\n\t\tif (timeout !== null) {\n\t\t\tclearTimeout(timeout)\n\t\t}\n\n\t\ttimeout = setTimeout(() => {\n\t\t\tfunc.apply(context, args)\n\t\t\ttimeout = null\n\t\t}, wait)\n\t}\n}\n\n/**\n * Create a URL-safe string from route state\n * @param state Route state object\n * @returns URL-safe encoded string\n */\nexport function encodeRouteState(state: Record<string, unknown>): string {\n\ttry {\n\t\tconst json = JSON.stringify(state)\n\t\treturn encodeURIComponent(json)\n\t} catch (error) {\n\t\tconsole.error('Failed to encode route state:', error)\n\t\treturn ''\n\t}\n}\n\n/**\n * Decode a URL-safe string to route state\n * @param encoded Encoded string\n * @returns Decoded route state or empty object\n */\nexport function decodeRouteState(encoded: string): Record<string, unknown> {\n\tif (!encoded) return {}\n\n\ttry {\n\t\tconst decoded = decodeURIComponent(encoded)\n\t\tconst parsed = JSON.parse(decoded)\n\n\t\tif (isObject(parsed)) {\n\t\t\treturn parsed\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Failed to decode route state:', error)\n\t}\n\n\treturn {}\n}\n\n/**\n * Compare two route actions for equality\n * @param a First route action\n * @param b Second route action\n * @returns true if route actions are equal\n */\nexport function compareRouteActions(a: RouteAction, b: RouteAction): boolean {\n\t// Compare areas\n\tif (a.area !== b.area) return false\n\n\t// Compare components\n\tif (typeof a.component !== typeof b.component) return false\n\n\tif (typeof a.component === 'string' && typeof b.component === 'string') {\n\t\tif (normalizeTagName(a.component) !== normalizeTagName(b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (typeof a.component === 'function' && typeof b.component === 'function') {\n\t\tif (!compareCustomElementConstructors(a.component, b.component)) {\n\t\t\treturn false\n\t\t}\n\t} else if (a.component !== b.component) {\n\t\treturn false\n\t}\n\n\t// Compare state\n\tif (JSON.stringify(a.state || {}) !== JSON.stringify(b.state || {})) {\n\t\treturn false\n\t}\n\n\t// Compare params\n\tif (JSON.stringify(a.params || {}) !== JSON.stringify(b.params || {})) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n/**\n * Compare two active routes for equality\n * @param a First active route\n * @param b Second active route\n * @returns true if active routes are equal\n */\nexport function compareActiveRoutes(a: ActiveRoute, b: ActiveRoute): boolean {\n\treturn (\n\t\ta.area === b.area &&\n\t\ta.component === b.component &&\n\t\tJSON.stringify(a.state || {}) === JSON.stringify(b.state || {}) &&\n\t\tJSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n\t)\n}\n\n/**\n * Create a cache key from a route action\n * @param route Route action\n * @returns Cache key string\n */\nexport function createRouteCacheKey(route: RouteAction): string {\n\tconst tagName = getTagName(route.component) || 'unknown'\n\tconst stateHash = simpleHash(JSON.stringify(route.state || {}))\n\tconst paramsHash = simpleHash(JSON.stringify(route.params || {}))\n\n\treturn `${route.area}:${tagName}:${stateHash}:${paramsHash}`\n}\n\n/**\n * Simple hash function for creating cache keys\n * @param str String to hash\n * @returns Hash string\n */\nfunction simpleHash(str: string): string {\n\tlet hash = 0\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charCodeAt(i)\n\t\thash = (hash << 5) - hash + char\n\t\thash = hash & hash // Convert to 32-bit integer\n\t}\n\n\treturn Math.abs(hash).toString(36)\n}\n\n/**\n * Sanitize route state to remove sensitive data\n * @param state Route state\n * @param keysToRemove Keys to remove from state\n * @returns Sanitized state\n */\nexport function sanitizeRouteState(\n\tstate: Record<string, unknown>,\n\tkeysToRemove: string[] = ['password', 'token', 'secret', 'apiKey'],\n): Record<string, unknown> {\n\tconst sanitized: Record<string, unknown> = {}\n\n\tfor (const key in state) {\n\t\tif (state.hasOwnProperty(key) && !keysToRemove.includes(key)) {\n\t\t\tconst value = state[key]\n\n\t\t\tif (isObject(value)) {\n\t\t\t\tsanitized[key] = sanitizeRouteState(value, keysToRemove)\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tsanitized[key] = value.map(item => (isObject(item) ? sanitizeRouteState(item, keysToRemove) : item))\n\t\t\t} else {\n\t\t\t\tsanitized[key] = value\n\t\t\t}\n\t\t}\n\t}\n\n\treturn sanitized\n}\n\n/**\n * Extract query parameters from URL\n * @param url URL string or URLSearchParams\n * @returns Object with query parameters\n */\nexport function extractQueryParams(url?: string | URLSearchParams): Record<string, string> {\n\tconst params: Record<string, string> = {}\n\n\tlet searchParams: URLSearchParams\n\n\tif (url instanceof URLSearchParams) {\n\t\tsearchParams = url\n\t} else if (typeof url === 'string') {\n\t\tconst urlObj = new URL(url, window.location.origin)\n\t\tsearchParams = urlObj.searchParams\n\t} else {\n\t\tsearchParams = new URLSearchParams(window.location.search)\n\t}\n\n\tsearchParams.forEach((value, key) => {\n\t\tparams[key] = value\n\t})\n\n\treturn params\n}\n\n/**\n * Build query string from parameters object\n * @param params Parameters object\n * @returns Query string with leading '?'\n */\nexport function buildQueryString(params: Record<string, string | number | boolean>): string {\n\tconst searchParams = new URLSearchParams()\n\n\tfor (const key in params) {\n\t\tif (params.hasOwnProperty(key)) {\n\t\t\tconst value = params[key]\n\t\t\tif (value !== undefined && value !== null && value !== '') {\n\t\t\t\tsearchParams.set(key, String(value))\n\t\t\t}\n\t\t}\n\t}\n\n\tconst queryString = searchParams.toString()\n\treturn queryString ? `?${queryString}` : ''\n}\n","/**\r\n * Lazy loading for Schmancy Area components\r\n * Similar to React.lazy() but adapted for Web Components\r\n */\r\n\r\n// Type definition for custom element constructors\r\ntype CustomElementConstructor = typeof HTMLElement\r\n\r\n/**\r\n * LazyComponent interface with preload capability\r\n */\r\nexport interface LazyComponent<T extends CustomElementConstructor = CustomElementConstructor> {\r\n (): Promise<{ default: T }>\r\n preload(): Promise<void>\r\n _promise?: Promise<{ default: T }>\r\n _module?: { default: T }\r\n}\r\n\r\n/**\r\n * Create a lazy-loaded component that will be imported on demand\r\n *\r\n * @example\r\n * ```typescript\r\n * const LazyProfile = lazy(() => import('./profile'))\r\n *\r\n * // Use with area.push\r\n * area.push({\r\n * component: LazyProfile,\r\n * area: 'main'\r\n * })\r\n *\r\n * // Preload on hover\r\n * element.addEventListener('mouseenter', () => LazyProfile.preload())\r\n * ```\r\n *\r\n * @param loader - Dynamic import function that returns a module with default export\r\n * @returns LazyComponent function compatible with area.push()\r\n */\r\nexport function lazy<T extends CustomElementConstructor>(\r\n loader: () => Promise<{ default: T }>\r\n): LazyComponent<T> {\r\n\r\n // Create the lazy component function\r\n const lazyComponent = function(): Promise<{ default: T }> {\r\n // Return cached promise if already loading/loaded\r\n if (lazyComponent._promise) {\r\n return lazyComponent._promise\r\n }\r\n\r\n // Return cached module if already loaded\r\n if (lazyComponent._module) {\r\n return Promise.resolve(lazyComponent._module)\r\n }\r\n\r\n // Start loading and cache the promise\r\n lazyComponent._promise = loader()\r\n .then(module => {\r\n // Cache the loaded module\r\n lazyComponent._module = module\r\n return module\r\n })\r\n .catch(error => {\r\n // Clear promise on error to allow retry\r\n lazyComponent._promise = undefined\r\n throw error\r\n })\r\n\r\n return lazyComponent._promise\r\n } as LazyComponent<T>\r\n\r\n // Add preload method for manual preloading\r\n lazyComponent.preload = async function(): Promise<void> {\r\n try {\r\n await lazyComponent()\r\n } catch (error) {\r\n console.error('Failed to preload component:', error)\r\n }\r\n }\r\n\r\n return lazyComponent\r\n}\r\n\r\n\r\n"],"names":["compareCustomElementConstructors","constructor1","constructor2","name","obs1","observedAttributes","obs2","Array","isArray","length","every","attr","i","proto1","prototype","proto2","Object","getPrototypeOf","keys1","getOwnPropertyNames","sort","keys2","key","normalizeTagName","tagName","toLowerCase","replace","getTagName","component","HTMLElement","deepMerge","target","source","output","hasOwnProperty","sourceValue","targetValue","isObject","obj","constructor","toString","call","debounce","func","wait","timeout","args","context","this","clearTimeout","setTimeout","apply","encodeRouteState","state","json","JSON","stringify","encodeURIComponent","error","decodeRouteState","encoded","decoded","decodeURIComponent","parsed","parse","compareRouteActions","a","b","area","params","compareActiveRoutes","createRouteCacheKey","route","stateHash","simpleHash","paramsHash","str","hash","charCodeAt","Math","abs","sanitizeRouteState","keysToRemove","sanitized","includes","value","map","item","extractQueryParams","url","searchParams","URLSearchParams","URL","window","location","origin","search","forEach","buildQueryString","set","String","queryString","lazy","loader","lazyComponent","_promise","_module","Promise","resolve","then","module","catch","preload","async"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const y=require("./consume-edta5ng5.cjs");require("rxjs"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const r=require("lit/decorators.js"),m=require("./tailwind.mixin-
|
|
1
|
+
"use strict";const y=require("./consume-edta5ng5.cjs");require("rxjs"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const r=require("lit/decorators.js"),m=require("./tailwind.mixin-Cb-fyJ_y.cjs"),d=require("./provide-BxZ2kn_p.cjs"),p=require("lit"),h=require("lit/directives/when.js"),u=d.n(void 0),f=d.n("surface");var g=Object.defineProperty,v=Object.getOwnPropertyDescriptor,a=(t,s,n,i)=>{for(var o,e=i>1?void 0:i?v(s,n):s,l=t.length-1;l>=0;l--)(o=t[l])&&(e=(i?o(s,n,e):o(e))||e);return i&&e&&g(s,n,e),e};exports.SchmancyListItem=class extends m.TailwindElement(){constructor(){super(...arguments),this.selected=!1}get imgClasses(){return["h-5","w-5","sm:h-6","sm:w-6","object-contain"]}firstUpdated(){this.leading?.forEach(t=>{t.classList.add(...this.imgClasses)}),this.trailing?.forEach(t=>{t.classList.add(...this.imgClasses)})}render(){const t={"rounded-none":this.rounded===!1,"rounded-full":this.rounded,"relative inset-0 w-full flex items-center min-h-[44px] sm:min-h-[48px] md:min-h-[56px] py-1 px-2 sm:py-2 sm:px-3 md:py-2 md:px-4 text-sm sm:text-base duration-500 transition-colors focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden":!0,"bg-secondary-container text-secondery-onContainer":this.selected},s={"z-0 duration-500 transition-opacity":!0,"rounded-none":this.rounded===!1,"rounded-full":this.rounded,"hover:bg-surface-on opacity-[0.08] cursor-pointer absolute inset-0 ":!this.readonly};return p.html` <li .tabIndex=${this.readonly?-1:0} class=${this.classMap(t)}>
|
|
2
2
|
${h.when(!this.readonly,()=>p.html` <div class="${this.classMap(s)}"></div>`)}
|
|
3
3
|
<slot></slot>
|
|
4
4
|
</li>`}},a([y.c({context:f,subscribe:!0}),r.property()],exports.SchmancyListItem.prototype,"variant",2),a([r.property({type:Boolean})],exports.SchmancyListItem.prototype,"rounded",2),a([r.property({type:Boolean})],exports.SchmancyListItem.prototype,"readonly",2),a([r.property({type:Boolean})],exports.SchmancyListItem.prototype,"selected",2),a([r.queryAssignedElements({slot:"leading",flatten:!0})],exports.SchmancyListItem.prototype,"leading",2),a([r.queryAssignedElements({slot:"trailing",flatten:!0})],exports.SchmancyListItem.prototype,"trailing",2),exports.SchmancyListItem=a([r.customElement("schmancy-list-item")],exports.SchmancyListItem);var b=Object.defineProperty,x=Object.getOwnPropertyDescriptor,c=(t,s,n,i)=>{for(var o,e=i>1?void 0:i?x(s,n):s,l=t.length-1;l>=0;l--)(o=t[l])&&(e=(i?o(s,n,e):o(e))||e);return i&&e&&b(s,n,e),e};exports.List=class extends m.TailwindElement(p.css`
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
</ul>
|
|
15
15
|
</schmancy-surface>
|
|
16
16
|
`}},c([d.e({context:u}),r.property()],exports.List.prototype,"surface",2),c([r.property({type:String,reflect:!0})],exports.List.prototype,"fill",2),c([r.property({type:Number})],exports.List.prototype,"elevation",2),exports.List=c([r.customElement("schmancy-list")],exports.List),exports.SchmancyListTypeContext=u;
|
|
17
|
-
//# sourceMappingURL=list-
|
|
17
|
+
//# sourceMappingURL=list-CDXL73JQ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-CDXL73JQ.cjs","sources":["../src/list/context.ts","../src/surface/context.ts","../src/list/list-item.ts","../src/list/list.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancyListTypeContext = createContext<TSurfaceColor>(undefined)\n","import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n","import { consume } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceTypeContext } from '@schmancy/surface/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\n\n/**\n * @element schmancy-list-item\n * @slot leading - leading content\n * @slot trailing - trailing content\n * @slot - default content\n */\n@customElement('schmancy-list-item')\nexport class SchmancyListItem extends TailwindElement() {\n\t@consume({ context: SchmancySurfaceTypeContext, subscribe: true })\n\t@property()\n\tvariant: TSurfaceColor\n\n\t@property({ type: Boolean })\n\trounded: boolean\n\n\t@property({ type: Boolean }) readonly: boolean\n\n\t@property({ type: Boolean }) selected: boolean = false\n\n\t@queryAssignedElements({\n\t\tslot: 'leading',\n\t\tflatten: true,\n\t})\n\tprivate leading!: HTMLElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'trailing',\n\t\tflatten: true,\n\t})\n\tprivate trailing!: HTMLElement[]\n\n\tprotected get imgClasses(): string[] {\n\t\treturn ['h-5', 'w-5', 'sm:h-6', 'sm:w-6', 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\tthis.leading?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t\tthis.trailing?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'relative inset-0 w-full flex items-center min-h-[44px] sm:min-h-[48px] md:min-h-[56px] py-1 px-2 sm:py-2 sm:px-3 md:py-2 md:px-4 text-sm sm:text-base duration-500 transition-colors focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'bg-secondary-container text-secondery-onContainer': this.selected,\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'z-0 duration-500 transition-opacity': true,\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'hover:bg-surface-on opacity-[0.08] cursor-pointer absolute inset-0 ': !this.readonly,\n\t\t}\n\t\treturn html` <li .tabIndex=${this.readonly ? -1 : 0} class=${this.classMap(classes)}>\n\t\t\t${when(!this.readonly, () => html` <div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t<slot></slot>\n\t\t</li>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list-item': SchmancyListItem\n\t}\n}\n","import { provide } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceFill } from '@schmancy/surface'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyListTypeContext } from './context'\n\n/**\n * `<schmancy-list>` component.\n *\n * A list component that wraps its content within a customizable surface.\n * It allows you to set the surface type and fill style, and can optionally\n * enable scrolling behavior by delegating the scroller attribute to the surface.\n *\n * @element schmancy-list\n * @slot - The default slot for list items.\n *\n * @example\n * <schmancy-list surface=\"container\" scroller>\n * <schmancy-list-item>List Item 1</schmancy-list-item>\n * </schmancy-list>\n */\n@customElement('schmancy-list')\nexport class List extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding-top: 8px;\n\t\tpadding-bottom: 8px;\n\t}\n`) {\n\t/**\n\t * Defines the type or color of the surface used by the component.\n\t * This value is provided to descendant components via context.\n\t *\n\t * @attr surface\n\t * @type {TSurfaceColor}\n\t * @default 'surface'\n\t */\n\t@provide({ context: SchmancyListTypeContext })\n\t@property()\n\tsurface: TSurfaceColor\n\n\t/**\n\t * Determines the fill style of the underlying surface.\n\t *\n\t * @attr fill\n\t * @type {SchmancySurfaceFill}\n\t * @default 'auto'\n\t */\n\t@property({ type: String, reflect: true })\n\tfill: SchmancySurfaceFill = 'auto'\n\n\t/**\n\t * Defines the elevation level of the surface.\n\t *\n\t * @attr elevation\n\t * @type {number}\n\t * @default 0\n\t */\n\t@property({ type: Number })\n\televation: 0 | 1 | 2 | 3 | 4 | 5 = 0\n\n\t/**\n\t * Renders the component's template.\n\t * The list content is wrapped inside a `<schmancy-surface>` element.\n\t * The scroller property is delegated to the surface so that it controls\n\t * the scrollable behavior.\n\t *\n\t * @returns The HTML template for the component.\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-surface .elevation=${this.elevation} .fill=${this.fill} type=${this.surface}>\n\t\t\t\t<ul>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ul>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list': List\n\t}\n}\n"],"names":["SchmancyListTypeContext","createContext","SchmancySurfaceTypeContext","SchmancyListItem","TailwindElement","super","arguments","this","selected","firstUpdated","leading","forEach","img","classList","add","imgClasses","trailing","render","classes","rounded","stateLayerClasses","readonly","html","classMap","when","__decorateClass","consume","context","subscribe","property","prototype","type","Boolean","queryAssignedElements","slot","flatten","customElement","List","css","constructor","fill","elevation","surface","provide","String","reflect","Number"],"mappings":"8TAEaA,EAA0BC,EAAAA,EAAAA,MAA6B,ECAvDC,EAA6BD,EAAAA,EAA6B,SAAA,kMCa1DE,QAAAA,iBAAN,cAA+BC,EAAAA,gBAAAA,CAAAA,CAA/B,cAAAC,MAAAA,GAAAC,SAAAA,EAUuBC,KAAAC,SAAAA,EAAoB,CAcjD,IAAA,aACC,MAAO,CAAC,MAAO,MAAO,SAAU,SAAU,gBAAA,CAC3C,CAEA,cAAAC,CACCF,KAAKG,SAASC,QAAQC,IACrBA,EAAIC,UAAUC,IAAAA,GAAOP,KAAKQ,cAE3BR,KAAKS,UAAUL,QAAQC,GAAAA,CACtBA,EAAIC,UAAUC,IAAAA,GAAOP,KAAKQ,UAAAA,CAAAA,CAAAA,CAE5B,CAEA,QAAAE,CACC,MAAMC,EAAU,CACf,eAAgBX,KAAKY,UAArB,GACA,eAAgBZ,KAAKY,QACrB,qUAAA,GAEA,oDAAqDZ,KAAKC,QAAAA,EAGrDY,EAAoB,CACzB,sCAAA,GACA,eAAgBb,KAAKY,UAArB,GACA,eAAgBZ,KAAKY,QACrB,uEAAwEZ,KAAKc,QAAAA,EAE9E,OAAOC,wBAAsBf,KAAKc,YAAgB,CAAA,UAAWd,KAAKgB,SAASL,CAAAA,CAAAA;AAAAA,KACxEM,QAAMjB,KAAKc,SAAU,IAAMC,EAAAA,oBAAoBf,KAAKgB,SAASH,CAAAA,CAAAA,UAAAA,CAAAA;AAAAA;AAAAA,QAGjE,CAAA,EArDAK,EAAA,CAFCC,EAAAA,EAAQ,CAAEC,QAASzB,EAA4B0B,UAAAA,EAAW,CAAA,EAC1DC,EAAAA,SAAAA,CAAAA,EAFW1B,yBAGZ2B,UAAA,UAAA,CAAA,EAGAL,EAAA,CADCI,WAAS,CAAEE,KAAMC,WALN7B,yBAMZ2B,UAAA,UAAA,GAE6BL,EAAA,CAA5BI,WAAS,CAAEE,KAAMC,OAAAA,CAAAA,CAAAA,EARN7B,yBAQiB2B,UAAA,WAAA,CAAA,EAEAL,EAAA,CAA5BI,WAAS,CAAEE,KAAMC,WAVN7B,yBAUiB2B,UAAA,WAAA,GAMrBL,EAAA,CAJPQ,wBAAsB,CACtBC,KAAM,UACNC,QAAAA,MAdWhC,yBAgBJ2B,UAAA,UAAA,GAMAL,EAAA,CAJPQ,wBAAsB,CACtBC,KAAM,WACNC,QAAAA,EAAS,CAAA,CAAA,EApBEhC,yBAsBJ2B,UAAA,WAAA,GAtBI3B,QAAAA,iBAANsB,EAAA,CADNW,EAAAA,cAAc,oBAAA,CAAA,EACFjC,0NCSAkC,QAAAA,KAAN,cAAmBjC,EAAAA,gBAAgBkC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAAnC,CAAA,CAAA,aAAAC,CAAAlC,MAAAA,GAAAC,SAAAA,EA2BNC,KAAAiC,KAA4B,OAU5BjC,KAAAkC,UAAmC,CAAA,CAUnC,QAAAxB,CACC,OAAOK,EAAAA;AAAAA,kCACyBf,KAAKkC,SAAAA,UAAmBlC,KAAKiC,IAAAA,SAAajC,KAAKmC,OAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAMhF,CAAA,EAtCAjB,EAAA,CAFCkB,IAAQ,CAAEhB,QAAS3B,CAAAA,CAAAA,EACnB6B,EAAAA,SAAAA,CAAAA,EAhBWQ,aAiBZP,UAAA,UAAA,CAAA,EAUAL,EAAA,CADCI,EAAAA,SAAS,CAAEE,KAAMa,OAAQC,QAAAA,EAAS,CAAA,CAAA,EA1BvBR,aA2BZP,UAAA,OAAA,CAAA,EAUAL,EAAA,CADCI,WAAS,CAAEE,KAAMe,MAAAA,CAAAA,CAAAA,EApCNT,aAqCZP,UAAA,YAAA,CAAA,EArCYO,QAAAA,KAANZ,EAAA,CADNW,EAAAA,cAAc,eAAA,CAAA,EACFC"}
|
|
@@ -3,7 +3,7 @@ import "rxjs";
|
|
|
3
3
|
import "lit/directives/class-map.js";
|
|
4
4
|
import "lit/directives/style-map.js";
|
|
5
5
|
import { property as p, queryAssignedElements as m, customElement as h } from "lit/decorators.js";
|
|
6
|
-
import { T as y } from "./tailwind.mixin-
|
|
6
|
+
import { T as y } from "./tailwind.mixin-CPuO9c5y.js";
|
|
7
7
|
import { n as f, e as v } from "./provide-tcktw8xB.js";
|
|
8
8
|
import { html as u, css as b } from "lit";
|
|
9
9
|
import { when as x } from "lit/directives/when.js";
|
|
@@ -65,4 +65,4 @@ export {
|
|
|
65
65
|
$ as S,
|
|
66
66
|
r as a
|
|
67
67
|
};
|
|
68
|
-
//# sourceMappingURL=list-
|
|
68
|
+
//# sourceMappingURL=list-rmfIuWZK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-rmfIuWZK.js","sources":["../src/list/context.ts","../src/surface/context.ts","../src/list/list-item.ts","../src/list/list.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancyListTypeContext = createContext<TSurfaceColor>(undefined)\n","import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n","import { consume } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceTypeContext } from '@schmancy/surface/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\n\n/**\n * @element schmancy-list-item\n * @slot leading - leading content\n * @slot trailing - trailing content\n * @slot - default content\n */\n@customElement('schmancy-list-item')\nexport class SchmancyListItem extends TailwindElement() {\n\t@consume({ context: SchmancySurfaceTypeContext, subscribe: true })\n\t@property()\n\tvariant: TSurfaceColor\n\n\t@property({ type: Boolean })\n\trounded: boolean\n\n\t@property({ type: Boolean }) readonly: boolean\n\n\t@property({ type: Boolean }) selected: boolean = false\n\n\t@queryAssignedElements({\n\t\tslot: 'leading',\n\t\tflatten: true,\n\t})\n\tprivate leading!: HTMLElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'trailing',\n\t\tflatten: true,\n\t})\n\tprivate trailing!: HTMLElement[]\n\n\tprotected get imgClasses(): string[] {\n\t\treturn ['h-5', 'w-5', 'sm:h-6', 'sm:w-6', 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\tthis.leading?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t\tthis.trailing?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'relative inset-0 w-full flex items-center min-h-[44px] sm:min-h-[48px] md:min-h-[56px] py-1 px-2 sm:py-2 sm:px-3 md:py-2 md:px-4 text-sm sm:text-base duration-500 transition-colors focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'bg-secondary-container text-secondery-onContainer': this.selected,\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'z-0 duration-500 transition-opacity': true,\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'hover:bg-surface-on opacity-[0.08] cursor-pointer absolute inset-0 ': !this.readonly,\n\t\t}\n\t\treturn html` <li .tabIndex=${this.readonly ? -1 : 0} class=${this.classMap(classes)}>\n\t\t\t${when(!this.readonly, () => html` <div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t<slot></slot>\n\t\t</li>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list-item': SchmancyListItem\n\t}\n}\n","import { provide } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceFill } from '@schmancy/surface'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyListTypeContext } from './context'\n\n/**\n * `<schmancy-list>` component.\n *\n * A list component that wraps its content within a customizable surface.\n * It allows you to set the surface type and fill style, and can optionally\n * enable scrolling behavior by delegating the scroller attribute to the surface.\n *\n * @element schmancy-list\n * @slot - The default slot for list items.\n *\n * @example\n * <schmancy-list surface=\"container\" scroller>\n * <schmancy-list-item>List Item 1</schmancy-list-item>\n * </schmancy-list>\n */\n@customElement('schmancy-list')\nexport class List extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding-top: 8px;\n\t\tpadding-bottom: 8px;\n\t}\n`) {\n\t/**\n\t * Defines the type or color of the surface used by the component.\n\t * This value is provided to descendant components via context.\n\t *\n\t * @attr surface\n\t * @type {TSurfaceColor}\n\t * @default 'surface'\n\t */\n\t@provide({ context: SchmancyListTypeContext })\n\t@property()\n\tsurface: TSurfaceColor\n\n\t/**\n\t * Determines the fill style of the underlying surface.\n\t *\n\t * @attr fill\n\t * @type {SchmancySurfaceFill}\n\t * @default 'auto'\n\t */\n\t@property({ type: String, reflect: true })\n\tfill: SchmancySurfaceFill = 'auto'\n\n\t/**\n\t * Defines the elevation level of the surface.\n\t *\n\t * @attr elevation\n\t * @type {number}\n\t * @default 0\n\t */\n\t@property({ type: Number })\n\televation: 0 | 1 | 2 | 3 | 4 | 5 = 0\n\n\t/**\n\t * Renders the component's template.\n\t * The list content is wrapped inside a `<schmancy-surface>` element.\n\t * The scroller property is delegated to the surface so that it controls\n\t * the scrollable behavior.\n\t *\n\t * @returns The HTML template for the component.\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-surface .elevation=${this.elevation} .fill=${this.fill} type=${this.surface}>\n\t\t\t\t<ul>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ul>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list': List\n\t}\n}\n"],"names":["SchmancyListTypeContext","createContext","SchmancySurfaceTypeContext","SchmancyListItem","TailwindElement","constructor","super","arguments","this","selected","imgClasses","firstUpdated","leading","forEach","img","classList","add","trailing","render","classes","rounded","stateLayerClasses","readonly","html","classMap","when","__decorateClass","consume","context","subscribe","property","prototype","type","Boolean","queryAssignedElements","slot","flatten","customElement","List","css","fill","elevation","surface","provide","String","reflect","Number"],"mappings":"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"}
|
package/dist/list.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./list-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./list-CDXL73JQ.cjs");Object.defineProperty(exports,"List",{enumerable:!0,get:()=>e.List}),Object.defineProperty(exports,"SchmancyListItem",{enumerable:!0,get:()=>e.SchmancyListItem}),exports.SchmancyListTypeContext=e.SchmancyListTypeContext;
|
|
2
2
|
//# sourceMappingURL=list.cjs.map
|
package/dist/list.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as t, T as r } from "./tailwind.mixin-
|
|
1
|
+
import { B as t, T as r } from "./tailwind.mixin-CPuO9c5y.js";
|
|
2
2
|
const n = (s) => {
|
|
3
3
|
class e extends t(r(s)) {
|
|
4
4
|
constructor() {
|
|
@@ -12,4 +12,4 @@ const n = (s) => {
|
|
|
12
12
|
export {
|
|
13
13
|
n as $
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=litElement.mixin-
|
|
15
|
+
//# sourceMappingURL=litElement.mixin-Dm9SOPDp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"litElement.mixin-
|
|
1
|
+
{"version":3,"file":"litElement.mixin-Dm9SOPDp.js","sources":["../mixins/litElement.mixin.ts"],"sourcesContent":["import { CSSResult, LitElement } from 'lit'\nimport { TailwindElement } from './tailwind.mixin'\nimport { BaseElement, IBaseMixin } from './baseElement'\nimport { Constructor } from './constructor'\n\nexport const $LitElement = <T extends CSSResult>(componentStyle?: T) => {\n\tclass TailwindMixinClass extends BaseElement(TailwindElement(componentStyle)) {\n\t\tdisconnectedCallback = () => {\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\treturn TailwindMixinClass as CustomElementConstructor &\n\t\tConstructor<LitElement> &\n\t\tConstructor<IBaseMixin> /* see \"typing the subclass\" below */\n}\n"],"names":["$LitElement","componentStyle","TailwindMixinClass","BaseElement","TailwindElement","constructor","super","arguments","this","disconnectedCallback"],"mappings":";AAKO,MAAMA,IAAoCC,CAAAA;EAChD,MAAMC,UAA2BC,EAAYC,EAAgBH,CAAAA,CAAAA,EAAAA;AAAAA,IAA7D,cAAAI;AAAAC,YAAAA,GAAAC,YACCC,KAAAC,uBAAuB;AACtBH,cAAMG,qBAAAA;AAAAA,MAAAA;AAAAA,IACP;AAAA,EAAA;AAED,SAAOP;AAAAA;"}
|