@mhmo91/schmancy 0.8.3 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{animated-text-Bc3qyXjp.cjs → animated-text-B3DQRJBy.cjs} +2 -2
- package/dist/{animated-text-Bc3qyXjp.cjs.map → animated-text-B3DQRJBy.cjs.map} +1 -1
- package/dist/{animated-text-CNx6Pmlo.js → animated-text-BAj4-6hE.js} +3 -3
- package/dist/{animated-text-CNx6Pmlo.js.map → animated-text-BAj4-6hE.js.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.component-7mWxekxE.js → area.component-CP4DZ0d8.js} +3 -3
- package/dist/{area.component-7mWxekxE.js.map → area.component-CP4DZ0d8.js.map} +1 -1
- package/dist/{area.component-CS_gSutH.cjs → area.component-ChxSLt16.cjs} +2 -2
- package/dist/{area.component-CS_gSutH.cjs.map → area.component-ChxSLt16.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-y-IyzH4r.cjs → autocomplete-CAaVSg4g.cjs} +2 -2
- package/dist/{autocomplete-y-IyzH4r.cjs.map → autocomplete-CAaVSg4g.cjs.map} +1 -1
- package/dist/{autocomplete-Ci4jo3Ur.js → autocomplete-CGbACUYd.js} +4 -4
- package/dist/{autocomplete-Ci4jo3Ur.js.map → autocomplete-CGbACUYd.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-DBfJucB9.cjs → avatar-nWOZXEsW.cjs} +3 -3
- package/dist/avatar-nWOZXEsW.cjs.map +1 -0
- package/dist/{avatar-BdyuuIk7.js → avatar-rLCF6MSI.js} +58 -58
- package/dist/avatar-rLCF6MSI.js.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-CowHieO2.js → boat-Ckt9v__d.js} +3 -3
- package/dist/{boat-CowHieO2.js.map → boat-Ckt9v__d.js.map} +1 -1
- package/dist/{boat-DkNUc1UO.cjs → boat-yNAZ2LLB.cjs} +2 -2
- package/dist/{boat-DkNUc1UO.cjs.map → boat-yNAZ2LLB.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/charts.cjs +1 -1
- package/dist/charts.js +1 -1
- package/dist/{checkbox-BvWcABPr.cjs → checkbox-BnAlpsJN.cjs} +2 -2
- package/dist/{checkbox-BvWcABPr.cjs.map → checkbox-BnAlpsJN.cjs.map} +1 -1
- package/dist/{checkbox-BY4Sn8F2.js → checkbox-D22yfGe3.js} +2 -2
- package/dist/{checkbox-BY4Sn8F2.js.map → checkbox-D22yfGe3.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-CYjmAxfs.js → code-preview-DPlQayFd.js} +2 -2
- package/dist/{code-preview-CYjmAxfs.js.map → code-preview-DPlQayFd.js.map} +1 -1
- package/dist/{code-preview-BIFIJigy.cjs → code-preview-jPnX60FF.cjs} +2 -2
- package/dist/{code-preview-BIFIJigy.cjs.map → code-preview-jPnX60FF.cjs.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-BdIqI7LC.js → date-range-GFm5NG33.js} +4 -4
- package/dist/{date-range-BdIqI7LC.js.map → date-range-GFm5NG33.js.map} +1 -1
- package/dist/{date-range-inline-Df8u6Ecy.cjs → date-range-inline-CgX2o0FP.cjs} +2 -2
- package/dist/{date-range-inline-Df8u6Ecy.cjs.map → date-range-inline-CgX2o0FP.cjs.map} +1 -1
- package/dist/{date-range-inline-Cnhs9atd.js → date-range-inline-DTQLESAZ.js} +3 -3
- package/dist/{date-range-inline-Cnhs9atd.js.map → date-range-inline-DTQLESAZ.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/{date-range-B80Ummtv.cjs → date-range-ug3B9CFT.cjs} +2 -2
- package/dist/{date-range-B80Ummtv.cjs.map → date-range-ug3B9CFT.cjs.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-BWsVHQib.cjs → delay-CWtBL0VD.cjs} +2 -2
- package/dist/{delay-BWsVHQib.cjs.map → delay-CWtBL0VD.cjs.map} +1 -1
- package/dist/{delay-CCa9nN4A.js → delay-DEe1CmHc.js} +2 -2
- package/dist/{delay-CCa9nN4A.js.map → delay-DEe1CmHc.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Bee5ya0L.js → details-D-LXW23W.js} +2 -2
- package/dist/{details-Bee5ya0L.js.map → details-D-LXW23W.js.map} +1 -1
- package/dist/{details-oaVHXU7U.cjs → details-DVke77dU.cjs} +2 -2
- package/dist/{details-oaVHXU7U.cjs.map → details-DVke77dU.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/{dialog.component-BriB-kFi.cjs → dialog.component-BM0D-hK9.cjs} +2 -2
- package/dist/{dialog.component-BriB-kFi.cjs.map → dialog.component-BM0D-hK9.cjs.map} +1 -1
- package/dist/{dialog.component-CMUoCC7O.js → dialog.component-a7FlKhGD.js} +3 -3
- package/dist/{dialog.component-CMUoCC7O.js.map → dialog.component-a7FlKhGD.js.map} +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-B7DBbYFI.js → divider-CzTpxOqt.js} +3 -3
- package/dist/{divider-B7DBbYFI.js.map → divider-CzTpxOqt.js.map} +1 -1
- package/dist/{divider-Dl4TToQZ.cjs → divider-D8KStUhN.cjs} +2 -2
- package/dist/{divider-Dl4TToQZ.cjs.map → divider-D8KStUhN.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-C2W7OttQ.cjs → dropdown-content-CngZN3vv.cjs} +2 -2
- package/dist/{dropdown-content-C2W7OttQ.cjs.map → dropdown-content-CngZN3vv.cjs.map} +1 -1
- package/dist/{dropdown-content-DzhOtilY.js → dropdown-content-DCn-g0-f.js} +3 -3
- package/dist/{dropdown-content-DzhOtilY.js.map → dropdown-content-DCn-g0-f.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-Bh5VC0rc.cjs → email-recipients-BhntMZMf.cjs} +2 -2
- package/dist/{email-recipients-Bh5VC0rc.cjs.map → email-recipients-BhntMZMf.cjs.map} +1 -1
- package/dist/{email-recipients-BWqZKo3m.js → email-recipients-BzjAKNJ0.js} +6 -6
- package/dist/{email-recipients-BWqZKo3m.js.map → email-recipients-BzjAKNJ0.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-53G-PJx7.js → flex-5dR48zie.js} +2 -2
- package/dist/{flex-53G-PJx7.js.map → flex-5dR48zie.js.map} +1 -1
- package/dist/{flex-DFSIy0t4.cjs → flex-oHl2EfYB.cjs} +2 -2
- package/dist/{flex-DFSIy0t4.cjs.map → flex-oHl2EfYB.cjs.map} +1 -1
- package/dist/{form-Zq7g2JS8.cjs → form-BlPiAPt7.cjs} +2 -2
- package/dist/{form-Zq7g2JS8.cjs.map → form-BlPiAPt7.cjs.map} +1 -1
- package/dist/{form-BtRK9bnp.js → form-BxVM6JTn.js} +2 -2
- package/dist/{form-BtRK9bnp.js.map → form-BxVM6JTn.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-2jSL7WF_.js → formField.mixin-BCGA7Ea3.js} +2 -2
- package/dist/{formField.mixin-2jSL7WF_.js.map → formField.mixin-BCGA7Ea3.js.map} +1 -1
- package/dist/{formField.mixin-DkN2ufR_.cjs → formField.mixin-BfJMifU9.cjs} +2 -2
- package/dist/{formField.mixin-DkN2ufR_.cjs.map → formField.mixin-BfJMifU9.cjs.map} +1 -1
- package/dist/{icon-pU_cfmpD.cjs → icon-DHEXr3c-.cjs} +2 -2
- package/dist/{icon-pU_cfmpD.cjs.map → icon-DHEXr3c-.cjs.map} +1 -1
- package/dist/{icon-B5qeYrDu.js → icon-DYpLoegR.js} +2 -2
- package/dist/{icon-B5qeYrDu.js.map → icon-DYpLoegR.js.map} +1 -1
- package/dist/{icon-button-HSYaQBNF.js → icon-button-CmZBLHWC.js} +3 -3
- package/dist/{icon-button-HSYaQBNF.js.map → icon-button-CmZBLHWC.js.map} +1 -1
- package/dist/{icon-button-BpmGFjaR.cjs → icon-button-IbSX8C98.cjs} +2 -2
- package/dist/{icon-button-BpmGFjaR.cjs.map → icon-button-IbSX8C98.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 +56 -56
- package/dist/{input-8G9YY9qv.cjs → input-BByjYlgl.cjs} +2 -2
- package/dist/{input-8G9YY9qv.cjs.map → input-BByjYlgl.cjs.map} +1 -1
- package/dist/{input-BJMF5Fyk.js → input-D0cQ9DOY.js} +3 -3
- package/dist/{input-BJMF5Fyk.js.map → input-D0cQ9DOY.js.map} +1 -1
- package/dist/{input-chip-tbrw56ix.js → input-chip-B5ErXgCB.js} +2 -2
- package/dist/{input-chip-tbrw56ix.js.map → input-chip-B5ErXgCB.js.map} +1 -1
- package/dist/{input-chip-CocdqTzr.cjs → input-chip-DkWaTciP.cjs} +2 -2
- package/dist/{input-chip-CocdqTzr.cjs.map → input-chip-DkWaTciP.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/{json-DPnyOA3K.cjs → json-BZVe74np.cjs} +2 -2
- package/dist/{json-DPnyOA3K.cjs.map → json-BZVe74np.cjs.map} +1 -1
- package/dist/{json-CvcloKQv.js → json-PKewOWuJ.js} +3 -3
- package/dist/{json-CvcloKQv.js.map → json-PKewOWuJ.js.map} +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-service-3mHqBKEh.cjs → lightbox-service-D-0JtxB1.cjs} +2 -2
- package/dist/lightbox-service-D-0JtxB1.cjs.map +1 -0
- package/dist/{lightbox-service-DxbYZAuv.js → lightbox-service-DZMnb1eU.js} +3 -3
- package/dist/lightbox-service-DZMnb1eU.js.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-JjR7WOrd.cjs → list-B_2m7l3g.cjs} +6 -6
- package/dist/list-B_2m7l3g.cjs.map +1 -0
- package/dist/{list-FWXmY-eQ.js → list-CW56LV-v.js} +13 -13
- package/dist/list-CW56LV-v.js.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BVBdv0GP.cjs → litElement.mixin-CrpeGpZ7.cjs} +2 -2
- package/dist/{litElement.mixin-BVBdv0GP.cjs.map → litElement.mixin-CrpeGpZ7.cjs.map} +1 -1
- package/dist/{litElement.mixin-Wcu4yIIs.js → litElement.mixin-DHZXtvYq.js} +2 -2
- package/dist/{litElement.mixin-Wcu4yIIs.js.map → litElement.mixin-DHZXtvYq.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-Br6xJFxG.js → map-2Hl60a0A.js} +6 -6
- package/dist/{map-Br6xJFxG.js.map → map-2Hl60a0A.js.map} +1 -1
- package/dist/{map-D9R3OCne.cjs → map-DyPS9G7M.cjs} +3 -3
- package/dist/{map-D9R3OCne.cjs.map → map-DyPS9G7M.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-DibPwAjJ.cjs → media-CS8HpKnK.cjs} +2 -2
- package/dist/{media-DibPwAjJ.cjs.map → media-CS8HpKnK.cjs.map} +1 -1
- package/dist/{media-BV_1DfcW.js → media-DtWbcRxL.js} +2 -2
- package/dist/{media-BV_1DfcW.js.map → media-DtWbcRxL.js.map} +1 -1
- package/dist/{menu-HKqlq99V.js → menu-Caju5-zd.js} +3 -3
- package/dist/{menu-HKqlq99V.js.map → menu-Caju5-zd.js.map} +1 -1
- package/dist/{menu-vNrV-Nuq.cjs → menu-rX5RPAI2.cjs} +2 -2
- package/dist/{menu-vNrV-Nuq.cjs.map → menu-rX5RPAI2.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/{navigation-rail-DKXumnmt.js → navigation-rail-Ctketq5a.js} +32 -25
- package/dist/navigation-rail-Ctketq5a.js.map +1 -0
- package/dist/{navigation-rail-D1o3qDe_.cjs → navigation-rail-DC9_oSIM.cjs} +12 -12
- package/dist/navigation-rail-DC9_oSIM.cjs.map +1 -0
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-service-B5ljba4P.js → notification-service-CUlfXqmj.js} +3 -3
- package/dist/{notification-service-B5ljba4P.js.map → notification-service-CUlfXqmj.js.map} +1 -1
- package/dist/{notification-service-ICRT05L0.cjs → notification-service-DknbpqTt.cjs} +2 -2
- package/dist/{notification-service-ICRT05L0.cjs.map → notification-service-DknbpqTt.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-B9CpO1Ru.js → notify-DJSOWTxv.js} +2 -2
- package/dist/{notify-B9CpO1Ru.js.map → notify-DJSOWTxv.js.map} +1 -1
- package/dist/{notify-NX-dl60E.cjs → notify-DickIEHW.cjs} +2 -2
- package/dist/{notify-NX-dl60E.cjs.map → notify-DickIEHW.cjs.map} +1 -1
- package/dist/{option-B4JKMrLg.js → option-Bng41-rY.js} +2 -2
- package/dist/{option-B4JKMrLg.js.map → option-Bng41-rY.js.map} +1 -1
- package/dist/{option-epyXLWoY.cjs → option-DYT5Rkgy.cjs} +2 -2
- package/dist/{option-epyXLWoY.cjs.map → option-DYT5Rkgy.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{page-Bmi1QHtq.cjs → page-BLn9gtSd.cjs} +2 -2
- package/dist/{page-Bmi1QHtq.cjs.map → page-BLn9gtSd.cjs.map} +1 -1
- package/dist/{page-BpygEntU.js → page-D-ROcQDd.js} +4 -4
- package/dist/{page-BpygEntU.js.map → page-D-ROcQDd.js.map} +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +1 -1
- package/dist/{payment-card-form-3kAXDbXf.cjs → payment-card-form-5UtfWzoW.cjs} +2 -2
- package/dist/{payment-card-form-3kAXDbXf.cjs.map → payment-card-form-5UtfWzoW.cjs.map} +1 -1
- package/dist/{payment-card-form-BxkHuSls.js → payment-card-form-BJa4RgF2.js} +3 -3
- package/dist/{payment-card-form-BxkHuSls.js.map → payment-card-form-BJa4RgF2.js.map} +1 -1
- package/dist/{pills-C3fIvfn8.js → pills-BS5rZ6C3.js} +3 -3
- package/dist/{pills-C3fIvfn8.js.map → pills-BS5rZ6C3.js.map} +1 -1
- package/dist/{pills-MmHyBGQu.cjs → pills-Blf7IAeq.cjs} +2 -2
- package/dist/{pills-MmHyBGQu.cjs.map → pills-Blf7IAeq.cjs.map} +1 -1
- package/dist/{progress-qx8jtrOA.cjs → progress-DlhYniW_.cjs} +5 -5
- package/dist/progress-DlhYniW_.cjs.map +1 -0
- package/dist/{progress-0POmJs5o.js → progress-yTIX6EqC.js} +10 -13
- package/dist/progress-yTIX6EqC.js.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{qr-scanner-DQq-WLyo.cjs → qr-scanner-DOs7uNS_.cjs} +2 -2
- package/dist/{qr-scanner-DQq-WLyo.cjs.map → qr-scanner-DOs7uNS_.cjs.map} +1 -1
- package/dist/{qr-scanner-jwOSrD0N.js → qr-scanner-DjZ8mgHV.js} +2 -2
- package/dist/{qr-scanner-jwOSrD0N.js.map → qr-scanner-DjZ8mgHV.js.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +1 -1
- package/dist/{radio-button-DraEYR2R.cjs → radio-button-N_PrrxKB.cjs} +2 -2
- package/dist/{radio-button-DraEYR2R.cjs.map → radio-button-N_PrrxKB.cjs.map} +1 -1
- package/dist/{radio-button-B0EUK_wg.js → radio-button-me3SRHGu.js} +3 -3
- package/dist/{radio-button-B0EUK_wg.js.map → radio-button-me3SRHGu.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-C2StAA5K.js → schmancy-steps-container-J6P-NNNj.js} +2 -2
- package/dist/{schmancy-steps-container-C2StAA5K.js.map → schmancy-steps-container-J6P-NNNj.js.map} +1 -1
- package/dist/{schmancy-steps-container-B5aiqgMA.cjs → schmancy-steps-container-T57BKMzi.cjs} +2 -2
- package/dist/{schmancy-steps-container-B5aiqgMA.cjs.map → schmancy-steps-container-T57BKMzi.cjs.map} +1 -1
- package/dist/{scroll-Bu-vAg3d.js → scroll-C_gfUgjn.js} +2 -2
- package/dist/{scroll-Bu-vAg3d.js.map → scroll-C_gfUgjn.js.map} +1 -1
- package/dist/{scroll-BqT7bvhu.cjs → scroll-CecsowP7.cjs} +2 -2
- package/dist/{scroll-BqT7bvhu.cjs.map → scroll-CecsowP7.cjs.map} +1 -1
- package/dist/{select-i-uKur-W.js → select-BBA0gBHf.js} +3 -3
- package/dist/{select-i-uKur-W.js.map → select-BBA0gBHf.js.map} +1 -1
- package/dist/{select-HiEGJvOX.cjs → select-D9oCjv7N.cjs} +2 -2
- package/dist/{select-HiEGJvOX.cjs.map → select-D9oCjv7N.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BbrRW0S5.cjs → sheet-0oUfBmXX.cjs} +2 -2
- package/dist/{sheet-BbrRW0S5.cjs.map → sheet-0oUfBmXX.cjs.map} +1 -1
- package/dist/{sheet-B1g7E4dQ.js → sheet-CNcDT3VP.js} +5 -5
- package/dist/{sheet-B1g7E4dQ.js.map → sheet-CNcDT3VP.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-4etIM-p6.js → sheet.service-2MobB-9z.js} +2 -2
- package/dist/{sheet.service-4etIM-p6.js.map → sheet.service-2MobB-9z.js.map} +1 -1
- package/dist/{sheet.service-BiRZjCdN.cjs → sheet.service-su_7yDQ-.cjs} +2 -2
- package/dist/{sheet.service-BiRZjCdN.cjs.map → sheet.service-su_7yDQ-.cjs.map} +1 -1
- package/dist/{slider-VYnbIRH2.cjs → slider-CV-Ehp_5.cjs} +2 -2
- package/dist/{slider-VYnbIRH2.cjs.map → slider-CV-Ehp_5.cjs.map} +1 -1
- package/dist/{slider-8E3Wad0t.js → slider-CkE-iFUy.js} +3 -3
- package/dist/{slider-8E3Wad0t.js.map → slider-CkE-iFUy.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-DJgcI5wr.cjs → spinner-Bfn8KC-9.cjs} +2 -2
- package/dist/{spinner-DJgcI5wr.cjs.map → spinner-Bfn8KC-9.cjs.map} +1 -1
- package/dist/{spinner-CKm13CKN.js → spinner-DiMbWXp9.js} +2 -2
- package/dist/{spinner-CKm13CKN.js.map → spinner-DiMbWXp9.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{suggestion-chip-6njXvvHm.js → suggestion-chip-CEDqUNoS.js} +3 -3
- package/dist/{suggestion-chip-6njXvvHm.js.map → suggestion-chip-CEDqUNoS.js.map} +1 -1
- package/dist/{suggestion-chip-DdLfqk7o.cjs → suggestion-chip-HhsLtZXR.cjs} +2 -2
- package/dist/{suggestion-chip-DdLfqk7o.cjs.map → suggestion-chip-HhsLtZXR.cjs.map} +1 -1
- package/dist/{surface-DcqbWGub.cjs → surface-CW3H23Va.cjs} +2 -2
- package/dist/{surface-DcqbWGub.cjs.map → surface-CW3H23Va.cjs.map} +1 -1
- package/dist/{surface-BYU3l_Q2.js → surface-eBfnSwQS.js} +2 -2
- package/dist/{surface-BYU3l_Q2.js.map → surface-eBfnSwQS.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-C9fzDjjk.cjs → table-D0tiSL_u.cjs} +2 -2
- package/dist/{table-C9fzDjjk.cjs.map → table-D0tiSL_u.cjs.map} +1 -1
- package/dist/{table-Dq12ollZ.js → table-Dmo4TvTx.js} +2 -2
- package/dist/{table-Dq12ollZ.js.map → table-Dmo4TvTx.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-wnzlHtln.js → tabs-compatibility-Bit6y6en.js} +2 -2
- package/dist/{tabs-compatibility-wnzlHtln.js.map → tabs-compatibility-Bit6y6en.js.map} +1 -1
- package/dist/{tabs-compatibility-Dwtjfkcf.cjs → tabs-compatibility-Vq_2-ekz.cjs} +2 -2
- package/dist/{tabs-compatibility-Dwtjfkcf.cjs.map → tabs-compatibility-Vq_2-ekz.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-Ddt05Frc.js → tailwind.mixin-Bp_PR6yc.js} +2 -2
- package/dist/{tailwind.mixin-Ddt05Frc.js.map → tailwind.mixin-Bp_PR6yc.js.map} +1 -1
- package/dist/{tailwind.mixin-UijsBrYW.cjs → tailwind.mixin-Cp4PyXok.cjs} +2 -2
- package/dist/{tailwind.mixin-UijsBrYW.cjs.map → tailwind.mixin-Cp4PyXok.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-Vd3zayJZ.js → textarea-B1d1QCqT.js} +2 -2
- package/dist/{textarea-Vd3zayJZ.js.map → textarea-B1d1QCqT.js.map} +1 -1
- package/dist/{textarea-DGmsw1B_.cjs → textarea-DG8CHhZA.cjs} +2 -2
- package/dist/{textarea-DGmsw1B_.cjs.map → textarea-DG8CHhZA.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-DG_Xwg9H.cjs → theme-button-CPL6Eaqd.cjs} +2 -2
- package/dist/{theme-button-DG_Xwg9H.cjs.map → theme-button-CPL6Eaqd.cjs.map} +1 -1
- package/dist/{theme-button-rGpEW_xS.js → theme-button-CrLuMQNe.js} +2 -2
- package/dist/{theme-button-rGpEW_xS.js.map → theme-button-CrLuMQNe.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/{theme-controller-boat-pLzK5zxL.cjs → theme-controller-boat-CXbNJSI3.cjs} +2 -2
- package/dist/{theme-controller-boat-pLzK5zxL.cjs.map → theme-controller-boat-CXbNJSI3.cjs.map} +1 -1
- package/dist/{theme-controller-boat-B1fjcqJI.js → theme-controller-boat-CzSmjyKq.js} +3 -3
- package/dist/{theme-controller-boat-B1fjcqJI.js.map → theme-controller-boat-CzSmjyKq.js.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-IQkwr6Oh.js → timezone-4vwX0BgA.js} +3 -3
- package/dist/{timezone-IQkwr6Oh.js.map → timezone-4vwX0BgA.js.map} +1 -1
- package/dist/{timezone-BhUaIAV7.cjs → timezone-BxvQcqe1.cjs} +2 -2
- package/dist/{timezone-BhUaIAV7.cjs.map → timezone-BxvQcqe1.cjs.map} +1 -1
- package/dist/{tooltip-CwaiZC8f.js → tooltip-CjdvBf4X.js} +2 -2
- package/dist/{tooltip-CwaiZC8f.js.map → tooltip-CjdvBf4X.js.map} +1 -1
- package/dist/{tooltip-iEvxKg8g.cjs → tooltip-ZtnGjoJd.cjs} +2 -2
- package/dist/{tooltip-iEvxKg8g.cjs.map → tooltip-ZtnGjoJd.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-D9EbEsxn.js → tree-CBEjV7jP.js} +2 -2
- package/dist/{tree-D9EbEsxn.js.map → tree-CBEjV7jP.js.map} +1 -1
- package/dist/{tree-Bclu6uvv.cjs → tree-DP5U00NA.cjs} +2 -2
- package/dist/{tree-Bclu6uvv.cjs.map → tree-DP5U00NA.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Bscwd-36.cjs → typewriter-C6kFjLcX.cjs} +2 -2
- package/dist/{typewriter-Bscwd-36.cjs.map → typewriter-C6kFjLcX.cjs.map} +1 -1
- package/dist/{typewriter-BjDPgRlj.js → typewriter-Eo5qXoGC.js} +4 -4
- package/dist/{typewriter-BjDPgRlj.js.map → typewriter-Eo5qXoGC.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-CConBBFH.js → typography-C_1gdM2I.js} +2 -2
- package/dist/{typography-CConBBFH.js.map → typography-C_1gdM2I.js.map} +1 -1
- package/dist/{typography-DLGT3DGz.cjs → typography-DGyjlLCE.cjs} +2 -2
- package/dist/{typography-DLGT3DGz.cjs.map → typography-DGyjlLCE.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/navigation-rail/navigation-rail.d.ts +2 -0
- package/types/src/progress/progress.d.ts +1 -1
- package/dist/avatar-BdyuuIk7.js.map +0 -1
- package/dist/avatar-DBfJucB9.cjs.map +0 -1
- package/dist/lightbox-service-3mHqBKEh.cjs.map +0 -1
- package/dist/lightbox-service-DxbYZAuv.js.map +0 -1
- package/dist/list-FWXmY-eQ.js.map +0 -1
- package/dist/list-JjR7WOrd.cjs.map +0 -1
- package/dist/navigation-rail-D1o3qDe_.cjs.map +0 -1
- package/dist/navigation-rail-DKXumnmt.js.map +0 -1
- package/dist/progress-0POmJs5o.js.map +0 -1
- package/dist/progress-qx8jtrOA.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-Zq7g2JS8.cjs","sources":["../src/form/form-v2.ts","../src/form/form.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\n// Define interfaces for form element capabilities\nexport interface FormElement extends HTMLElement {\n\tname?: string\n\tvalue?: string\n\tdisabled?: boolean\n\ttype?: string\n\tdefaultValue?: string\n}\n\nexport interface CheckableFormElement extends FormElement {\n\tchecked?: boolean\n}\n\nexport interface ValidatableFormElement extends FormElement {\n\treportValidity?: () => boolean\n}\n\n// Define interface for form control registry\nexport interface FormControlConfig {\n\ttagName: string\n\thasValue?: boolean\n\thasChecked?: boolean\n\tcanSubmit?: boolean\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element sch-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('sch-form')\nexport default class SchmancyFormV2 extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'sch-form'\n\n\t// Static registry of form controls\n\tprivate static formControlRegistry: FormControlConfig[] = [\n\t\t// Native elements\n\t\t{ tagName: 'input', hasValue: true, hasChecked: true, canSubmit: true },\n\t\t{ tagName: 'textarea', hasValue: true },\n\t\t{ tagName: 'select', hasValue: true },\n\t\t{ tagName: 'button', canSubmit: true },\n\t\t{ tagName: 'radio', hasChecked: true },\n\n\t\t// Custom elements\n\t\t{ tagName: 'schmancy-input', hasValue: true, canSubmit: true },\n\t\t{ tagName: 'schmancy-mask-input', hasValue: true },\n\t\t{ tagName: 'schmancy-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-icon-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-radio', hasChecked: true },\n\t\t{ tagName: 'schmancy-switch', hasChecked: true },\n\t\t{ tagName: 'schmancy-checkbox', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-radio-group', hasChecked: true },\n\t\t{ tagName: 'schmancy-autocomplete', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-select', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-combo', hasValue: true },\n\t\t{ tagName: 'schmancy-date-time-input', hasValue: true },\n\t\t{ tagName: 'schmancy-rating', hasValue: true },\n\t]\n\n\t// Static methods to register new form controls\n\tpublic static registerFormControl(config: FormControlConfig): void {\n\t\tconst existingIndex = this.formControlRegistry.findIndex(item => item.tagName === config.tagName)\n\n\t\tif (existingIndex >= 0) {\n\t\t\tthis.formControlRegistry[existingIndex] = {\n\t\t\t\t...this.formControlRegistry[existingIndex],\n\t\t\t\t...config,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.formControlRegistry.push(config)\n\t\t}\n\t}\n\n\t// Helper methods to check control capabilities\n\tprivate static hasValue(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasValue || false\n\t}\n\n\tprivate static hasChecked(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasChecked || false\n\t}\n\n\tprivate static canSubmit(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.canSubmit || false\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tconst target = e.target as HTMLButtonElement\n\t\t\t\t\tif (target.type?.toLowerCase() === 'submit') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.$disconnecting.next(null)\n\t\tthis.$disconnecting.complete()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tconst selectElement = element as HTMLSelectElement\n\t\t\t\tfor (let i = 0; i < selectElement.options.length; i++) {\n\t\t\t\t\tconst option = selectElement.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type === 'radio')) ||\n\t\t\t\t(tagName !== 'input' && SchmancyFormV2.hasChecked(tagName))\n\t\t\t) {\n\t\t\t\t;(element as CheckableFormElement).checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (SchmancyFormV2.hasValue(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): FormElement[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: FormElement[] = []\n\n\t\tassignedElements?.forEach((element: FormElement) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter(\n\t\t\t\t(childElement: FormElement) => !childElement.disabled,\n\t\t\t)\n\t\t\tformElements.push(...(children as FormElement[]))\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\t\tconst formElements = this.getFormElements()\n\n\t\tformElements.forEach(element => {\n\t\t\tif (!element.name) return\n\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < (element as HTMLSelectElement).options.length; i++) {\n\t\t\t\t\tconst option = (element as HTMLSelectElement).options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (SchmancyFormV2.hasChecked(tagName) && (element as CheckableFormElement).checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tSchmancyFormV2.hasValue(tagName) &&\n\t\t\t\t(element as HTMLInputElement).type !== 'checkbox' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'radio' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value || '')\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement =>\n\t\t\t\ttypeof (element as ValidatableFormElement).reportValidity === 'function' &&\n\t\t\t\t(element as ValidatableFormElement).reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement = event.target as HTMLElement\n\t\tconst tagName = targetElement.tagName.toLowerCase()\n\n\t\tif (SchmancyFormV2.canSubmit(tagName)) {\n\t\t\tthis.submit()\n\t\t} else if ((targetElement as HTMLButtonElement).type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-form': SchmancyFormV2\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\nexport interface FormEventMap {\n\tsubmit: CustomEvent<FormData>\n\treset: CustomEvent\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element schmancy-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('schmancy-form')\nexport default class SchmancyForm extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'schmancy-form'\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\tprivate _controlsWithChecked = [\n\t\t'input',\n\t\t'radio',\n\t\t'schmancy-radio',\n\t\t'schmancy-switch',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-radio-group',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsWithValue = [\n\t\t'input',\n\t\t'schmancy-input',\n\t\t'schmancy-mask-input',\n\t\t'textarea',\n\t\t'schmancy-rating',\n\t\t'schmancy-select',\n\t\t'schmancy-combo',\n\t\t'schmancy-date-time-input',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsThatSubmit = ['button', 'schmancy-input', 'schmancy-button', 'schmancy-icon-button']\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif ((e.target as HTMLButtonElement).type?.toLowerCase() === 'submit') this.handleSubmitRequest(e)\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type == 'radio')) ||\n\t\t\t\t(tagName !== 'input' && this._controlsWithChecked.includes(tagName))\n\t\t\t) {\n\t\t\t\telement.checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (this._controlsWithValue.includes(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): any[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: any[] = []\n\t\tassignedElements?.forEach((element: any) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter((element: any) => !element.disabled)\n\t\t\tformElements.push(...children)\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this._controlsWithChecked.includes(tagName) && element.checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tthis._controlsWithValue.includes(tagName) &&\n\t\t\t\telement.type !== 'checkbox' &&\n\t\t\t\telement.type !== 'radio' &&\n\t\t\t\telement.type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value)\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement => typeof element.reportValidity === 'function' && element.reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement: any = event.target as HTMLElement\n\t\tif (this._controlsThatSubmit.includes(targetElement.tagName.toLowerCase())) {\n\t\t\tthis.submit()\n\t\t} else if (targetElement.type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form': SchmancyForm\n\t}\n}\n"],"names":["SchmancyFormV2","TailwindElement","constructor","super","this","$disconnecting","Subject","novalidate","merge","fromEvent","pipe","tap","e","target","type","toLowerCase","handleSubmitRequest","code","key","takeUntil","subscribe","config","existingIndex","formControlRegistry","findIndex","item","tagName","push","find","hasValue","hasChecked","canSubmit","disconnectedCallback","next","complete","submit","formData","getFormData","reportValidity","dispatchEvent","CustomEvent","detail","getFormElements","forEach","element","selectElement","i","options","length","option","selected","defaultSelected","checked","hasAttribute","value","getAttribute","defaultValue","slot","shadowRoot","querySelector","assignedElements","flatten","formElements","disabled","children","Array","from","getElementsByTagName","filter","childElement","FormData","name","append","some","event","targetElement","reset","render","html","shadowRootOptions","LitElement","mode","delegatesFocus","__decorateClass","property","Boolean","reflect","prototype","customElement","SchmancyForm","_controlsWithChecked","_controlsWithValue","_controlsThatSubmit","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"form-BlPiAPt7.cjs","sources":["../src/form/form-v2.ts","../src/form/form.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\n// Define interfaces for form element capabilities\nexport interface FormElement extends HTMLElement {\n\tname?: string\n\tvalue?: string\n\tdisabled?: boolean\n\ttype?: string\n\tdefaultValue?: string\n}\n\nexport interface CheckableFormElement extends FormElement {\n\tchecked?: boolean\n}\n\nexport interface ValidatableFormElement extends FormElement {\n\treportValidity?: () => boolean\n}\n\n// Define interface for form control registry\nexport interface FormControlConfig {\n\ttagName: string\n\thasValue?: boolean\n\thasChecked?: boolean\n\tcanSubmit?: boolean\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element sch-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('sch-form')\nexport default class SchmancyFormV2 extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'sch-form'\n\n\t// Static registry of form controls\n\tprivate static formControlRegistry: FormControlConfig[] = [\n\t\t// Native elements\n\t\t{ tagName: 'input', hasValue: true, hasChecked: true, canSubmit: true },\n\t\t{ tagName: 'textarea', hasValue: true },\n\t\t{ tagName: 'select', hasValue: true },\n\t\t{ tagName: 'button', canSubmit: true },\n\t\t{ tagName: 'radio', hasChecked: true },\n\n\t\t// Custom elements\n\t\t{ tagName: 'schmancy-input', hasValue: true, canSubmit: true },\n\t\t{ tagName: 'schmancy-mask-input', hasValue: true },\n\t\t{ tagName: 'schmancy-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-icon-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-radio', hasChecked: true },\n\t\t{ tagName: 'schmancy-switch', hasChecked: true },\n\t\t{ tagName: 'schmancy-checkbox', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-radio-group', hasChecked: true },\n\t\t{ tagName: 'schmancy-autocomplete', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-select', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-combo', hasValue: true },\n\t\t{ tagName: 'schmancy-date-time-input', hasValue: true },\n\t\t{ tagName: 'schmancy-rating', hasValue: true },\n\t]\n\n\t// Static methods to register new form controls\n\tpublic static registerFormControl(config: FormControlConfig): void {\n\t\tconst existingIndex = this.formControlRegistry.findIndex(item => item.tagName === config.tagName)\n\n\t\tif (existingIndex >= 0) {\n\t\t\tthis.formControlRegistry[existingIndex] = {\n\t\t\t\t...this.formControlRegistry[existingIndex],\n\t\t\t\t...config,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.formControlRegistry.push(config)\n\t\t}\n\t}\n\n\t// Helper methods to check control capabilities\n\tprivate static hasValue(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasValue || false\n\t}\n\n\tprivate static hasChecked(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasChecked || false\n\t}\n\n\tprivate static canSubmit(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.canSubmit || false\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tconst target = e.target as HTMLButtonElement\n\t\t\t\t\tif (target.type?.toLowerCase() === 'submit') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.$disconnecting.next(null)\n\t\tthis.$disconnecting.complete()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tconst selectElement = element as HTMLSelectElement\n\t\t\t\tfor (let i = 0; i < selectElement.options.length; i++) {\n\t\t\t\t\tconst option = selectElement.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type === 'radio')) ||\n\t\t\t\t(tagName !== 'input' && SchmancyFormV2.hasChecked(tagName))\n\t\t\t) {\n\t\t\t\t;(element as CheckableFormElement).checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (SchmancyFormV2.hasValue(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): FormElement[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: FormElement[] = []\n\n\t\tassignedElements?.forEach((element: FormElement) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter(\n\t\t\t\t(childElement: FormElement) => !childElement.disabled,\n\t\t\t)\n\t\t\tformElements.push(...(children as FormElement[]))\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\t\tconst formElements = this.getFormElements()\n\n\t\tformElements.forEach(element => {\n\t\t\tif (!element.name) return\n\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < (element as HTMLSelectElement).options.length; i++) {\n\t\t\t\t\tconst option = (element as HTMLSelectElement).options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (SchmancyFormV2.hasChecked(tagName) && (element as CheckableFormElement).checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tSchmancyFormV2.hasValue(tagName) &&\n\t\t\t\t(element as HTMLInputElement).type !== 'checkbox' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'radio' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value || '')\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement =>\n\t\t\t\ttypeof (element as ValidatableFormElement).reportValidity === 'function' &&\n\t\t\t\t(element as ValidatableFormElement).reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement = event.target as HTMLElement\n\t\tconst tagName = targetElement.tagName.toLowerCase()\n\n\t\tif (SchmancyFormV2.canSubmit(tagName)) {\n\t\t\tthis.submit()\n\t\t} else if ((targetElement as HTMLButtonElement).type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-form': SchmancyFormV2\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\nexport interface FormEventMap {\n\tsubmit: CustomEvent<FormData>\n\treset: CustomEvent\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element schmancy-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('schmancy-form')\nexport default class SchmancyForm extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'schmancy-form'\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\tprivate _controlsWithChecked = [\n\t\t'input',\n\t\t'radio',\n\t\t'schmancy-radio',\n\t\t'schmancy-switch',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-radio-group',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsWithValue = [\n\t\t'input',\n\t\t'schmancy-input',\n\t\t'schmancy-mask-input',\n\t\t'textarea',\n\t\t'schmancy-rating',\n\t\t'schmancy-select',\n\t\t'schmancy-combo',\n\t\t'schmancy-date-time-input',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsThatSubmit = ['button', 'schmancy-input', 'schmancy-button', 'schmancy-icon-button']\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif ((e.target as HTMLButtonElement).type?.toLowerCase() === 'submit') this.handleSubmitRequest(e)\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type == 'radio')) ||\n\t\t\t\t(tagName !== 'input' && this._controlsWithChecked.includes(tagName))\n\t\t\t) {\n\t\t\t\telement.checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (this._controlsWithValue.includes(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): any[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: any[] = []\n\t\tassignedElements?.forEach((element: any) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter((element: any) => !element.disabled)\n\t\t\tformElements.push(...children)\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this._controlsWithChecked.includes(tagName) && element.checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tthis._controlsWithValue.includes(tagName) &&\n\t\t\t\telement.type !== 'checkbox' &&\n\t\t\t\telement.type !== 'radio' &&\n\t\t\t\telement.type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value)\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement => typeof element.reportValidity === 'function' && element.reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement: any = event.target as HTMLElement\n\t\tif (this._controlsThatSubmit.includes(targetElement.tagName.toLowerCase())) {\n\t\t\tthis.submit()\n\t\t} else if (targetElement.type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form': SchmancyForm\n\t}\n}\n"],"names":["SchmancyFormV2","TailwindElement","constructor","super","this","$disconnecting","Subject","novalidate","merge","fromEvent","pipe","tap","e","target","type","toLowerCase","handleSubmitRequest","code","key","takeUntil","subscribe","config","existingIndex","formControlRegistry","findIndex","item","tagName","push","find","hasValue","hasChecked","canSubmit","disconnectedCallback","next","complete","submit","formData","getFormData","reportValidity","dispatchEvent","CustomEvent","detail","getFormElements","forEach","element","selectElement","i","options","length","option","selected","defaultSelected","checked","hasAttribute","value","getAttribute","defaultValue","slot","shadowRoot","querySelector","assignedElements","flatten","formElements","disabled","children","Array","from","getElementsByTagName","filter","childElement","FormData","name","append","some","event","targetElement","reset","render","html","shadowRootOptions","LitElement","mode","delegatesFocus","__decorateClass","property","Boolean","reflect","prototype","customElement","SchmancyForm","_controlsWithChecked","_controlsWithValue","_controlsThatSubmit","includes"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import "rxjs/operators";
|
|
|
3
3
|
import "lit/directives/class-map.js";
|
|
4
4
|
import "lit/directives/style-map.js";
|
|
5
5
|
import { property as g, customElement as b } from "lit/decorators.js";
|
|
6
|
-
import { T as f } from "./tailwind.mixin-
|
|
6
|
+
import { T as f } from "./tailwind.mixin-Bp_PR6yc.js";
|
|
7
7
|
import { html as k, LitElement as C } from "lit";
|
|
8
8
|
var v = Object.defineProperty, E = Object.getOwnPropertyDescriptor, l = (e, t, s, a) => {
|
|
9
9
|
for (var o, n = a > 1 ? void 0 : a ? E(t, s) : t, i = e.length - 1; i >= 0; i--) (o = e[i]) && (n = (a ? o(t, s, n) : o(n)) || n);
|
|
@@ -138,4 +138,4 @@ let r = class extends f() {
|
|
|
138
138
|
}
|
|
139
139
|
};
|
|
140
140
|
r.tagName = "schmancy-form", r.shadowRootOptions = { ...C.shadowRootOptions, mode: "open", delegatesFocus: !1 }, u([g({ type: Boolean, reflect: !0 })], r.prototype, "novalidate", 2), r = u([b("schmancy-form")], r);
|
|
141
|
-
//# sourceMappingURL=form-
|
|
141
|
+
//# sourceMappingURL=form-BxVM6JTn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-BtRK9bnp.js","sources":["../src/form/form-v2.ts","../src/form/form.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\n// Define interfaces for form element capabilities\nexport interface FormElement extends HTMLElement {\n\tname?: string\n\tvalue?: string\n\tdisabled?: boolean\n\ttype?: string\n\tdefaultValue?: string\n}\n\nexport interface CheckableFormElement extends FormElement {\n\tchecked?: boolean\n}\n\nexport interface ValidatableFormElement extends FormElement {\n\treportValidity?: () => boolean\n}\n\n// Define interface for form control registry\nexport interface FormControlConfig {\n\ttagName: string\n\thasValue?: boolean\n\thasChecked?: boolean\n\tcanSubmit?: boolean\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element sch-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('sch-form')\nexport default class SchmancyFormV2 extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'sch-form'\n\n\t// Static registry of form controls\n\tprivate static formControlRegistry: FormControlConfig[] = [\n\t\t// Native elements\n\t\t{ tagName: 'input', hasValue: true, hasChecked: true, canSubmit: true },\n\t\t{ tagName: 'textarea', hasValue: true },\n\t\t{ tagName: 'select', hasValue: true },\n\t\t{ tagName: 'button', canSubmit: true },\n\t\t{ tagName: 'radio', hasChecked: true },\n\n\t\t// Custom elements\n\t\t{ tagName: 'schmancy-input', hasValue: true, canSubmit: true },\n\t\t{ tagName: 'schmancy-mask-input', hasValue: true },\n\t\t{ tagName: 'schmancy-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-icon-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-radio', hasChecked: true },\n\t\t{ tagName: 'schmancy-switch', hasChecked: true },\n\t\t{ tagName: 'schmancy-checkbox', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-radio-group', hasChecked: true },\n\t\t{ tagName: 'schmancy-autocomplete', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-select', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-combo', hasValue: true },\n\t\t{ tagName: 'schmancy-date-time-input', hasValue: true },\n\t\t{ tagName: 'schmancy-rating', hasValue: true },\n\t]\n\n\t// Static methods to register new form controls\n\tpublic static registerFormControl(config: FormControlConfig): void {\n\t\tconst existingIndex = this.formControlRegistry.findIndex(item => item.tagName === config.tagName)\n\n\t\tif (existingIndex >= 0) {\n\t\t\tthis.formControlRegistry[existingIndex] = {\n\t\t\t\t...this.formControlRegistry[existingIndex],\n\t\t\t\t...config,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.formControlRegistry.push(config)\n\t\t}\n\t}\n\n\t// Helper methods to check control capabilities\n\tprivate static hasValue(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasValue || false\n\t}\n\n\tprivate static hasChecked(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasChecked || false\n\t}\n\n\tprivate static canSubmit(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.canSubmit || false\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tconst target = e.target as HTMLButtonElement\n\t\t\t\t\tif (target.type?.toLowerCase() === 'submit') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.$disconnecting.next(null)\n\t\tthis.$disconnecting.complete()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tconst selectElement = element as HTMLSelectElement\n\t\t\t\tfor (let i = 0; i < selectElement.options.length; i++) {\n\t\t\t\t\tconst option = selectElement.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type === 'radio')) ||\n\t\t\t\t(tagName !== 'input' && SchmancyFormV2.hasChecked(tagName))\n\t\t\t) {\n\t\t\t\t;(element as CheckableFormElement).checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (SchmancyFormV2.hasValue(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): FormElement[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: FormElement[] = []\n\n\t\tassignedElements?.forEach((element: FormElement) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter(\n\t\t\t\t(childElement: FormElement) => !childElement.disabled,\n\t\t\t)\n\t\t\tformElements.push(...(children as FormElement[]))\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\t\tconst formElements = this.getFormElements()\n\n\t\tformElements.forEach(element => {\n\t\t\tif (!element.name) return\n\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < (element as HTMLSelectElement).options.length; i++) {\n\t\t\t\t\tconst option = (element as HTMLSelectElement).options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (SchmancyFormV2.hasChecked(tagName) && (element as CheckableFormElement).checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tSchmancyFormV2.hasValue(tagName) &&\n\t\t\t\t(element as HTMLInputElement).type !== 'checkbox' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'radio' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value || '')\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement =>\n\t\t\t\ttypeof (element as ValidatableFormElement).reportValidity === 'function' &&\n\t\t\t\t(element as ValidatableFormElement).reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement = event.target as HTMLElement\n\t\tconst tagName = targetElement.tagName.toLowerCase()\n\n\t\tif (SchmancyFormV2.canSubmit(tagName)) {\n\t\t\tthis.submit()\n\t\t} else if ((targetElement as HTMLButtonElement).type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-form': SchmancyFormV2\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\nexport interface FormEventMap {\n\tsubmit: CustomEvent<FormData>\n\treset: CustomEvent\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element schmancy-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('schmancy-form')\nexport default class SchmancyForm extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'schmancy-form'\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\tprivate _controlsWithChecked = [\n\t\t'input',\n\t\t'radio',\n\t\t'schmancy-radio',\n\t\t'schmancy-switch',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-radio-group',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsWithValue = [\n\t\t'input',\n\t\t'schmancy-input',\n\t\t'schmancy-mask-input',\n\t\t'textarea',\n\t\t'schmancy-rating',\n\t\t'schmancy-select',\n\t\t'schmancy-combo',\n\t\t'schmancy-date-time-input',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsThatSubmit = ['button', 'schmancy-input', 'schmancy-button', 'schmancy-icon-button']\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif ((e.target as HTMLButtonElement).type?.toLowerCase() === 'submit') this.handleSubmitRequest(e)\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type == 'radio')) ||\n\t\t\t\t(tagName !== 'input' && this._controlsWithChecked.includes(tagName))\n\t\t\t) {\n\t\t\t\telement.checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (this._controlsWithValue.includes(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): any[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: any[] = []\n\t\tassignedElements?.forEach((element: any) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter((element: any) => !element.disabled)\n\t\t\tformElements.push(...children)\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this._controlsWithChecked.includes(tagName) && element.checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tthis._controlsWithValue.includes(tagName) &&\n\t\t\t\telement.type !== 'checkbox' &&\n\t\t\t\telement.type !== 'radio' &&\n\t\t\t\telement.type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value)\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement => typeof element.reportValidity === 'function' && element.reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement: any = event.target as HTMLElement\n\t\tif (this._controlsThatSubmit.includes(targetElement.tagName.toLowerCase())) {\n\t\t\tthis.submit()\n\t\t} else if (targetElement.type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form': SchmancyForm\n\t}\n}\n"],"names":["SchmancyFormV2","TailwindElement","constructor","super","this","$disconnecting","Subject","novalidate","merge","fromEvent","pipe","tap","e","target","type","toLowerCase","handleSubmitRequest","code","key","takeUntil","subscribe","config","existingIndex","formControlRegistry","findIndex","item","tagName","push","find","hasValue","hasChecked","canSubmit","disconnectedCallback","next","complete","submit","formData","getFormData","reportValidity","dispatchEvent","CustomEvent","detail","reset","getFormElements","forEach","element","selectElement","i","options","length","option","selected","defaultSelected","checked","hasAttribute","value","getAttribute","defaultValue","slot","shadowRoot","querySelector","assignedElements","flatten","formElements","disabled","children","Array","from","getElementsByTagName","filter","childElement","FormData","name","append","some","event","targetElement","render","html","shadowRootOptions","LitElement","mode","delegatesFocus","__decorateClass","property","Boolean","reflect","prototype","customElement","SchmancyForm","_controlsWithChecked","_controlsWithValue","_controlsThatSubmit","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"form-BxVM6JTn.js","sources":["../src/form/form-v2.ts","../src/form/form.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\n// Define interfaces for form element capabilities\nexport interface FormElement extends HTMLElement {\n\tname?: string\n\tvalue?: string\n\tdisabled?: boolean\n\ttype?: string\n\tdefaultValue?: string\n}\n\nexport interface CheckableFormElement extends FormElement {\n\tchecked?: boolean\n}\n\nexport interface ValidatableFormElement extends FormElement {\n\treportValidity?: () => boolean\n}\n\n// Define interface for form control registry\nexport interface FormControlConfig {\n\ttagName: string\n\thasValue?: boolean\n\thasChecked?: boolean\n\tcanSubmit?: boolean\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element sch-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('sch-form')\nexport default class SchmancyFormV2 extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'sch-form'\n\n\t// Static registry of form controls\n\tprivate static formControlRegistry: FormControlConfig[] = [\n\t\t// Native elements\n\t\t{ tagName: 'input', hasValue: true, hasChecked: true, canSubmit: true },\n\t\t{ tagName: 'textarea', hasValue: true },\n\t\t{ tagName: 'select', hasValue: true },\n\t\t{ tagName: 'button', canSubmit: true },\n\t\t{ tagName: 'radio', hasChecked: true },\n\n\t\t// Custom elements\n\t\t{ tagName: 'schmancy-input', hasValue: true, canSubmit: true },\n\t\t{ tagName: 'schmancy-mask-input', hasValue: true },\n\t\t{ tagName: 'schmancy-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-icon-button', canSubmit: true },\n\t\t{ tagName: 'schmancy-radio', hasChecked: true },\n\t\t{ tagName: 'schmancy-switch', hasChecked: true },\n\t\t{ tagName: 'schmancy-checkbox', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-radio-group', hasChecked: true },\n\t\t{ tagName: 'schmancy-autocomplete', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-select', hasValue: true, hasChecked: true },\n\t\t{ tagName: 'schmancy-combo', hasValue: true },\n\t\t{ tagName: 'schmancy-date-time-input', hasValue: true },\n\t\t{ tagName: 'schmancy-rating', hasValue: true },\n\t]\n\n\t// Static methods to register new form controls\n\tpublic static registerFormControl(config: FormControlConfig): void {\n\t\tconst existingIndex = this.formControlRegistry.findIndex(item => item.tagName === config.tagName)\n\n\t\tif (existingIndex >= 0) {\n\t\t\tthis.formControlRegistry[existingIndex] = {\n\t\t\t\t...this.formControlRegistry[existingIndex],\n\t\t\t\t...config,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.formControlRegistry.push(config)\n\t\t}\n\t}\n\n\t// Helper methods to check control capabilities\n\tprivate static hasValue(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasValue || false\n\t}\n\n\tprivate static hasChecked(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.hasChecked || false\n\t}\n\n\tprivate static canSubmit(tagName: string): boolean {\n\t\tconst config = this.formControlRegistry.find(item => item.tagName === tagName)\n\t\treturn config?.canSubmit || false\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tconst target = e.target as HTMLButtonElement\n\t\t\t\t\tif (target.type?.toLowerCase() === 'submit') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.$disconnecting.next(null)\n\t\tthis.$disconnecting.complete()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tconst selectElement = element as HTMLSelectElement\n\t\t\t\tfor (let i = 0; i < selectElement.options.length; i++) {\n\t\t\t\t\tconst option = selectElement.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type === 'radio')) ||\n\t\t\t\t(tagName !== 'input' && SchmancyFormV2.hasChecked(tagName))\n\t\t\t) {\n\t\t\t\t;(element as CheckableFormElement).checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (SchmancyFormV2.hasValue(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): FormElement[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: FormElement[] = []\n\n\t\tassignedElements?.forEach((element: FormElement) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter(\n\t\t\t\t(childElement: FormElement) => !childElement.disabled,\n\t\t\t)\n\t\t\tformElements.push(...(children as FormElement[]))\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\t\tconst formElements = this.getFormElements()\n\n\t\tformElements.forEach(element => {\n\t\t\tif (!element.name) return\n\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < (element as HTMLSelectElement).options.length; i++) {\n\t\t\t\t\tconst option = (element as HTMLSelectElement).options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (SchmancyFormV2.hasChecked(tagName) && (element as CheckableFormElement).checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tSchmancyFormV2.hasValue(tagName) &&\n\t\t\t\t(element as HTMLInputElement).type !== 'checkbox' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'radio' &&\n\t\t\t\t(element as HTMLInputElement).type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value || '')\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement =>\n\t\t\t\ttypeof (element as ValidatableFormElement).reportValidity === 'function' &&\n\t\t\t\t(element as ValidatableFormElement).reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement = event.target as HTMLElement\n\t\tconst tagName = targetElement.tagName.toLowerCase()\n\n\t\tif (SchmancyFormV2.canSubmit(tagName)) {\n\t\t\tthis.submit()\n\t\t} else if ((targetElement as HTMLButtonElement).type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-form': SchmancyFormV2\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { fromEvent, merge, Subject, takeUntil, tap } from 'rxjs'\n\nexport interface FormEventMap {\n\tsubmit: CustomEvent<FormData>\n\treset: CustomEvent\n}\n\n/**\n * The form is a component used to collect user input from\n * interactive controls.\n *\n * @element schmancy-form\n *\n * @slot - Default slot for the form.\n *\n * @fires submit - Emitted when the form is submitted.\n * @fires reset - Emitted when the form is reset.\n */\n@customElement('schmancy-form')\nexport default class SchmancyForm extends TailwindElement() {\n\tprivate $disconnecting = new Subject()\n\tpublic static readonly tagName = 'schmancy-form'\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: false,\n\t}\n\n\tprivate _controlsWithChecked = [\n\t\t'input',\n\t\t'radio',\n\t\t'schmancy-radio',\n\t\t'schmancy-switch',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-radio-group',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsWithValue = [\n\t\t'input',\n\t\t'schmancy-input',\n\t\t'schmancy-mask-input',\n\t\t'textarea',\n\t\t'schmancy-rating',\n\t\t'schmancy-select',\n\t\t'schmancy-combo',\n\t\t'schmancy-date-time-input',\n\t\t'schmancy-autocomplete',\n\t\t'schmancy-checkbox',\n\t\t'schmancy-select',\n\t]\n\tprivate _controlsThatSubmit = ['button', 'schmancy-input', 'schmancy-button', 'schmancy-icon-button']\n\n\t/** Specifies if form data validation should be skipped on submit.\n\t * @attr novalidate\n\t * @type {boolean}\n\t * @public\n\t */\n\t@property({ type: Boolean, reflect: true }) public novalidate = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(this, 'click').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif ((e.target as HTMLButtonElement).type?.toLowerCase() === 'submit') this.handleSubmitRequest(e)\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.code === 'Enter' || e.key === 'Enter') {\n\t\t\t\t\t\tthis.handleSubmitRequest(e)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.$disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\t/** Submits the form. */\n\tpublic submit(): boolean {\n\t\tconst formData = this.getFormData()\n\t\tif (!this.novalidate && !this.reportValidity()) {\n\t\t\treturn false\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('submit', { detail: formData }))\n\t\treturn true\n\t}\n\n\t/** Resets the form. */\n\tpublic reset() {\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\toption.selected = option.defaultSelected\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t(tagName === 'input' && (element.type === 'checkbox' || element.type == 'radio')) ||\n\t\t\t\t(tagName !== 'input' && this._controlsWithChecked.includes(tagName))\n\t\t\t) {\n\t\t\t\telement.checked = element.hasAttribute('checked')\n\t\t\t} else if (\n\t\t\t\ttagName === 'schmancy-input' ||\n\t\t\t\ttagName === 'schmancy-rating' ||\n\t\t\t\ttagName === 'schmancy-mask-input' ||\n\t\t\t\ttagName === 'schmancy-date-time-input'\n\t\t\t) {\n\t\t\t\telement.value = element.getAttribute('value')\n\t\t\t} else if (this._controlsWithValue.includes(tagName)) {\n\t\t\t\telement.value = element.defaultValue\n\t\t\t}\n\t\t})\n\t\tthis.dispatchEvent(new CustomEvent('reset'))\n\t}\n\n\tprivate getFormElements(): any[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tconst assignedElements = slot?.assignedElements({ flatten: true })\n\t\tconst formElements: any[] = []\n\t\tassignedElements?.forEach((element: any) => {\n\t\t\tif (!element.disabled) {\n\t\t\t\tformElements.push(element)\n\t\t\t}\n\t\t\tconst children = Array.from(element.getElementsByTagName('*')).filter((element: any) => !element.disabled)\n\t\t\tformElements.push(...children)\n\t\t})\n\n\t\treturn formElements\n\t}\n\n\tpublic getFormData() {\n\t\tconst formData = new FormData()\n\n\t\tconst formElements = this.getFormElements()\n\t\tformElements.forEach(element => {\n\t\t\tconst tagName = element.tagName.toLowerCase()\n\t\t\tif (tagName === 'select') {\n\t\t\t\tfor (let i = 0; i < element.options.length; i++) {\n\t\t\t\t\tconst option = element.options[i]\n\t\t\t\t\tif (option.selected) {\n\t\t\t\t\t\tformData.append(element.name, option.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this._controlsWithChecked.includes(tagName) && element.checked) {\n\t\t\t\tformData.append(element.name, element.value || 'on')\n\t\t\t} else if (\n\t\t\t\tthis._controlsWithValue.includes(tagName) &&\n\t\t\t\telement.type !== 'checkbox' &&\n\t\t\t\telement.type !== 'radio' &&\n\t\t\t\telement.type !== 'submit'\n\t\t\t) {\n\t\t\t\tformData.append(element.name, element.value)\n\t\t\t}\n\t\t})\n\n\t\treturn formData\n\t}\n\n\t/** Checks for validity of the form. */\n\tpublic reportValidity(): boolean {\n\t\tconst formElements = this.getFormElements()\n\t\treturn !formElements.some(\n\t\t\telement => typeof element.reportValidity === 'function' && element.reportValidity() === false,\n\t\t)\n\t}\n\n\tprivate handleSubmitRequest(event: MouseEvent | KeyboardEvent) {\n\t\tconst targetElement: any = event.target as HTMLElement\n\t\tif (this._controlsThatSubmit.includes(targetElement.tagName.toLowerCase())) {\n\t\t\tthis.submit()\n\t\t} else if (targetElement.type?.toLowerCase() === 'reset') {\n\t\t\tthis.reset()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprotected override render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-form': SchmancyForm\n\t}\n}\n"],"names":["SchmancyFormV2","TailwindElement","constructor","super","this","$disconnecting","Subject","novalidate","merge","fromEvent","pipe","tap","e","target","type","toLowerCase","handleSubmitRequest","code","key","takeUntil","subscribe","config","existingIndex","formControlRegistry","findIndex","item","tagName","push","find","hasValue","hasChecked","canSubmit","disconnectedCallback","next","complete","submit","formData","getFormData","reportValidity","dispatchEvent","CustomEvent","detail","reset","getFormElements","forEach","element","selectElement","i","options","length","option","selected","defaultSelected","checked","hasAttribute","value","getAttribute","defaultValue","slot","shadowRoot","querySelector","assignedElements","flatten","formElements","disabled","children","Array","from","getElementsByTagName","filter","childElement","FormData","name","append","some","event","targetElement","render","html","shadowRootOptions","LitElement","mode","delegatesFocus","__decorateClass","property","Boolean","reflect","prototype","customElement","SchmancyForm","_controlsWithChecked","_controlsWithValue","_controlsThatSubmit","includes"],"mappings":"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"}
|
package/dist/form.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require("./form-
|
|
1
|
+
"use strict";require("./form-BlPiAPt7.cjs");
|
|
2
2
|
//# sourceMappingURL=form.cjs.map
|
package/dist/form.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./form-
|
|
1
|
+
import "./form-BxVM6JTn.js";
|
|
2
2
|
//# sourceMappingURL=form.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { property as i } from "lit/decorators.js";
|
|
2
|
-
import { T as n } from "./tailwind.mixin-
|
|
2
|
+
import { T as n } from "./tailwind.mixin-Bp_PR6yc.js";
|
|
3
3
|
var h = Object.defineProperty, r = (s, e, a, p) => {
|
|
4
4
|
for (var t, o = void 0, l = s.length - 1; l >= 0; l--) (t = s[l]) && (o = t(e, a, o) || o);
|
|
5
5
|
return o && h(e, a, o), o;
|
|
@@ -45,4 +45,4 @@ export {
|
|
|
45
45
|
d as F,
|
|
46
46
|
c as S
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=formField.mixin-
|
|
48
|
+
//# sourceMappingURL=formField.mixin-BCGA7Ea3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formField.mixin-
|
|
1
|
+
{"version":3,"file":"formField.mixin-BCGA7Ea3.js","sources":["../mixins/formField.mixin.ts"],"sourcesContent":["import { CSSResult, LitElement, PropertyValueMap } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { IBaseMixin } from './baseElement'\nimport { Constructor } from './constructor'\nimport { ITailwindElementMixin, TailwindElement } from './tailwind.mixin'\n\n/**\n * Interface defining the properties and methods that the FormFieldMixin adds.\n */\nexport interface IFormFieldMixin extends Element {\n\t// Properties\n\tname: string\n\tvalue: string | string[] | boolean | number | undefined\n\tlabel: string\n\trequired: boolean\n\tdisabled: boolean\n\treadonly: boolean\n\terror: boolean\n\tvalidationMessage: string\n\thint?: string\n\tid: string\n\n\t// Form association\n\tform: HTMLFormElement | null\n\n\t// Methods\n\tcheckValidity(): boolean\n\treportValidity(): boolean\n\tsetCustomValidity(message: string): void\n\n\t// Event emitter helper\n\temitChange(detail: any): void\n}\n\n/**\n * A mixin that adds form field capabilities to a LitElement class.\n * This provides common form field properties, validation, and form association.\n *\n * @example\n * ```ts\n * class MyInput extends FormFieldMixin(TailwindElement(css`...`)) {\n * // Your component code here\n * }\n * ```\n */\nexport function FormFieldMixin<T extends Constructor<LitElement>>(superClass: T) {\n\tclass FormFieldMixinClass extends superClass {\n\t\tstatic formAssociated = true\n\n\t\t// Element internals for form association\n\t\tprivate internals: ElementInternals | undefined\n\n\t\t// Properties common to form fields\n\t\t/**\n\t\t * The name of the form field (used for form submission)\n\t\t */\n\t\t@property({ type: String })\n\t\tname: string = ''\n\n\t\t/**\n\t\t * The current value of the form field\n\t\t */\n\t\t@property({ reflect: true })\n\t\tvalue: string | string[] | boolean | number | undefined = ''\n\n\t\t/**\n\t\t * Label text for the form field\n\t\t */\n\t\t@property({ type: String })\n\t\tlabel: string = ''\n\n\t\t/**\n\t\t * Whether the field is required\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\trequired: boolean = false\n\n\t\t/**\n\t\t * Whether the field is disabled\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\tdisabled: boolean = false\n\n\t\t/**\n\t\t * Whether the field is read-only\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\treadonly: boolean = false\n\n\t\t/**\n\t\t * Whether the field is in an error state\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\terror: boolean = false\n\n\t\t/**\n\t\t * The validation message to display\n\t\t */\n\t\t@property({ type: String })\n\t\tvalidationMessage: string = ''\n\n\t\t/**\n\t\t * Optional hint text to display below the field\n\t\t */\n\t\t@property({ type: String })\n\t\thint?: string\n\n\t\t/**\n\t\t * Unique identifier for the field\n\t\t */\n\t\t@property({ reflect: true })\n\t\toverride id: string = `schmancy-field-${Date.now()}-${Math.floor(Math.random() * 1000)}`\n\n\t\tconstructor(...args: any[]) {\n\t\t\tsuper(...args)\n\t\t\ttry {\n\t\t\t\tthis.internals = this.attachInternals()\n\t\t\t} catch {\n\t\t\t\tthis.internals = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Gets the form this element is associated with\n\t\t */\n\t\tget form(): HTMLFormElement | null {\n\t\t\treturn this.internals?.form ?? null\n\t\t}\n\n\t\t/**\n\t\t * Lifecycle method called when properties change\n\t\t */\n\t\tprotected willUpdate(changedProps: PropertyValueMap<any>): void {\n\t\t\tsuper.willUpdate(changedProps)\n\n\t\t\t// Update form value when value changes\n\t\t\tif (changedProps.has('value')) {\n\t\t\t\tthis.internals?.setFormValue(this.value as string | File | FormData | null)\n\t\t\t}\n\n\t\t\t// Update validation state when error or validation message changes\n\t\t\tif (changedProps.has('error') || changedProps.has('validationMessage')) {\n\t\t\t\tif (this.error && this.validationMessage) {\n\t\t\t\t\tthis.internals?.setValidity({ customError: true }, this.validationMessage)\n\t\t\t\t} else {\n\t\t\t\t\tthis.internals?.setValidity({})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks if the field is valid without showing validation UI\n\t\t */\n\t\tcheckValidity(): boolean {\n\t\t\tif (this.disabled) return true\n\n\t\t\tif (this.required && (this.value === '' || this.value === undefined || this.value === null)) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.validationMessage = 'This field is required'\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true\n\t\t}\n\n\t\t/**\n\t\t * Reports validity and shows validation UI if invalid\n\t\t */\n\t\treportValidity(): boolean {\n\t\t\tconst isValid = this.checkValidity()\n\t\t\tif (!isValid) {\n\t\t\t\tthis.internals?.reportValidity()\n\t\t\t}\n\t\t\treturn isValid\n\t\t}\n\n\t\t/**\n\t\t * Sets a custom validation message\n\t\t */\n\t\tsetCustomValidity(message: string): void {\n\t\t\tthis.validationMessage = message\n\t\t\tthis.error = message !== ''\n\t\t\tif (message) {\n\t\t\t\tthis.internals?.setValidity({ customError: true }, message)\n\t\t\t} else {\n\t\t\t\tthis.internals?.setValidity({})\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Helper method to emit change events\n\t\t */\n\t\temitChange(detail: any): void {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\treturn FormFieldMixinClass as Constructor<IFormFieldMixin> & T\n}\n\n/**\n * A convenience function that composes FormFieldMixin with TailwindElement\n * to create a base class for Schmancy form components.\n *\n * @example\n * ```ts\n * class MyInput extends SchmancyFormField(css`...`) {\n * // Your component code here\n * }\n * ```\n */\nexport function SchmancyFormField<T extends CSSResult>(componentStyle?: T) {\n\treturn FormFieldMixin(TailwindElement(componentStyle)) as Constructor<IFormFieldMixin> &\n\t\tConstructor<ITailwindElementMixin> &\n\t\tConstructor<LitElement> &\n\t\tConstructor<IBaseMixin>\n}\n"],"names":["FormFieldMixin","superClass","FormFieldMixinClass","args","super","this","name","value","label","required","disabled","readonly","error","validationMessage","id","Date","now","Math","floor","random","internals","attachInternals","form","changedProps","willUpdate","has","setFormValue","setValidity","customError","checkValidity","isValid","reportValidity","message","detail","dispatchEvent","CustomEvent","bubbles","composed","formAssociated","_e","__decorateClass","property","type","String","prototype","reflect","Boolean","SchmancyFormField","componentStyle","TailwindElement"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const r=require("lit/decorators.js"),p=require("./tailwind.mixin-
|
|
2
|
-
//# sourceMappingURL=formField.mixin-
|
|
1
|
+
"use strict";const r=require("lit/decorators.js"),p=require("./tailwind.mixin-Cp4PyXok.cjs");var h=Object.defineProperty,i=(s,e,a,d)=>{for(var t,o=void 0,l=s.length-1;l>=0;l--)(t=s[l])&&(o=t(e,a,o)||o);return o&&h(e,a,o),o};function n(s){const a=class a extends s{constructor(...t){super(...t),this.name="",this.value="",this.label="",this.required=!1,this.disabled=!1,this.readonly=!1,this.error=!1,this.validationMessage="",this.id=`schmancy-field-${Date.now()}-${Math.floor(1e3*Math.random())}`;try{this.internals=this.attachInternals()}catch{this.internals=void 0}}get form(){return this.internals?.form??null}willUpdate(t){super.willUpdate(t),t.has("value")&&this.internals?.setFormValue(this.value),(t.has("error")||t.has("validationMessage"))&&(this.error&&this.validationMessage?this.internals?.setValidity({customError:!0},this.validationMessage):this.internals?.setValidity({}))}checkValidity(){return!!this.disabled||!this.required||this.value!==""&&this.value!==void 0&&this.value!==null||(this.error=!0,this.validationMessage="This field is required",!1)}reportValidity(){const t=this.checkValidity();return t||this.internals?.reportValidity(),t}setCustomValidity(t){this.validationMessage=t,this.error=t!=="",t?this.internals?.setValidity({customError:!0},t):this.internals?.setValidity({})}emitChange(t){this.dispatchEvent(new CustomEvent("change",{detail:t,bubbles:!0,composed:!0}))}};a.formAssociated=!0;let e=a;return i([r.property({type:String})],e.prototype,"name"),i([r.property({reflect:!0})],e.prototype,"value"),i([r.property({type:String})],e.prototype,"label"),i([r.property({type:Boolean,reflect:!0})],e.prototype,"required"),i([r.property({type:Boolean,reflect:!0})],e.prototype,"disabled"),i([r.property({type:Boolean,reflect:!0})],e.prototype,"readonly"),i([r.property({type:Boolean,reflect:!0})],e.prototype,"error"),i([r.property({type:String})],e.prototype,"validationMessage"),i([r.property({type:String})],e.prototype,"hint"),i([r.property({reflect:!0})],e.prototype,"id"),e}exports.FormFieldMixin=n,exports.SchmancyFormField=function(s){return n(p.TailwindElement(s))};
|
|
2
|
+
//# sourceMappingURL=formField.mixin-BfJMifU9.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formField.mixin-
|
|
1
|
+
{"version":3,"file":"formField.mixin-BfJMifU9.cjs","sources":["../mixins/formField.mixin.ts"],"sourcesContent":["import { CSSResult, LitElement, PropertyValueMap } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { IBaseMixin } from './baseElement'\nimport { Constructor } from './constructor'\nimport { ITailwindElementMixin, TailwindElement } from './tailwind.mixin'\n\n/**\n * Interface defining the properties and methods that the FormFieldMixin adds.\n */\nexport interface IFormFieldMixin extends Element {\n\t// Properties\n\tname: string\n\tvalue: string | string[] | boolean | number | undefined\n\tlabel: string\n\trequired: boolean\n\tdisabled: boolean\n\treadonly: boolean\n\terror: boolean\n\tvalidationMessage: string\n\thint?: string\n\tid: string\n\n\t// Form association\n\tform: HTMLFormElement | null\n\n\t// Methods\n\tcheckValidity(): boolean\n\treportValidity(): boolean\n\tsetCustomValidity(message: string): void\n\n\t// Event emitter helper\n\temitChange(detail: any): void\n}\n\n/**\n * A mixin that adds form field capabilities to a LitElement class.\n * This provides common form field properties, validation, and form association.\n *\n * @example\n * ```ts\n * class MyInput extends FormFieldMixin(TailwindElement(css`...`)) {\n * // Your component code here\n * }\n * ```\n */\nexport function FormFieldMixin<T extends Constructor<LitElement>>(superClass: T) {\n\tclass FormFieldMixinClass extends superClass {\n\t\tstatic formAssociated = true\n\n\t\t// Element internals for form association\n\t\tprivate internals: ElementInternals | undefined\n\n\t\t// Properties common to form fields\n\t\t/**\n\t\t * The name of the form field (used for form submission)\n\t\t */\n\t\t@property({ type: String })\n\t\tname: string = ''\n\n\t\t/**\n\t\t * The current value of the form field\n\t\t */\n\t\t@property({ reflect: true })\n\t\tvalue: string | string[] | boolean | number | undefined = ''\n\n\t\t/**\n\t\t * Label text for the form field\n\t\t */\n\t\t@property({ type: String })\n\t\tlabel: string = ''\n\n\t\t/**\n\t\t * Whether the field is required\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\trequired: boolean = false\n\n\t\t/**\n\t\t * Whether the field is disabled\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\tdisabled: boolean = false\n\n\t\t/**\n\t\t * Whether the field is read-only\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\treadonly: boolean = false\n\n\t\t/**\n\t\t * Whether the field is in an error state\n\t\t */\n\t\t@property({ type: Boolean, reflect: true })\n\t\terror: boolean = false\n\n\t\t/**\n\t\t * The validation message to display\n\t\t */\n\t\t@property({ type: String })\n\t\tvalidationMessage: string = ''\n\n\t\t/**\n\t\t * Optional hint text to display below the field\n\t\t */\n\t\t@property({ type: String })\n\t\thint?: string\n\n\t\t/**\n\t\t * Unique identifier for the field\n\t\t */\n\t\t@property({ reflect: true })\n\t\toverride id: string = `schmancy-field-${Date.now()}-${Math.floor(Math.random() * 1000)}`\n\n\t\tconstructor(...args: any[]) {\n\t\t\tsuper(...args)\n\t\t\ttry {\n\t\t\t\tthis.internals = this.attachInternals()\n\t\t\t} catch {\n\t\t\t\tthis.internals = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Gets the form this element is associated with\n\t\t */\n\t\tget form(): HTMLFormElement | null {\n\t\t\treturn this.internals?.form ?? null\n\t\t}\n\n\t\t/**\n\t\t * Lifecycle method called when properties change\n\t\t */\n\t\tprotected willUpdate(changedProps: PropertyValueMap<any>): void {\n\t\t\tsuper.willUpdate(changedProps)\n\n\t\t\t// Update form value when value changes\n\t\t\tif (changedProps.has('value')) {\n\t\t\t\tthis.internals?.setFormValue(this.value as string | File | FormData | null)\n\t\t\t}\n\n\t\t\t// Update validation state when error or validation message changes\n\t\t\tif (changedProps.has('error') || changedProps.has('validationMessage')) {\n\t\t\t\tif (this.error && this.validationMessage) {\n\t\t\t\t\tthis.internals?.setValidity({ customError: true }, this.validationMessage)\n\t\t\t\t} else {\n\t\t\t\t\tthis.internals?.setValidity({})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Checks if the field is valid without showing validation UI\n\t\t */\n\t\tcheckValidity(): boolean {\n\t\t\tif (this.disabled) return true\n\n\t\t\tif (this.required && (this.value === '' || this.value === undefined || this.value === null)) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.validationMessage = 'This field is required'\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true\n\t\t}\n\n\t\t/**\n\t\t * Reports validity and shows validation UI if invalid\n\t\t */\n\t\treportValidity(): boolean {\n\t\t\tconst isValid = this.checkValidity()\n\t\t\tif (!isValid) {\n\t\t\t\tthis.internals?.reportValidity()\n\t\t\t}\n\t\t\treturn isValid\n\t\t}\n\n\t\t/**\n\t\t * Sets a custom validation message\n\t\t */\n\t\tsetCustomValidity(message: string): void {\n\t\t\tthis.validationMessage = message\n\t\t\tthis.error = message !== ''\n\t\t\tif (message) {\n\t\t\t\tthis.internals?.setValidity({ customError: true }, message)\n\t\t\t} else {\n\t\t\t\tthis.internals?.setValidity({})\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Helper method to emit change events\n\t\t */\n\t\temitChange(detail: any): void {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\treturn FormFieldMixinClass as Constructor<IFormFieldMixin> & T\n}\n\n/**\n * A convenience function that composes FormFieldMixin with TailwindElement\n * to create a base class for Schmancy form components.\n *\n * @example\n * ```ts\n * class MyInput extends SchmancyFormField(css`...`) {\n * // Your component code here\n * }\n * ```\n */\nexport function SchmancyFormField<T extends CSSResult>(componentStyle?: T) {\n\treturn FormFieldMixin(TailwindElement(componentStyle)) as Constructor<IFormFieldMixin> &\n\t\tConstructor<ITailwindElementMixin> &\n\t\tConstructor<LitElement> &\n\t\tConstructor<IBaseMixin>\n}\n"],"names":["FormFieldMixin","superClass","FormFieldMixinClass","args","super","this","name","value","label","required","disabled","readonly","error","validationMessage","id","Date","now","Math","floor","random","internals","attachInternals","form","changedProps","willUpdate","has","setFormValue","setValidity","customError","checkValidity","isValid","reportValidity","message","detail","dispatchEvent","CustomEvent","bubbles","composed","formAssociated","_i","__decorateClass","property","type","String","prototype","reflect","Boolean","componentStyle","TailwindElement"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const o=require("rxjs"),y=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const l=require("lit/decorators.js"),d=require("./tailwind.mixin-
|
|
1
|
+
"use strict";const o=require("rxjs"),y=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const l=require("lit/decorators.js"),d=require("./tailwind.mixin-Cp4PyXok.cjs"),p=require("lit");var m=Object.defineProperty,g=Object.getOwnPropertyDescriptor,c=(t,i,a,s)=>{for(var n,r=s>1?void 0:s?g(i,a):i,h=t.length-1;h>=0;h--)(n=t[h])&&(r=(s?n(i,a,r):n(r))||r);return s&&r&&m(i,a,r),r};let e=class extends d.TailwindElement(p.css`
|
|
2
2
|
:host {
|
|
3
3
|
--schmancy-icon-size: 24px;
|
|
4
4
|
--schmancy-icon-fill: 0;
|
|
@@ -46,4 +46,4 @@
|
|
|
46
46
|
<slot></slot>
|
|
47
47
|
</span>
|
|
48
48
|
`}};e.fontsLoaded=!1,e.tokenSizes={xxs:{size:"12px",opsz:20},xs:{size:"16px",opsz:20},sm:{size:"20px",opsz:20},md:{size:"24px",opsz:24},lg:{size:"32px",opsz:40}},c([l.property({type:Number,reflect:!0})],e.prototype,"fill",2),c([l.property({type:Number,reflect:!0})],e.prototype,"weight",2),c([l.property({type:Number,reflect:!0})],e.prototype,"grade",2),c([l.property({type:String,reflect:!0})],e.prototype,"variant",2),c([l.property({type:String,reflect:!0})],e.prototype,"size",2),e=c([l.customElement("schmancy-icon")],e);
|
|
49
|
-
//# sourceMappingURL=icon-
|
|
49
|
+
//# sourceMappingURL=icon-DHEXr3c-.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-pU_cfmpD.cjs","sources":["../src/icons/icon.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { BehaviorSubject, combineLatest, takeUntil } from 'rxjs'\nimport { tap } from 'rxjs/operators'\n\n/**\n * Icon size tokens - M3 aligned with optical size optimization\n * - xxs: 12px (opsz: 20) - fits in 24px buttons (ultra-compact)\n * - xs: 16px (opsz: 20) - fits in 32px buttons\n * - sm: 20px (opsz: 20) - fits in 40px buttons\n * - md: 24px (opsz: 24) - fits in 48px buttons (default)\n * - lg: 32px (opsz: 40) - fits in 56px buttons\n * - Or custom string like '48px'\n */\nexport type IconSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | string\n\n/**\n * @element schmancy-icon\n * Material Symbols icon component with flexible font variation properties\n *\n * @cssprop --schmancy-icon-size - The size of the icon (default: 24px)\n * @cssprop --schmancy-icon-fill - Fill value for icon (0-1)\n * @cssprop --schmancy-icon-weight - Weight value for icon (100-700)\n * @cssprop --schmancy-icon-grade - Grade value for icon (-50-200)\n * @cssprop --schmancy-icon-opsz - Optical size (default: 24)\n */\n@customElement('schmancy-icon')\nexport default class SchmancyIcon extends TailwindElement(css`\n\t:host {\n\t\t--schmancy-icon-size: 24px;\n\t\t--schmancy-icon-fill: 0;\n\t\t--schmancy-icon-weight: 400;\n\t\t--schmancy-icon-grade: 0;\n\t\t--schmancy-icon-opsz: 24;\n\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: var(--schmancy-icon-size);\n\t\theight: var(--schmancy-icon-size);\n\t\tfont-size: var(--schmancy-icon-size);\n\t\tcolor: inherit;\n\t\ttransition: font-variation-settings 0.2s ease;\n\t}\n\n\t.material-symbols {\n\t\tfont-family: var(--schmancy-icon-font, 'Material Symbols Outlined');\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-webkit-font-feature-settings: 'liga';\n\t\tfont-feature-settings: 'liga';\n\t\tfont-variation-settings:\n\t\t\t'FILL' var(--schmancy-icon-fill),\n\t\t\t'wght' var(--schmancy-icon-weight),\n\t\t\t'GRAD' var(--schmancy-icon-grade),\n\t\t\t'opsz' var(--schmancy-icon-opsz);\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n`) {\n\t// Static flag to track if Google Fonts have been loaded\n\tprivate static fontsLoaded = false\n\n\t/**\n\t * Load Material Symbols fonts from Google Fonts CDN\n\t */\n\tprivate static loadFonts(): void {\n\t\tif (SchmancyIcon.fontsLoaded) {\n\t\t\treturn\n\t\t}\n\n\t\tconst link = document.createElement('link')\n\t\tlink.rel = 'stylesheet'\n\t\tlink.href = 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap'\n\t\tdocument.head.appendChild(link)\n\n\t\tSchmancyIcon.fontsLoaded = true\n\t}\n\n\t/**\n\t * Fill value for the icon (0-1)\n\t * 0 = outlined, 1 = filled\n\t */\n\t@property({ type: Number, reflect: true })\n\tfill = 0\n\n\t/**\n\t * Weight value for the icon (100-700)\n\t * Controls the thickness of the icon strokes\n\t */\n\t@property({ type: Number, reflect: true })\n\tweight = 400\n\n\t/**\n\t * Grade value for the icon (-50-200)\n\t * Adjusts the visual weight/grade\n\t */\n\t@property({ type: Number, reflect: true })\n\tgrade = 0\n\n\t/**\n\t * Icon variant style\n\t * @values outlined | rounded | sharp\n\t */\n\t@property({ type: String, reflect: true })\n\tvariant: 'outlined' | 'rounded' | 'sharp' = 'outlined'\n\n\t/**\n\t * Size of the icon - M3 aligned tokens or custom string\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Custom: any CSS size string like '48px', '2rem'\n\t */\n\t@property({ type: String, reflect: true })\n\tsize: IconSize = 'md'\n\n\t// M3 aligned token sizes with optimal optical sizes\n\tprivate static readonly tokenSizes: Record<string, { size: string; opsz: number }> = {\n\t\txxs: { size: '12px', opsz: 20 }, // fits in 24px buttons (ultra-compact)\n\t\txs: { size: '16px', opsz: 20 }, // fits in 32px buttons\n\t\tsm: { size: '20px', opsz: 20 }, // fits in 40px buttons\n\t\tmd: { size: '24px', opsz: 24 }, // fits in 48px buttons (default)\n\t\tlg: { size: '32px', opsz: 40 }, // fits in 56px buttons\n\t}\n\n\t// RxJS subjects for reactive property updates\n\tprivate fill$ = new BehaviorSubject(this.fill)\n\tprivate weight$ = new BehaviorSubject(this.weight)\n\tprivate grade$ = new BehaviorSubject(this.grade)\n\tprivate variant$ = new BehaviorSubject(this.variant)\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Load Google Fonts if not already loaded\n\t\tSchmancyIcon.loadFonts()\n\n\t\t// Set accessibility attributes for decorative icons\n\t\tif (!this.hasAttribute('aria-label') &&\n\t\t !this.hasAttribute('aria-labelledby') &&\n\t\t !this.hasAttribute('aria-hidden') &&\n\t\t !this.hasAttribute('role')) {\n\t\t\tthis.setAttribute('aria-hidden', 'true')\n\t\t}\n\n\t\t// Setup reactive CSS variable updates\n\t\tcombineLatest([\n\t\t\tthis.fill$,\n\t\t\tthis.weight$,\n\t\t\tthis.grade$,\n\t\t\tthis.variant$\n\t\t]).pipe(\n\t\t\ttap(([fill, weight, grade, variant]) => {\n\t\t\t\t// Update CSS custom properties for smooth transitions\n\t\t\t\tthis.style.setProperty('--schmancy-icon-fill', String(fill))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-weight', String(weight))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-grade', String(grade))\n\n\t\t\t\t// Update font family based on variant\n\t\t\t\tconst fontFamily = {\n\t\t\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t\t\t}[variant] || 'Material Symbols Outlined'\n\n\t\t\t\tthis.style.setProperty('--schmancy-icon-font', fontFamily)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprotected updated(changedProperties: Map<string | number | symbol, unknown>): void {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Update BehaviorSubjects when properties change\n\t\tif (changedProperties.has('fill')) {\n\t\t\tthis.fill$.next(this.fill)\n\t\t}\n\t\tif (changedProperties.has('weight')) {\n\t\t\tthis.weight$.next(this.weight)\n\t\t}\n\t\tif (changedProperties.has('grade')) {\n\t\t\tthis.grade$.next(this.grade)\n\t\t}\n\t\tif (changedProperties.has('variant')) {\n\t\t\tthis.variant$.next(this.variant)\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\tconst fontFamily = {\n\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t}[this.variant] || 'Material Symbols Outlined'\n\n\t\t// Resolve size token or use custom value\n\t\tconst sizeConfig = SchmancyIcon.tokenSizes[this.size]\n\t\tconst iconSize = sizeConfig?.size || this.size\n\t\tconst opticalSize = sizeConfig?.opsz || 24\n\n\t\tconst style = {\n\t\t\t'--schmancy-icon-fill': this.fill,\n\t\t\t'--schmancy-icon-weight': this.weight,\n\t\t\t'--schmancy-icon-grade': this.grade,\n\t\t\t'--schmancy-icon-font': fontFamily,\n\t\t\t'--schmancy-icon-size': iconSize,\n\t\t\t'--schmancy-icon-opsz': opticalSize,\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"material-symbols\" part=\"icon\" style=${this.styleMap(style)}>\n\t\t\t\t<slot></slot>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon': SchmancyIcon\n\t}\n}"],"names":["SchmancyIcon","TailwindElement","css","constructor","super","arguments","this","fill","weight","grade","variant","size","fill$","BehaviorSubject","weight$","grade$","variant$","loadFonts","fontsLoaded","link","document","createElement","rel","href","head","appendChild","connectedCallback","hasAttribute","setAttribute","combineLatest","pipe","tap","style","setProperty","String","fontFamily","outlined","rounded","sharp","takeUntil","disconnecting","subscribe","changedProperties","updated","has","next","render","sizeConfig","tokenSizes","iconSize","opticalSize","opsz","html","styleMap","xxs","xs","sm","md","lg","__decorateClass","property","type","Number","reflect","prototype","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"icon-DHEXr3c-.cjs","sources":["../src/icons/icon.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { BehaviorSubject, combineLatest, takeUntil } from 'rxjs'\nimport { tap } from 'rxjs/operators'\n\n/**\n * Icon size tokens - M3 aligned with optical size optimization\n * - xxs: 12px (opsz: 20) - fits in 24px buttons (ultra-compact)\n * - xs: 16px (opsz: 20) - fits in 32px buttons\n * - sm: 20px (opsz: 20) - fits in 40px buttons\n * - md: 24px (opsz: 24) - fits in 48px buttons (default)\n * - lg: 32px (opsz: 40) - fits in 56px buttons\n * - Or custom string like '48px'\n */\nexport type IconSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | string\n\n/**\n * @element schmancy-icon\n * Material Symbols icon component with flexible font variation properties\n *\n * @cssprop --schmancy-icon-size - The size of the icon (default: 24px)\n * @cssprop --schmancy-icon-fill - Fill value for icon (0-1)\n * @cssprop --schmancy-icon-weight - Weight value for icon (100-700)\n * @cssprop --schmancy-icon-grade - Grade value for icon (-50-200)\n * @cssprop --schmancy-icon-opsz - Optical size (default: 24)\n */\n@customElement('schmancy-icon')\nexport default class SchmancyIcon extends TailwindElement(css`\n\t:host {\n\t\t--schmancy-icon-size: 24px;\n\t\t--schmancy-icon-fill: 0;\n\t\t--schmancy-icon-weight: 400;\n\t\t--schmancy-icon-grade: 0;\n\t\t--schmancy-icon-opsz: 24;\n\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: var(--schmancy-icon-size);\n\t\theight: var(--schmancy-icon-size);\n\t\tfont-size: var(--schmancy-icon-size);\n\t\tcolor: inherit;\n\t\ttransition: font-variation-settings 0.2s ease;\n\t}\n\n\t.material-symbols {\n\t\tfont-family: var(--schmancy-icon-font, 'Material Symbols Outlined');\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-webkit-font-feature-settings: 'liga';\n\t\tfont-feature-settings: 'liga';\n\t\tfont-variation-settings:\n\t\t\t'FILL' var(--schmancy-icon-fill),\n\t\t\t'wght' var(--schmancy-icon-weight),\n\t\t\t'GRAD' var(--schmancy-icon-grade),\n\t\t\t'opsz' var(--schmancy-icon-opsz);\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n`) {\n\t// Static flag to track if Google Fonts have been loaded\n\tprivate static fontsLoaded = false\n\n\t/**\n\t * Load Material Symbols fonts from Google Fonts CDN\n\t */\n\tprivate static loadFonts(): void {\n\t\tif (SchmancyIcon.fontsLoaded) {\n\t\t\treturn\n\t\t}\n\n\t\tconst link = document.createElement('link')\n\t\tlink.rel = 'stylesheet'\n\t\tlink.href = 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap'\n\t\tdocument.head.appendChild(link)\n\n\t\tSchmancyIcon.fontsLoaded = true\n\t}\n\n\t/**\n\t * Fill value for the icon (0-1)\n\t * 0 = outlined, 1 = filled\n\t */\n\t@property({ type: Number, reflect: true })\n\tfill = 0\n\n\t/**\n\t * Weight value for the icon (100-700)\n\t * Controls the thickness of the icon strokes\n\t */\n\t@property({ type: Number, reflect: true })\n\tweight = 400\n\n\t/**\n\t * Grade value for the icon (-50-200)\n\t * Adjusts the visual weight/grade\n\t */\n\t@property({ type: Number, reflect: true })\n\tgrade = 0\n\n\t/**\n\t * Icon variant style\n\t * @values outlined | rounded | sharp\n\t */\n\t@property({ type: String, reflect: true })\n\tvariant: 'outlined' | 'rounded' | 'sharp' = 'outlined'\n\n\t/**\n\t * Size of the icon - M3 aligned tokens or custom string\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Custom: any CSS size string like '48px', '2rem'\n\t */\n\t@property({ type: String, reflect: true })\n\tsize: IconSize = 'md'\n\n\t// M3 aligned token sizes with optimal optical sizes\n\tprivate static readonly tokenSizes: Record<string, { size: string; opsz: number }> = {\n\t\txxs: { size: '12px', opsz: 20 }, // fits in 24px buttons (ultra-compact)\n\t\txs: { size: '16px', opsz: 20 }, // fits in 32px buttons\n\t\tsm: { size: '20px', opsz: 20 }, // fits in 40px buttons\n\t\tmd: { size: '24px', opsz: 24 }, // fits in 48px buttons (default)\n\t\tlg: { size: '32px', opsz: 40 }, // fits in 56px buttons\n\t}\n\n\t// RxJS subjects for reactive property updates\n\tprivate fill$ = new BehaviorSubject(this.fill)\n\tprivate weight$ = new BehaviorSubject(this.weight)\n\tprivate grade$ = new BehaviorSubject(this.grade)\n\tprivate variant$ = new BehaviorSubject(this.variant)\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Load Google Fonts if not already loaded\n\t\tSchmancyIcon.loadFonts()\n\n\t\t// Set accessibility attributes for decorative icons\n\t\tif (!this.hasAttribute('aria-label') &&\n\t\t !this.hasAttribute('aria-labelledby') &&\n\t\t !this.hasAttribute('aria-hidden') &&\n\t\t !this.hasAttribute('role')) {\n\t\t\tthis.setAttribute('aria-hidden', 'true')\n\t\t}\n\n\t\t// Setup reactive CSS variable updates\n\t\tcombineLatest([\n\t\t\tthis.fill$,\n\t\t\tthis.weight$,\n\t\t\tthis.grade$,\n\t\t\tthis.variant$\n\t\t]).pipe(\n\t\t\ttap(([fill, weight, grade, variant]) => {\n\t\t\t\t// Update CSS custom properties for smooth transitions\n\t\t\t\tthis.style.setProperty('--schmancy-icon-fill', String(fill))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-weight', String(weight))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-grade', String(grade))\n\n\t\t\t\t// Update font family based on variant\n\t\t\t\tconst fontFamily = {\n\t\t\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t\t\t}[variant] || 'Material Symbols Outlined'\n\n\t\t\t\tthis.style.setProperty('--schmancy-icon-font', fontFamily)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprotected updated(changedProperties: Map<string | number | symbol, unknown>): void {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Update BehaviorSubjects when properties change\n\t\tif (changedProperties.has('fill')) {\n\t\t\tthis.fill$.next(this.fill)\n\t\t}\n\t\tif (changedProperties.has('weight')) {\n\t\t\tthis.weight$.next(this.weight)\n\t\t}\n\t\tif (changedProperties.has('grade')) {\n\t\t\tthis.grade$.next(this.grade)\n\t\t}\n\t\tif (changedProperties.has('variant')) {\n\t\t\tthis.variant$.next(this.variant)\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\tconst fontFamily = {\n\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t}[this.variant] || 'Material Symbols Outlined'\n\n\t\t// Resolve size token or use custom value\n\t\tconst sizeConfig = SchmancyIcon.tokenSizes[this.size]\n\t\tconst iconSize = sizeConfig?.size || this.size\n\t\tconst opticalSize = sizeConfig?.opsz || 24\n\n\t\tconst style = {\n\t\t\t'--schmancy-icon-fill': this.fill,\n\t\t\t'--schmancy-icon-weight': this.weight,\n\t\t\t'--schmancy-icon-grade': this.grade,\n\t\t\t'--schmancy-icon-font': fontFamily,\n\t\t\t'--schmancy-icon-size': iconSize,\n\t\t\t'--schmancy-icon-opsz': opticalSize,\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"material-symbols\" part=\"icon\" style=${this.styleMap(style)}>\n\t\t\t\t<slot></slot>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon': SchmancyIcon\n\t}\n}"],"names":["SchmancyIcon","TailwindElement","css","constructor","super","arguments","this","fill","weight","grade","variant","size","fill$","BehaviorSubject","weight$","grade$","variant$","loadFonts","fontsLoaded","link","document","createElement","rel","href","head","appendChild","connectedCallback","hasAttribute","setAttribute","combineLatest","pipe","tap","style","setProperty","String","fontFamily","outlined","rounded","sharp","takeUntil","disconnecting","subscribe","changedProperties","updated","has","next","render","sizeConfig","tokenSizes","iconSize","opticalSize","opsz","html","styleMap","xxs","xs","sm","md","lg","__decorateClass","property","type","Number","reflect","prototype","customElement"],"mappings":"gbA4BA,IAAqBA,EAArB,cAA0CC,EAAAA,gBAAgBC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAA1D,aAAAC,CAAAC,MAAAA,GAAAC,SAAAA,EAoECC,KAAAC,KAAO,EAOPD,KAAAE,OAAS,IAOTF,KAAAG,MAAQ,EAORH,KAAAI,QAA4C,WAQ5CJ,KAAAK,KAAiB,KAYjBL,KAAQM,MAAQ,IAAIC,kBAAgBP,KAAKC,IAAAA,EACzCD,KAAQQ,QAAU,IAAID,kBAAgBP,KAAKE,MAAAA,EAC3CF,KAAQS,OAAS,IAAIF,kBAAgBP,KAAKG,KAAAA,EAC1CH,KAAQU,SAAW,IAAIH,kBAAgBP,KAAKI,OAAAA,CAAO,CA9DnD,OAAA,WAAeO,CACd,GAAIjB,EAAakB,YAChB,OAGD,MAAMC,EAAOC,SAASC,cAAc,MAAA,EACpCF,EAAKG,IAAM,aACXH,EAAKI,KAAO,sSACZH,SAASI,KAAKC,YAAYN,CAAAA,EAE1BnB,EAAakB,YAAAA,EACd,CAqDA,oBACCd,MAAMsB,kBAAAA,EAGN1B,EAAaiB,UAAAA,EAGRX,KAAKqB,aAAa,YAAA,GAClBrB,KAAKqB,aAAa,iBAAA,GAClBrB,KAAKqB,aAAa,aAAA,GAClBrB,KAAKqB,aAAa,MAAA,GACtBrB,KAAKsB,aAAa,cAAe,MAAA,EAIlCC,gBAAc,CACbvB,KAAKM,MACLN,KAAKQ,QACLR,KAAKS,OACLT,KAAKU,QAAAA,CAAAA,EACHc,KACFC,EAAAA,IAAI,CAAA,CAAExB,EAAMC,EAAQC,EAAOC,CAAAA,IAAAA,CAE1BJ,KAAK0B,MAAMC,YAAY,uBAAwBC,OAAO3B,CAAAA,CAAAA,EACtDD,KAAK0B,MAAMC,YAAY,yBAA0BC,OAAO1B,CAAAA,CAAAA,EACxDF,KAAK0B,MAAMC,YAAY,wBAAyBC,OAAOzB,CAAAA,CAAAA,EAGvD,MAAM0B,EAAa,CAClBC,SAAY,4BACZC,QAAW,2BACXC,MAAS,wBAAA,EACR5B,CAAAA,GAAY,4BAEdJ,KAAK0B,MAAMC,YAAY,uBAAwBE,CAAAA,CAAAA,CAAAA,EAEhDI,EAAAA,UAAUjC,KAAKkC,aAAAA,CAAAA,EACdC,UAAAA,CACH,CAEU,QAAQC,EAAAA,CACjBtC,MAAMuC,QAAQD,CAAAA,EAGVA,EAAkBE,IAAI,MAAA,GACzBtC,KAAKM,MAAMiC,KAAKvC,KAAKC,IAAAA,EAElBmC,EAAkBE,IAAI,QAAA,GACzBtC,KAAKQ,QAAQ+B,KAAKvC,KAAKE,MAAAA,EAEpBkC,EAAkBE,IAAI,OAAA,GACzBtC,KAAKS,OAAO8B,KAAKvC,KAAKG,KAAAA,EAEnBiC,EAAkBE,IAAI,SAAA,GACzBtC,KAAKU,SAAS6B,KAAKvC,KAAKI,OAAAA,CAE1B,CAEU,QAAAoC,CACT,MAAMX,EAAa,CAClBC,SAAY,4BACZC,QAAW,2BACXC,MAAS,wBAAA,EACRhC,KAAKI,OAAAA,GAAY,4BAGbqC,EAAa/C,EAAagD,WAAW1C,KAAKK,MAC1CsC,EAAWF,GAAYpC,MAAQL,KAAKK,KACpCuC,EAAcH,GAAYI,MAAQ,GAElCnB,EAAQ,CACb,uBAAwB1B,KAAKC,KAC7B,yBAA0BD,KAAKE,OAC/B,wBAAyBF,KAAKG,MAC9B,uBAAwB0B,EACxB,uBAAwBc,EACxB,uBAAwBC,CAAAA,EAGzB,OAAOE,EAAAA;AAAAA,sDAC6C9C,KAAK+C,SAASrB,CAAAA,CAAAA;AAAAA;AAAAA;AAAAA,GAInE,CAAA,EAtMoBhC,EA6CLkB,eA7CKlB,EAoGIgD,WAA6D,CACpFM,IAAK,CAAE3C,KAAM,OAAQwC,KAAM,IAC3BI,GAAI,CAAE5C,KAAM,OAAQwC,KAAM,EAAA,EAC1BK,GAAI,CAAE7C,KAAM,OAAQwC,KAAM,EAAA,EAC1BM,GAAI,CAAE9C,KAAM,OAAQwC,KAAM,EAAA,EAC1BO,GAAI,CAAE/C,KAAM,OAAQwC,KAAM,EAAA,CAAA,EArC3BQ,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMC,OAAQC,QAAAA,EAAS,CAAA,CAAA,EAnEf/D,EAoEpBgE,UAAA,OAAA,CAAA,EAOAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMC,OAAQC,UAAS,CAAA,CAAA,EA1Ef/D,EA2EpBgE,UAAA,SAAA,CAAA,EAOAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMC,OAAQC,QAAAA,EAAS,CAAA,CAAA,EAjFf/D,EAkFpBgE,UAAA,QAAA,CAAA,EAOAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAM3B,OAAQ6B,QAAAA,EAAS,CAAA,CAAA,EAxFf/D,EAyFpBgE,UAAA,UAAA,GAQAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAM3B,OAAQ6B,QAAAA,EAAS,CAAA,CAAA,EAhGf/D,EAiGpBgE,UAAA,OAAA,CAAA,EAjGoBhE,EAArB2D,EAAA,CADCM,EAAAA,cAAc,eAAA,CAAA,EACMjE,CAAAA"}
|
|
@@ -3,7 +3,7 @@ import { tap as y } from "rxjs/operators";
|
|
|
3
3
|
import "lit/directives/class-map.js";
|
|
4
4
|
import "lit/directives/style-map.js";
|
|
5
5
|
import { property as l, customElement as d } from "lit/decorators.js";
|
|
6
|
-
import { T as g } from "./tailwind.mixin-
|
|
6
|
+
import { T as g } from "./tailwind.mixin-Bp_PR6yc.js";
|
|
7
7
|
import { css as f, html as u } from "lit";
|
|
8
8
|
var b = Object.defineProperty, w = Object.getOwnPropertyDescriptor, r = (t, i, a, s) => {
|
|
9
9
|
for (var n, o = s > 1 ? void 0 : s ? w(i, a) : i, c = t.length - 1; c >= 0; c--) (n = t[c]) && (o = (s ? n(i, a, o) : n(o)) || o);
|
|
@@ -81,4 +81,4 @@ let e = class extends g(f`
|
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
83
|
e.fontsLoaded = !1, e.tokenSizes = { xxs: { size: "12px", opsz: 20 }, xs: { size: "16px", opsz: 20 }, sm: { size: "20px", opsz: 20 }, md: { size: "24px", opsz: 24 }, lg: { size: "32px", opsz: 40 } }, r([l({ type: Number, reflect: !0 })], e.prototype, "fill", 2), r([l({ type: Number, reflect: !0 })], e.prototype, "weight", 2), r([l({ type: Number, reflect: !0 })], e.prototype, "grade", 2), r([l({ type: String, reflect: !0 })], e.prototype, "variant", 2), r([l({ type: String, reflect: !0 })], e.prototype, "size", 2), e = r([d("schmancy-icon")], e);
|
|
84
|
-
//# sourceMappingURL=icon-
|
|
84
|
+
//# sourceMappingURL=icon-DYpLoegR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-B5qeYrDu.js","sources":["../src/icons/icon.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { BehaviorSubject, combineLatest, takeUntil } from 'rxjs'\nimport { tap } from 'rxjs/operators'\n\n/**\n * Icon size tokens - M3 aligned with optical size optimization\n * - xxs: 12px (opsz: 20) - fits in 24px buttons (ultra-compact)\n * - xs: 16px (opsz: 20) - fits in 32px buttons\n * - sm: 20px (opsz: 20) - fits in 40px buttons\n * - md: 24px (opsz: 24) - fits in 48px buttons (default)\n * - lg: 32px (opsz: 40) - fits in 56px buttons\n * - Or custom string like '48px'\n */\nexport type IconSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | string\n\n/**\n * @element schmancy-icon\n * Material Symbols icon component with flexible font variation properties\n *\n * @cssprop --schmancy-icon-size - The size of the icon (default: 24px)\n * @cssprop --schmancy-icon-fill - Fill value for icon (0-1)\n * @cssprop --schmancy-icon-weight - Weight value for icon (100-700)\n * @cssprop --schmancy-icon-grade - Grade value for icon (-50-200)\n * @cssprop --schmancy-icon-opsz - Optical size (default: 24)\n */\n@customElement('schmancy-icon')\nexport default class SchmancyIcon extends TailwindElement(css`\n\t:host {\n\t\t--schmancy-icon-size: 24px;\n\t\t--schmancy-icon-fill: 0;\n\t\t--schmancy-icon-weight: 400;\n\t\t--schmancy-icon-grade: 0;\n\t\t--schmancy-icon-opsz: 24;\n\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: var(--schmancy-icon-size);\n\t\theight: var(--schmancy-icon-size);\n\t\tfont-size: var(--schmancy-icon-size);\n\t\tcolor: inherit;\n\t\ttransition: font-variation-settings 0.2s ease;\n\t}\n\n\t.material-symbols {\n\t\tfont-family: var(--schmancy-icon-font, 'Material Symbols Outlined');\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-webkit-font-feature-settings: 'liga';\n\t\tfont-feature-settings: 'liga';\n\t\tfont-variation-settings:\n\t\t\t'FILL' var(--schmancy-icon-fill),\n\t\t\t'wght' var(--schmancy-icon-weight),\n\t\t\t'GRAD' var(--schmancy-icon-grade),\n\t\t\t'opsz' var(--schmancy-icon-opsz);\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n`) {\n\t// Static flag to track if Google Fonts have been loaded\n\tprivate static fontsLoaded = false\n\n\t/**\n\t * Load Material Symbols fonts from Google Fonts CDN\n\t */\n\tprivate static loadFonts(): void {\n\t\tif (SchmancyIcon.fontsLoaded) {\n\t\t\treturn\n\t\t}\n\n\t\tconst link = document.createElement('link')\n\t\tlink.rel = 'stylesheet'\n\t\tlink.href = 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap'\n\t\tdocument.head.appendChild(link)\n\n\t\tSchmancyIcon.fontsLoaded = true\n\t}\n\n\t/**\n\t * Fill value for the icon (0-1)\n\t * 0 = outlined, 1 = filled\n\t */\n\t@property({ type: Number, reflect: true })\n\tfill = 0\n\n\t/**\n\t * Weight value for the icon (100-700)\n\t * Controls the thickness of the icon strokes\n\t */\n\t@property({ type: Number, reflect: true })\n\tweight = 400\n\n\t/**\n\t * Grade value for the icon (-50-200)\n\t * Adjusts the visual weight/grade\n\t */\n\t@property({ type: Number, reflect: true })\n\tgrade = 0\n\n\t/**\n\t * Icon variant style\n\t * @values outlined | rounded | sharp\n\t */\n\t@property({ type: String, reflect: true })\n\tvariant: 'outlined' | 'rounded' | 'sharp' = 'outlined'\n\n\t/**\n\t * Size of the icon - M3 aligned tokens or custom string\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Custom: any CSS size string like '48px', '2rem'\n\t */\n\t@property({ type: String, reflect: true })\n\tsize: IconSize = 'md'\n\n\t// M3 aligned token sizes with optimal optical sizes\n\tprivate static readonly tokenSizes: Record<string, { size: string; opsz: number }> = {\n\t\txxs: { size: '12px', opsz: 20 }, // fits in 24px buttons (ultra-compact)\n\t\txs: { size: '16px', opsz: 20 }, // fits in 32px buttons\n\t\tsm: { size: '20px', opsz: 20 }, // fits in 40px buttons\n\t\tmd: { size: '24px', opsz: 24 }, // fits in 48px buttons (default)\n\t\tlg: { size: '32px', opsz: 40 }, // fits in 56px buttons\n\t}\n\n\t// RxJS subjects for reactive property updates\n\tprivate fill$ = new BehaviorSubject(this.fill)\n\tprivate weight$ = new BehaviorSubject(this.weight)\n\tprivate grade$ = new BehaviorSubject(this.grade)\n\tprivate variant$ = new BehaviorSubject(this.variant)\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Load Google Fonts if not already loaded\n\t\tSchmancyIcon.loadFonts()\n\n\t\t// Set accessibility attributes for decorative icons\n\t\tif (!this.hasAttribute('aria-label') &&\n\t\t !this.hasAttribute('aria-labelledby') &&\n\t\t !this.hasAttribute('aria-hidden') &&\n\t\t !this.hasAttribute('role')) {\n\t\t\tthis.setAttribute('aria-hidden', 'true')\n\t\t}\n\n\t\t// Setup reactive CSS variable updates\n\t\tcombineLatest([\n\t\t\tthis.fill$,\n\t\t\tthis.weight$,\n\t\t\tthis.grade$,\n\t\t\tthis.variant$\n\t\t]).pipe(\n\t\t\ttap(([fill, weight, grade, variant]) => {\n\t\t\t\t// Update CSS custom properties for smooth transitions\n\t\t\t\tthis.style.setProperty('--schmancy-icon-fill', String(fill))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-weight', String(weight))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-grade', String(grade))\n\n\t\t\t\t// Update font family based on variant\n\t\t\t\tconst fontFamily = {\n\t\t\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t\t\t}[variant] || 'Material Symbols Outlined'\n\n\t\t\t\tthis.style.setProperty('--schmancy-icon-font', fontFamily)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprotected updated(changedProperties: Map<string | number | symbol, unknown>): void {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Update BehaviorSubjects when properties change\n\t\tif (changedProperties.has('fill')) {\n\t\t\tthis.fill$.next(this.fill)\n\t\t}\n\t\tif (changedProperties.has('weight')) {\n\t\t\tthis.weight$.next(this.weight)\n\t\t}\n\t\tif (changedProperties.has('grade')) {\n\t\t\tthis.grade$.next(this.grade)\n\t\t}\n\t\tif (changedProperties.has('variant')) {\n\t\t\tthis.variant$.next(this.variant)\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\tconst fontFamily = {\n\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t}[this.variant] || 'Material Symbols Outlined'\n\n\t\t// Resolve size token or use custom value\n\t\tconst sizeConfig = SchmancyIcon.tokenSizes[this.size]\n\t\tconst iconSize = sizeConfig?.size || this.size\n\t\tconst opticalSize = sizeConfig?.opsz || 24\n\n\t\tconst style = {\n\t\t\t'--schmancy-icon-fill': this.fill,\n\t\t\t'--schmancy-icon-weight': this.weight,\n\t\t\t'--schmancy-icon-grade': this.grade,\n\t\t\t'--schmancy-icon-font': fontFamily,\n\t\t\t'--schmancy-icon-size': iconSize,\n\t\t\t'--schmancy-icon-opsz': opticalSize,\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"material-symbols\" part=\"icon\" style=${this.styleMap(style)}>\n\t\t\t\t<slot></slot>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon': SchmancyIcon\n\t}\n}"],"names":["SchmancyIcon","TailwindElement","css","constructor","super","arguments","this","fill","weight","grade","variant","size","fill$","BehaviorSubject","weight$","grade$","variant$","loadFonts","fontsLoaded","link","document","createElement","rel","href","head","appendChild","connectedCallback","hasAttribute","setAttribute","combineLatest","pipe","tap","style","setProperty","String","fontFamily","outlined","rounded","sharp","takeUntil","disconnecting","subscribe","changedProperties","updated","has","next","render","sizeConfig","tokenSizes","iconSize","opticalSize","opsz","html","styleMap","xxs","xs","sm","md","lg","__decorateClass","property","type","Number","reflect","prototype","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"icon-DYpLoegR.js","sources":["../src/icons/icon.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { BehaviorSubject, combineLatest, takeUntil } from 'rxjs'\nimport { tap } from 'rxjs/operators'\n\n/**\n * Icon size tokens - M3 aligned with optical size optimization\n * - xxs: 12px (opsz: 20) - fits in 24px buttons (ultra-compact)\n * - xs: 16px (opsz: 20) - fits in 32px buttons\n * - sm: 20px (opsz: 20) - fits in 40px buttons\n * - md: 24px (opsz: 24) - fits in 48px buttons (default)\n * - lg: 32px (opsz: 40) - fits in 56px buttons\n * - Or custom string like '48px'\n */\nexport type IconSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | string\n\n/**\n * @element schmancy-icon\n * Material Symbols icon component with flexible font variation properties\n *\n * @cssprop --schmancy-icon-size - The size of the icon (default: 24px)\n * @cssprop --schmancy-icon-fill - Fill value for icon (0-1)\n * @cssprop --schmancy-icon-weight - Weight value for icon (100-700)\n * @cssprop --schmancy-icon-grade - Grade value for icon (-50-200)\n * @cssprop --schmancy-icon-opsz - Optical size (default: 24)\n */\n@customElement('schmancy-icon')\nexport default class SchmancyIcon extends TailwindElement(css`\n\t:host {\n\t\t--schmancy-icon-size: 24px;\n\t\t--schmancy-icon-fill: 0;\n\t\t--schmancy-icon-weight: 400;\n\t\t--schmancy-icon-grade: 0;\n\t\t--schmancy-icon-opsz: 24;\n\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: var(--schmancy-icon-size);\n\t\theight: var(--schmancy-icon-size);\n\t\tfont-size: var(--schmancy-icon-size);\n\t\tcolor: inherit;\n\t\ttransition: font-variation-settings 0.2s ease;\n\t}\n\n\t.material-symbols {\n\t\tfont-family: var(--schmancy-icon-font, 'Material Symbols Outlined');\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-webkit-font-feature-settings: 'liga';\n\t\tfont-feature-settings: 'liga';\n\t\tfont-variation-settings:\n\t\t\t'FILL' var(--schmancy-icon-fill),\n\t\t\t'wght' var(--schmancy-icon-weight),\n\t\t\t'GRAD' var(--schmancy-icon-grade),\n\t\t\t'opsz' var(--schmancy-icon-opsz);\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n`) {\n\t// Static flag to track if Google Fonts have been loaded\n\tprivate static fontsLoaded = false\n\n\t/**\n\t * Load Material Symbols fonts from Google Fonts CDN\n\t */\n\tprivate static loadFonts(): void {\n\t\tif (SchmancyIcon.fontsLoaded) {\n\t\t\treturn\n\t\t}\n\n\t\tconst link = document.createElement('link')\n\t\tlink.rel = 'stylesheet'\n\t\tlink.href = 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap'\n\t\tdocument.head.appendChild(link)\n\n\t\tSchmancyIcon.fontsLoaded = true\n\t}\n\n\t/**\n\t * Fill value for the icon (0-1)\n\t * 0 = outlined, 1 = filled\n\t */\n\t@property({ type: Number, reflect: true })\n\tfill = 0\n\n\t/**\n\t * Weight value for the icon (100-700)\n\t * Controls the thickness of the icon strokes\n\t */\n\t@property({ type: Number, reflect: true })\n\tweight = 400\n\n\t/**\n\t * Grade value for the icon (-50-200)\n\t * Adjusts the visual weight/grade\n\t */\n\t@property({ type: Number, reflect: true })\n\tgrade = 0\n\n\t/**\n\t * Icon variant style\n\t * @values outlined | rounded | sharp\n\t */\n\t@property({ type: String, reflect: true })\n\tvariant: 'outlined' | 'rounded' | 'sharp' = 'outlined'\n\n\t/**\n\t * Size of the icon - M3 aligned tokens or custom string\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Custom: any CSS size string like '48px', '2rem'\n\t */\n\t@property({ type: String, reflect: true })\n\tsize: IconSize = 'md'\n\n\t// M3 aligned token sizes with optimal optical sizes\n\tprivate static readonly tokenSizes: Record<string, { size: string; opsz: number }> = {\n\t\txxs: { size: '12px', opsz: 20 }, // fits in 24px buttons (ultra-compact)\n\t\txs: { size: '16px', opsz: 20 }, // fits in 32px buttons\n\t\tsm: { size: '20px', opsz: 20 }, // fits in 40px buttons\n\t\tmd: { size: '24px', opsz: 24 }, // fits in 48px buttons (default)\n\t\tlg: { size: '32px', opsz: 40 }, // fits in 56px buttons\n\t}\n\n\t// RxJS subjects for reactive property updates\n\tprivate fill$ = new BehaviorSubject(this.fill)\n\tprivate weight$ = new BehaviorSubject(this.weight)\n\tprivate grade$ = new BehaviorSubject(this.grade)\n\tprivate variant$ = new BehaviorSubject(this.variant)\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Load Google Fonts if not already loaded\n\t\tSchmancyIcon.loadFonts()\n\n\t\t// Set accessibility attributes for decorative icons\n\t\tif (!this.hasAttribute('aria-label') &&\n\t\t !this.hasAttribute('aria-labelledby') &&\n\t\t !this.hasAttribute('aria-hidden') &&\n\t\t !this.hasAttribute('role')) {\n\t\t\tthis.setAttribute('aria-hidden', 'true')\n\t\t}\n\n\t\t// Setup reactive CSS variable updates\n\t\tcombineLatest([\n\t\t\tthis.fill$,\n\t\t\tthis.weight$,\n\t\t\tthis.grade$,\n\t\t\tthis.variant$\n\t\t]).pipe(\n\t\t\ttap(([fill, weight, grade, variant]) => {\n\t\t\t\t// Update CSS custom properties for smooth transitions\n\t\t\t\tthis.style.setProperty('--schmancy-icon-fill', String(fill))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-weight', String(weight))\n\t\t\t\tthis.style.setProperty('--schmancy-icon-grade', String(grade))\n\n\t\t\t\t// Update font family based on variant\n\t\t\t\tconst fontFamily = {\n\t\t\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t\t\t}[variant] || 'Material Symbols Outlined'\n\n\t\t\t\tthis.style.setProperty('--schmancy-icon-font', fontFamily)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprotected updated(changedProperties: Map<string | number | symbol, unknown>): void {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Update BehaviorSubjects when properties change\n\t\tif (changedProperties.has('fill')) {\n\t\t\tthis.fill$.next(this.fill)\n\t\t}\n\t\tif (changedProperties.has('weight')) {\n\t\t\tthis.weight$.next(this.weight)\n\t\t}\n\t\tif (changedProperties.has('grade')) {\n\t\t\tthis.grade$.next(this.grade)\n\t\t}\n\t\tif (changedProperties.has('variant')) {\n\t\t\tthis.variant$.next(this.variant)\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\tconst fontFamily = {\n\t\t\t'outlined': 'Material Symbols Outlined',\n\t\t\t'rounded': 'Material Symbols Rounded',\n\t\t\t'sharp': 'Material Symbols Sharp'\n\t\t}[this.variant] || 'Material Symbols Outlined'\n\n\t\t// Resolve size token or use custom value\n\t\tconst sizeConfig = SchmancyIcon.tokenSizes[this.size]\n\t\tconst iconSize = sizeConfig?.size || this.size\n\t\tconst opticalSize = sizeConfig?.opsz || 24\n\n\t\tconst style = {\n\t\t\t'--schmancy-icon-fill': this.fill,\n\t\t\t'--schmancy-icon-weight': this.weight,\n\t\t\t'--schmancy-icon-grade': this.grade,\n\t\t\t'--schmancy-icon-font': fontFamily,\n\t\t\t'--schmancy-icon-size': iconSize,\n\t\t\t'--schmancy-icon-opsz': opticalSize,\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"material-symbols\" part=\"icon\" style=${this.styleMap(style)}>\n\t\t\t\t<slot></slot>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon': SchmancyIcon\n\t}\n}"],"names":["SchmancyIcon","TailwindElement","css","constructor","super","arguments","this","fill","weight","grade","variant","size","fill$","BehaviorSubject","weight$","grade$","variant$","loadFonts","fontsLoaded","link","document","createElement","rel","href","head","appendChild","connectedCallback","hasAttribute","setAttribute","combineLatest","pipe","tap","style","setProperty","String","fontFamily","outlined","rounded","sharp","takeUntil","disconnecting","subscribe","changedProperties","updated","has","next","render","sizeConfig","tokenSizes","iconSize","opticalSize","opsz","html","styleMap","xxs","xs","sm","md","lg","__decorateClass","property","type","Number","reflect","prototype","customElement"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import "rxjs/operators";
|
|
|
3
3
|
import "lit/directives/class-map.js";
|
|
4
4
|
import "lit/directives/style-map.js";
|
|
5
5
|
import { query as b, property as i, queryAssignedElements as v, customElement as y } from "lit/decorators.js";
|
|
6
|
-
import "./tailwind.mixin-
|
|
7
|
-
import { $ as g } from "./litElement.mixin-
|
|
6
|
+
import "./tailwind.mixin-Bp_PR6yc.js";
|
|
7
|
+
import { $ as g } from "./litElement.mixin-DHZXtvYq.js";
|
|
8
8
|
import { css as x, html as d, LitElement as m } from "lit";
|
|
9
9
|
import { ifDefined as h } from "lit/directives/if-defined.js";
|
|
10
10
|
import { when as p } from "lit/directives/when.js";
|
|
@@ -161,4 +161,4 @@ export {
|
|
|
161
161
|
s as S,
|
|
162
162
|
n as a
|
|
163
163
|
};
|
|
164
|
-
//# sourceMappingURL=icon-button-
|
|
164
|
+
//# sourceMappingURL=icon-button-CmZBLHWC.js.map
|