@tylertech/forge 2.5.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +114525 -0
- package/dist/esm/accordion/index.js +4 -4
- package/dist/esm/app-bar/help-button/index.js +14 -14
- package/dist/esm/app-bar/index.js +24 -24
- package/dist/esm/app-bar/menu-button/index.js +5 -5
- package/dist/esm/app-bar/notification-button/index.js +6 -6
- package/dist/esm/app-bar/profile-button/index.js +10 -10
- package/dist/esm/app-bar/search/index.js +3 -3
- package/dist/esm/autocomplete/index.js +16 -16
- package/dist/esm/avatar/index.js +1 -1
- package/dist/esm/backdrop/index.js +1 -1
- package/dist/esm/badge/index.js +1 -1
- package/dist/esm/banner/index.js +5 -5
- package/dist/esm/bottom-sheet/index.js +8 -8
- package/dist/esm/busy-indicator/index.js +6 -6
- package/dist/esm/button/index.js +2 -2
- package/dist/esm/button-toggle/button-toggle/index.js +3 -3
- package/dist/esm/button-toggle/button-toggle-group/index.js +3 -3
- package/dist/esm/button-toggle/index.js +4 -4
- package/dist/esm/calendar/calendar-dropdown/index.js +3 -3
- package/dist/esm/calendar/calendar-menu/index.js +1 -1
- package/dist/esm/calendar/index.js +9 -9
- package/dist/esm/card/index.js +1 -1
- package/dist/esm/checkbox/index.js +2 -2
- package/dist/esm/chip-field/index.js +6 -6
- package/dist/esm/chips/chip/index.js +4 -4
- package/dist/esm/chips/chip-set/index.js +4 -4
- package/dist/esm/chips/index.js +5 -5
- package/dist/esm/chunks/{chunk.K7P3WRAY.js → chunk.2MBI5DLT.js} +6 -6
- package/dist/esm/chunks/{chunk.K7P3WRAY.js.map → chunk.2MBI5DLT.js.map} +2 -2
- package/dist/esm/chunks/{chunk.HRZBANYY.js → chunk.2WBHHTUM.js} +2 -2
- package/dist/esm/chunks/{chunk.HRZBANYY.js.map → chunk.2WBHHTUM.js.map} +2 -2
- package/dist/esm/chunks/{chunk.WXFCZJJI.js → chunk.3EHQ3YHJ.js} +1 -1
- package/dist/esm/chunks/{chunk.WXFCZJJI.js.map → chunk.3EHQ3YHJ.js.map} +2 -2
- package/dist/esm/chunks/{chunk.R5RVCPM2.js → chunk.3QXCVTCP.js} +2 -2
- package/dist/esm/chunks/{chunk.R5RVCPM2.js.map → chunk.3QXCVTCP.js.map} +0 -0
- package/dist/esm/chunks/{chunk.NFUWLTHW.js → chunk.46BED43J.js} +3 -3
- package/dist/esm/chunks/{chunk.NFUWLTHW.js.map → chunk.46BED43J.js.map} +2 -2
- package/dist/esm/chunks/{chunk.VTXXZ5KT.js → chunk.4PF7WRP4.js} +2 -2
- package/dist/esm/chunks/{chunk.VTXXZ5KT.js.map → chunk.4PF7WRP4.js.map} +2 -2
- package/dist/esm/chunks/{chunk.KZ2QNQK2.js → chunk.4WLVFWKI.js} +2 -2
- package/dist/esm/chunks/{chunk.KZ2QNQK2.js.map → chunk.4WLVFWKI.js.map} +0 -0
- package/dist/esm/chunks/{chunk.C2MR3RDF.js → chunk.56BNM7F2.js} +1 -1
- package/dist/esm/chunks/{chunk.C2MR3RDF.js.map → chunk.56BNM7F2.js.map} +2 -2
- package/dist/esm/chunks/{chunk.3GRDFAFV.js → chunk.5OYAJ36F.js} +2 -2
- package/dist/esm/chunks/{chunk.3GRDFAFV.js.map → chunk.5OYAJ36F.js.map} +0 -0
- package/dist/esm/chunks/{chunk.4UKSUUTX.js → chunk.5U6ZT6MC.js} +2 -2
- package/dist/esm/chunks/{chunk.4UKSUUTX.js.map → chunk.5U6ZT6MC.js.map} +2 -2
- package/dist/esm/chunks/{chunk.ANNBOFGK.js → chunk.65GHMPX2.js} +2 -2
- package/dist/esm/chunks/{chunk.ANNBOFGK.js.map → chunk.65GHMPX2.js.map} +2 -2
- package/dist/esm/chunks/{chunk.LCVWXB3K.js → chunk.67B6JDOJ.js} +3 -3
- package/dist/esm/chunks/{chunk.LCVWXB3K.js.map → chunk.67B6JDOJ.js.map} +2 -2
- package/dist/esm/chunks/{chunk.EL6B2ODN.js → chunk.6ZBFCE2A.js} +1 -1
- package/dist/esm/chunks/{chunk.EL6B2ODN.js.map → chunk.6ZBFCE2A.js.map} +2 -2
- package/dist/esm/chunks/{chunk.VAPJ75PS.js → chunk.7FWTBD6Y.js} +2 -2
- package/dist/esm/chunks/{chunk.VAPJ75PS.js.map → chunk.7FWTBD6Y.js.map} +0 -0
- package/dist/esm/chunks/{chunk.KCK3G74Y.js → chunk.7UAH67PT.js} +2 -2
- package/dist/esm/chunks/{chunk.KCK3G74Y.js.map → chunk.7UAH67PT.js.map} +2 -2
- package/dist/esm/chunks/{chunk.VDKKTHAJ.js → chunk.ANME7BKM.js} +1 -1
- package/dist/esm/chunks/{chunk.VDKKTHAJ.js.map → chunk.ANME7BKM.js.map} +2 -2
- package/dist/esm/chunks/{chunk.O62N7AHR.js → chunk.BEAJZPWS.js} +2 -2
- package/dist/esm/chunks/{chunk.O62N7AHR.js.map → chunk.BEAJZPWS.js.map} +0 -0
- package/dist/esm/chunks/{chunk.BVGIWAUP.js → chunk.BVGJFMEG.js} +7 -7
- package/dist/esm/chunks/{chunk.BVGIWAUP.js.map → chunk.BVGJFMEG.js.map} +2 -2
- package/dist/esm/chunks/{chunk.R4UKTXEK.js → chunk.C73AZRT4.js} +4 -4
- package/dist/esm/chunks/{chunk.R4UKTXEK.js.map → chunk.C73AZRT4.js.map} +2 -2
- package/dist/esm/chunks/{chunk.APUL33GR.js → chunk.CLEUHAZ6.js} +2 -2
- package/dist/esm/chunks/{chunk.APUL33GR.js.map → chunk.CLEUHAZ6.js.map} +2 -2
- package/dist/esm/chunks/{chunk.U35QQZVK.js → chunk.D33KLIFD.js} +1 -1
- package/dist/esm/chunks/{chunk.U35QQZVK.js.map → chunk.D33KLIFD.js.map} +2 -2
- package/dist/esm/chunks/{chunk.5EEEKOOK.js → chunk.DLF5JAQO.js} +1 -1
- package/dist/esm/chunks/{chunk.5EEEKOOK.js.map → chunk.DLF5JAQO.js.map} +2 -2
- package/dist/esm/chunks/{chunk.ZUM5YLB2.js → chunk.E26BROOG.js} +1 -1
- package/dist/esm/chunks/{chunk.ZUM5YLB2.js.map → chunk.E26BROOG.js.map} +2 -2
- package/dist/esm/chunks/{chunk.XN65LPA3.js → chunk.EBC2HGO3.js} +3 -3
- package/dist/esm/chunks/chunk.EBC2HGO3.js.map +7 -0
- package/dist/esm/chunks/{chunk.PCYIY5OY.js → chunk.EUPO2VO2.js} +4 -3
- package/dist/esm/chunks/{chunk.PCYIY5OY.js.map → chunk.EUPO2VO2.js.map} +2 -2
- package/dist/esm/chunks/{chunk.YCW56AVX.js → chunk.FJJVIMZ2.js} +1 -1
- package/dist/esm/chunks/{chunk.YCW56AVX.js.map → chunk.FJJVIMZ2.js.map} +2 -2
- package/dist/esm/chunks/{chunk.HHHMDDTU.js → chunk.FZ6KICMD.js} +1 -1
- package/dist/esm/chunks/{chunk.HHHMDDTU.js.map → chunk.FZ6KICMD.js.map} +2 -2
- package/dist/esm/chunks/{chunk.XPC7GINT.js → chunk.GHZ75UPO.js} +3 -3
- package/dist/esm/chunks/{chunk.XPC7GINT.js.map → chunk.GHZ75UPO.js.map} +2 -2
- package/dist/esm/chunks/{chunk.SJZ54RE3.js → chunk.GL72QT42.js} +1 -1
- package/dist/esm/chunks/{chunk.SJZ54RE3.js.map → chunk.GL72QT42.js.map} +2 -2
- package/dist/esm/chunks/{chunk.G6FY472A.js → chunk.GWNR3UUX.js} +2 -2
- package/dist/esm/chunks/{chunk.G6FY472A.js.map → chunk.GWNR3UUX.js.map} +2 -2
- package/dist/esm/chunks/{chunk.2NUAEZY7.js → chunk.GXTNND2M.js} +1 -1
- package/dist/esm/chunks/{chunk.2NUAEZY7.js.map → chunk.GXTNND2M.js.map} +2 -2
- package/dist/esm/chunks/{chunk.YJ5X3WZ4.js → chunk.HASAPJMX.js} +1 -1
- package/dist/esm/chunks/{chunk.YJ5X3WZ4.js.map → chunk.HASAPJMX.js.map} +2 -2
- package/dist/esm/chunks/{chunk.SSXNS4NR.js → chunk.HAWYW54W.js} +33 -25
- package/dist/esm/chunks/chunk.HAWYW54W.js.map +7 -0
- package/dist/esm/chunks/{chunk.EWQENJ4W.js → chunk.HMM7PGGZ.js} +2 -2
- package/dist/esm/chunks/{chunk.EWQENJ4W.js.map → chunk.HMM7PGGZ.js.map} +2 -2
- package/dist/esm/chunks/{chunk.P7SAJ6M7.js → chunk.I6PJGNJS.js} +2 -2
- package/dist/esm/chunks/{chunk.P7SAJ6M7.js.map → chunk.I6PJGNJS.js.map} +2 -2
- package/dist/esm/chunks/{chunk.3ZKORL4I.js → chunk.I7BQUB7Z.js} +2 -2
- package/dist/esm/chunks/chunk.I7BQUB7Z.js.map +7 -0
- package/dist/esm/chunks/{chunk.XY3ZHN7Y.js → chunk.IBED5TWL.js} +1 -1
- package/dist/esm/chunks/{chunk.XY3ZHN7Y.js.map → chunk.IBED5TWL.js.map} +2 -2
- package/dist/esm/chunks/{chunk.4FHBJXB7.js → chunk.IGBDDH3J.js} +6 -6
- package/dist/esm/chunks/{chunk.4FHBJXB7.js.map → chunk.IGBDDH3J.js.map} +0 -0
- package/dist/esm/chunks/{chunk.N3ZPWKJ5.js → chunk.IJW2YKP3.js} +12 -12
- package/dist/esm/chunks/{chunk.N3ZPWKJ5.js.map → chunk.IJW2YKP3.js.map} +2 -2
- package/dist/esm/chunks/{chunk.ID2ITG5T.js → chunk.ITQ55IPH.js} +4 -4
- package/dist/esm/chunks/{chunk.ID2ITG5T.js.map → chunk.ITQ55IPH.js.map} +2 -2
- package/dist/esm/chunks/{chunk.IBH5GL7A.js → chunk.IUNON3UL.js} +2 -2
- package/dist/esm/chunks/{chunk.IBH5GL7A.js.map → chunk.IUNON3UL.js.map} +2 -2
- package/dist/esm/chunks/{chunk.CLQS7CFC.js → chunk.J5NUYQ4D.js} +6 -6
- package/dist/esm/chunks/{chunk.CLQS7CFC.js.map → chunk.J5NUYQ4D.js.map} +0 -0
- package/dist/esm/chunks/{chunk.5E6UZZKY.js → chunk.JC2PZ4TS.js} +7 -7
- package/dist/esm/chunks/{chunk.5E6UZZKY.js.map → chunk.JC2PZ4TS.js.map} +2 -2
- package/dist/esm/chunks/{chunk.L4N2DKAS.js → chunk.JUXKYUD4.js} +8 -8
- package/dist/esm/chunks/{chunk.L4N2DKAS.js.map → chunk.JUXKYUD4.js.map} +2 -2
- package/dist/esm/chunks/{chunk.6V463G4I.js → chunk.KCVJDJ6K.js} +1 -1
- package/dist/esm/chunks/{chunk.6V463G4I.js.map → chunk.KCVJDJ6K.js.map} +2 -2
- package/dist/esm/chunks/{chunk.YMWBTMB6.js → chunk.KNR5DXE4.js} +2 -2
- package/dist/esm/chunks/{chunk.YMWBTMB6.js.map → chunk.KNR5DXE4.js.map} +2 -2
- package/dist/esm/chunks/{chunk.S6QD4UJN.js → chunk.L344BPCW.js} +1 -1
- package/dist/esm/chunks/{chunk.S6QD4UJN.js.map → chunk.L344BPCW.js.map} +2 -2
- package/dist/esm/chunks/{chunk.ZAAM3GTQ.js → chunk.L4OUV7W6.js} +5 -5
- package/dist/esm/chunks/{chunk.ZAAM3GTQ.js.map → chunk.L4OUV7W6.js.map} +2 -2
- package/dist/esm/chunks/{chunk.PXXLO4HJ.js → chunk.LHWZ4KZU.js} +3 -3
- package/dist/esm/chunks/{chunk.PXXLO4HJ.js.map → chunk.LHWZ4KZU.js.map} +2 -2
- package/dist/esm/chunks/{chunk.PQ5LOH7W.js → chunk.LK2DN5KX.js} +4 -4
- package/dist/esm/chunks/{chunk.PQ5LOH7W.js.map → chunk.LK2DN5KX.js.map} +2 -2
- package/dist/esm/chunks/{chunk.7G2S3DCM.js → chunk.LX2HDAIF.js} +2 -2
- package/dist/esm/chunks/{chunk.7G2S3DCM.js.map → chunk.LX2HDAIF.js.map} +2 -2
- package/dist/esm/chunks/{chunk.YDPSV74L.js → chunk.M3O5VPDD.js} +3 -3
- package/dist/esm/chunks/{chunk.YDPSV74L.js.map → chunk.M3O5VPDD.js.map} +0 -0
- package/dist/esm/chunks/{chunk.CKVCNPLI.js → chunk.MBZLA635.js} +12 -12
- package/dist/esm/chunks/{chunk.CKVCNPLI.js.map → chunk.MBZLA635.js.map} +2 -2
- package/dist/esm/chunks/{chunk.JB2PM7FT.js → chunk.MF3IZXQG.js} +1 -1
- package/dist/esm/chunks/{chunk.JB2PM7FT.js.map → chunk.MF3IZXQG.js.map} +2 -2
- package/dist/esm/chunks/{chunk.EL74HZRY.js → chunk.MUP3NY6M.js} +9 -9
- package/dist/esm/chunks/{chunk.EL74HZRY.js.map → chunk.MUP3NY6M.js.map} +2 -2
- package/dist/esm/chunks/{chunk.2F6PST3N.js → chunk.OXS2O7RG.js} +1 -1
- package/dist/esm/chunks/{chunk.2F6PST3N.js.map → chunk.OXS2O7RG.js.map} +2 -2
- package/dist/esm/chunks/{chunk.U2X7YAXC.js → chunk.PKZ43JNW.js} +4 -4
- package/dist/esm/chunks/{chunk.U2X7YAXC.js.map → chunk.PKZ43JNW.js.map} +2 -2
- package/dist/esm/chunks/{chunk.WAJDLUSQ.js → chunk.QHHYCB7N.js} +1 -1
- package/dist/esm/chunks/{chunk.WAJDLUSQ.js.map → chunk.QHHYCB7N.js.map} +2 -2
- package/dist/esm/chunks/{chunk.AHMBGV4N.js → chunk.QWW6A7AF.js} +6 -6
- package/dist/esm/chunks/{chunk.AHMBGV4N.js.map → chunk.QWW6A7AF.js.map} +2 -2
- package/dist/esm/chunks/{chunk.OYO6NUZY.js → chunk.QXZZ2MTF.js} +1 -1
- package/dist/esm/chunks/{chunk.OYO6NUZY.js.map → chunk.QXZZ2MTF.js.map} +2 -2
- package/dist/esm/chunks/{chunk.SSFSLBBM.js → chunk.QYWAZCBX.js} +2 -2
- package/dist/esm/chunks/chunk.QYWAZCBX.js.map +7 -0
- package/dist/esm/chunks/{chunk.Y2TDQIA4.js → chunk.RD4RIFOZ.js} +1 -1
- package/dist/esm/chunks/{chunk.Y2TDQIA4.js.map → chunk.RD4RIFOZ.js.map} +2 -2
- package/dist/esm/chunks/{chunk.EJHMX24S.js → chunk.RL7ZFLMG.js} +6 -6
- package/dist/esm/chunks/{chunk.EJHMX24S.js.map → chunk.RL7ZFLMG.js.map} +2 -2
- package/dist/esm/chunks/{chunk.AHBDISRG.js → chunk.S3UVF647.js} +2 -2
- package/dist/esm/chunks/{chunk.AHBDISRG.js.map → chunk.S3UVF647.js.map} +2 -2
- package/dist/esm/chunks/{chunk.RWCC6E4O.js → chunk.THKWQXBJ.js} +1 -1
- package/dist/esm/chunks/{chunk.RWCC6E4O.js.map → chunk.THKWQXBJ.js.map} +2 -2
- package/dist/esm/chunks/{chunk.2TEHKM2X.js → chunk.TIUNGGBF.js} +3 -3
- package/dist/esm/chunks/{chunk.2TEHKM2X.js.map → chunk.TIUNGGBF.js.map} +0 -0
- package/dist/esm/chunks/{chunk.PSHHY3ER.js → chunk.TM46MNYN.js} +4 -4
- package/dist/esm/chunks/{chunk.PSHHY3ER.js.map → chunk.TM46MNYN.js.map} +2 -2
- package/dist/esm/chunks/{chunk.7XGNGXLR.js → chunk.TYU4RLZG.js} +1 -1
- package/dist/esm/chunks/{chunk.7XGNGXLR.js.map → chunk.TYU4RLZG.js.map} +2 -2
- package/dist/esm/chunks/{chunk.QFPOG3VH.js → chunk.U37G47LH.js} +7 -7
- package/dist/esm/chunks/{chunk.QFPOG3VH.js.map → chunk.U37G47LH.js.map} +2 -2
- package/dist/esm/chunks/{chunk.HZML57TK.js → chunk.U5ECVIX5.js} +5 -5
- package/dist/esm/chunks/{chunk.HZML57TK.js.map → chunk.U5ECVIX5.js.map} +2 -2
- package/dist/esm/chunks/{chunk.DJX5CEYP.js → chunk.UPW5HUKB.js} +5 -5
- package/dist/esm/chunks/{chunk.DJX5CEYP.js.map → chunk.UPW5HUKB.js.map} +2 -2
- package/dist/esm/chunks/{chunk.ISR3SND2.js → chunk.UQ3QTUUB.js} +2 -2
- package/dist/esm/chunks/{chunk.ISR3SND2.js.map → chunk.UQ3QTUUB.js.map} +2 -2
- package/dist/esm/chunks/{chunk.JVQP6BJ3.js → chunk.V2ELLBDP.js} +1 -1
- package/dist/esm/chunks/{chunk.JVQP6BJ3.js.map → chunk.V2ELLBDP.js.map} +2 -2
- package/dist/esm/chunks/{chunk.2LQMHAC7.js → chunk.V6Q2SM6Y.js} +1 -1
- package/dist/esm/chunks/{chunk.2LQMHAC7.js.map → chunk.V6Q2SM6Y.js.map} +2 -2
- package/dist/esm/chunks/{chunk.WVVWDQLQ.js → chunk.VXAPRFMK.js} +4 -4
- package/dist/esm/chunks/{chunk.WVVWDQLQ.js.map → chunk.VXAPRFMK.js.map} +2 -2
- package/dist/esm/chunks/{chunk.NF2CS4ZM.js → chunk.VXVE7KEM.js} +4 -4
- package/dist/esm/chunks/{chunk.NF2CS4ZM.js.map → chunk.VXVE7KEM.js.map} +2 -2
- package/dist/esm/chunks/{chunk.P7NOYP4O.js → chunk.WDD2GTIH.js} +1 -1
- package/dist/esm/chunks/{chunk.P7NOYP4O.js.map → chunk.WDD2GTIH.js.map} +2 -2
- package/dist/esm/chunks/{chunk.RNPIV3BY.js → chunk.WNVZQDNS.js} +1 -1
- package/dist/esm/chunks/{chunk.RNPIV3BY.js.map → chunk.WNVZQDNS.js.map} +2 -2
- package/dist/esm/chunks/{chunk.3MO6XU44.js → chunk.WSH4S3GM.js} +1 -1
- package/dist/esm/chunks/{chunk.3MO6XU44.js.map → chunk.WSH4S3GM.js.map} +2 -2
- package/dist/esm/chunks/{chunk.MIGASQA3.js → chunk.XHMNHBZD.js} +2 -2
- package/dist/esm/chunks/{chunk.MIGASQA3.js.map → chunk.XHMNHBZD.js.map} +2 -2
- package/dist/esm/chunks/{chunk.DB7ZQBES.js → chunk.YL2NAVJW.js} +1 -1
- package/dist/esm/chunks/{chunk.DB7ZQBES.js.map → chunk.YL2NAVJW.js.map} +2 -2
- package/dist/esm/chunks/{chunk.EXKNFD5S.js → chunk.ZLF2G3YT.js} +11 -11
- package/dist/esm/chunks/{chunk.EXKNFD5S.js.map → chunk.ZLF2G3YT.js.map} +2 -2
- package/dist/esm/chunks/{chunk.EKIW7VYG.js → chunk.ZXIDTDRC.js} +1 -1
- package/dist/esm/chunks/{chunk.EKIW7VYG.js.map → chunk.ZXIDTDRC.js.map} +2 -2
- package/dist/esm/chunks/{chunk.F2TZX24O.js → chunk.ZXMJB7OW.js} +74 -74
- package/dist/esm/chunks/{chunk.F2TZX24O.js.map → chunk.ZXMJB7OW.js.map} +0 -0
- package/dist/esm/circular-progress/index.js +1 -1
- package/dist/esm/color-picker/index.js +5 -5
- package/dist/esm/date-picker/index.js +12 -12
- package/dist/esm/date-range-picker/index.js +12 -12
- package/dist/esm/dialog/index.js +8 -8
- package/dist/esm/divider/index.js +1 -1
- package/dist/esm/drawer/drawer/index.js +1 -1
- package/dist/esm/drawer/index.js +4 -4
- package/dist/esm/drawer/mini-drawer/index.js +1 -1
- package/dist/esm/drawer/modal-drawer/index.js +2 -2
- package/dist/esm/expansion-panel/index.js +3 -3
- package/dist/esm/file-picker/index.js +3 -3
- package/dist/esm/floating-action-button/index.js +2 -2
- package/dist/esm/icon/index.js +1 -1
- package/dist/esm/icon-button/index.js +3 -3
- package/dist/esm/index.js +84 -84
- package/dist/esm/inline-message/index.js +1 -1
- package/dist/esm/keyboard-shortcut/index.js +1 -1
- package/dist/esm/label-value/index.js +1 -1
- package/dist/esm/linear-progress/index.js +1 -1
- package/dist/esm/list/index.js +3 -3
- package/dist/esm/list/list/index.js +3 -3
- package/dist/esm/list/list-item/index.js +2 -2
- package/dist/esm/list-dropdown/index.js +8 -8
- package/dist/esm/menu/index.js +11 -11
- package/dist/esm/open-icon/index.js +2 -2
- package/dist/esm/page-state/index.js +1 -1
- package/dist/esm/paginator/index.js +21 -21
- package/dist/esm/popup/index.js +1 -1
- package/dist/esm/product-icon/index.js +1 -1
- package/dist/esm/profile-card/index.js +5 -5
- package/dist/esm/quantity-field/index.js +4 -4
- package/dist/esm/radio/index.js +2 -2
- package/dist/esm/ripple/index.js +1 -1
- package/dist/esm/scaffold/index.js +1 -1
- package/dist/esm/select/core/index.js +12 -12
- package/dist/esm/select/index.js +19 -19
- package/dist/esm/select/option/index.js +1 -1
- package/dist/esm/select/option-group/index.js +1 -1
- package/dist/esm/select/select/index.js +17 -17
- package/dist/esm/select/select-dropdown/index.js +17 -17
- package/dist/esm/skeleton/index.js +1 -1
- package/dist/esm/slider/index.js +1 -1
- package/dist/esm/stepper/index.js +4 -4
- package/dist/esm/stepper/step/index.js +3 -3
- package/dist/esm/stepper/stepper/index.js +4 -4
- package/dist/esm/switch/index.js +1 -1
- package/dist/esm/table/index.js +7 -7
- package/dist/esm/tabs/index.js +6 -6
- package/dist/esm/tabs/tab/index.js +3 -3
- package/dist/esm/tabs/tab-bar/index.js +5 -5
- package/dist/esm/text-field/index.js +1 -1
- package/dist/esm/time-picker/index.js +16 -16
- package/dist/esm/toast/index.js +5 -5
- package/dist/esm/toolbar/index.js +1 -1
- package/dist/esm/tooltip/index.js +1 -1
- package/dist/esm/view-switcher/index.js +2 -2
- package/dist/esm/view-switcher/view/index.js +1 -1
- package/esm/accordion/accordion.d.ts +2 -0
- package/esm/accordion/accordion.js +2 -0
- package/esm/app-bar/app-bar.d.ts +5 -1
- package/esm/app-bar/app-bar.js +5 -1
- package/esm/app-bar/help-button/app-bar-help-button.d.ts +5 -0
- package/esm/app-bar/help-button/app-bar-help-button.js +5 -0
- package/esm/app-bar/menu-button/app-bar-menu-button.d.ts +5 -0
- package/esm/app-bar/menu-button/app-bar-menu-button.js +5 -0
- package/esm/app-bar/notification-button/app-bar-notification-button.d.ts +5 -0
- package/esm/app-bar/notification-button/app-bar-notification-button.js +5 -0
- package/esm/app-bar/profile-button/app-bar-profile-button.d.ts +5 -0
- package/esm/app-bar/profile-button/app-bar-profile-button.js +5 -0
- package/esm/app-bar/search/app-bar-search.d.ts +26 -0
- package/esm/app-bar/search/app-bar-search.js +26 -0
- package/esm/autocomplete/autocomplete.d.ts +2 -0
- package/esm/autocomplete/autocomplete.js +2 -0
- package/esm/avatar/avatar.d.ts +2 -0
- package/esm/avatar/avatar.js +2 -0
- package/esm/backdrop/backdrop.d.ts +2 -0
- package/esm/backdrop/backdrop.js +2 -0
- package/esm/badge/badge.d.ts +5 -0
- package/esm/badge/badge.js +5 -0
- package/esm/banner/banner.d.ts +2 -0
- package/esm/banner/banner.js +2 -0
- package/esm/bottom-sheet/bottom-sheet.d.ts +5 -0
- package/esm/bottom-sheet/bottom-sheet.js +5 -0
- package/esm/busy-indicator/busy-indicator.d.ts +5 -1
- package/esm/busy-indicator/busy-indicator.js +5 -1
- package/esm/button/button.d.ts +2 -0
- package/esm/button/button.js +2 -0
- package/esm/button-toggle/button-toggle/button-toggle.d.ts +5 -0
- package/esm/button-toggle/button-toggle/button-toggle.js +5 -0
- package/esm/button-toggle/button-toggle-group/button-toggle-group-foundation.js +2 -1
- package/esm/button-toggle/button-toggle-group/button-toggle-group.d.ts +5 -0
- package/esm/button-toggle/button-toggle-group/button-toggle-group.js +5 -0
- package/esm/calendar/calendar-menu/calendar-menu.d.ts +6 -0
- package/esm/calendar/calendar-menu/calendar-menu.js +6 -0
- package/esm/calendar/calendar.d.ts +5 -0
- package/esm/calendar/calendar.js +5 -0
- package/esm/card/card.d.ts +5 -1
- package/esm/card/card.js +5 -1
- package/esm/checkbox/checkbox.d.ts +2 -0
- package/esm/checkbox/checkbox.js +2 -0
- package/esm/chip-field/chip-field.d.ts +5 -0
- package/esm/chip-field/chip-field.js +5 -0
- package/esm/chips/chip/chip.d.ts +2 -0
- package/esm/chips/chip/chip.js +2 -0
- package/esm/chips/chip-set/chip-set.d.ts +5 -0
- package/esm/chips/chip-set/chip-set.js +5 -0
- package/esm/circular-progress/circular-progress.d.ts +5 -0
- package/esm/circular-progress/circular-progress.js +5 -0
- package/esm/color-picker/color-picker.d.ts +5 -0
- package/esm/color-picker/color-picker.js +5 -0
- package/esm/date-picker/date-picker.d.ts +5 -1
- package/esm/date-picker/date-picker.js +5 -1
- package/esm/date-range-picker/date-range-picker.d.ts +5 -1
- package/esm/date-range-picker/date-range-picker.js +5 -1
- package/esm/dialog/dialog.d.ts +5 -0
- package/esm/dialog/dialog.js +5 -0
- package/esm/divider/divider.d.ts +2 -0
- package/esm/divider/divider.js +2 -0
- package/esm/drawer/drawer/drawer.d.ts +5 -0
- package/esm/drawer/drawer/drawer.js +5 -0
- package/esm/drawer/mini-drawer/mini-drawer.d.ts +5 -0
- package/esm/drawer/mini-drawer/mini-drawer.js +5 -0
- package/esm/drawer/modal-drawer/modal-drawer.d.ts +5 -0
- package/esm/drawer/modal-drawer/modal-drawer.js +5 -0
- package/esm/expansion-panel/expansion-panel.d.ts +2 -0
- package/esm/expansion-panel/expansion-panel.js +2 -0
- package/esm/file-picker/file-picker.d.ts +5 -0
- package/esm/file-picker/file-picker.js +5 -0
- package/esm/floating-action-button/floating-action-button.d.ts +5 -1
- package/esm/floating-action-button/floating-action-button.js +5 -1
- package/esm/icon/icon.d.ts +5 -0
- package/esm/icon/icon.js +5 -0
- package/esm/icon-button/icon-button.d.ts +2 -0
- package/esm/icon-button/icon-button.js +2 -0
- package/esm/inline-message/inline-message.d.ts +5 -0
- package/esm/inline-message/inline-message.js +5 -0
- package/esm/keyboard-shortcut/keyboard-shortcut.d.ts +5 -0
- package/esm/keyboard-shortcut/keyboard-shortcut.js +5 -0
- package/esm/label-value/label-value.d.ts +5 -0
- package/esm/label-value/label-value.js +5 -0
- package/esm/linear-progress/linear-progress.d.ts +5 -0
- package/esm/linear-progress/linear-progress.js +5 -0
- package/esm/list/list/list.d.ts +2 -0
- package/esm/list/list/list.js +2 -0
- package/esm/list/list-item/list-item.d.ts +5 -1
- package/esm/list/list-item/list-item.js +5 -1
- package/esm/menu/menu.d.ts +5 -0
- package/esm/menu/menu.js +5 -0
- package/esm/open-icon/open-icon.d.ts +5 -0
- package/esm/open-icon/open-icon.js +5 -0
- package/esm/page-state/page-state.d.ts +5 -0
- package/esm/page-state/page-state.js +5 -0
- package/esm/paginator/paginator-foundation.js +29 -20
- package/esm/paginator/paginator.d.ts +2 -0
- package/esm/paginator/paginator.js +2 -0
- package/esm/popup/popup.d.ts +5 -0
- package/esm/popup/popup.js +5 -0
- package/esm/product-icon/product-icon.d.ts +5 -0
- package/esm/product-icon/product-icon.js +5 -0
- package/esm/profile-card/profile-card.d.ts +5 -0
- package/esm/profile-card/profile-card.js +5 -0
- package/esm/quantity-field/quantity-field.d.ts +5 -0
- package/esm/quantity-field/quantity-field.js +5 -0
- package/esm/radio/radio.d.ts +2 -0
- package/esm/radio/radio.js +2 -0
- package/esm/ripple/ripple.d.ts +5 -0
- package/esm/ripple/ripple.js +5 -0
- package/esm/scaffold/scaffold.d.ts +2 -0
- package/esm/scaffold/scaffold.js +2 -0
- package/esm/select/option/option.d.ts +2 -0
- package/esm/select/option/option.js +2 -0
- package/esm/select/option-group/option-group.d.ts +2 -0
- package/esm/select/option-group/option-group.js +2 -0
- package/esm/select/select/select.d.ts +2 -0
- package/esm/select/select/select.js +2 -0
- package/esm/select/select-dropdown/select-dropdown.d.ts +5 -0
- package/esm/select/select-dropdown/select-dropdown.js +5 -0
- package/esm/skeleton/skeleton.d.ts +5 -0
- package/esm/skeleton/skeleton.js +5 -0
- package/esm/slider/slider.d.ts +2 -0
- package/esm/slider/slider.js +2 -0
- package/esm/stepper/step/step.d.ts +5 -0
- package/esm/stepper/step/step.js +5 -0
- package/esm/stepper/stepper/stepper.d.ts +5 -0
- package/esm/stepper/stepper/stepper.js +5 -0
- package/esm/switch/switch.d.ts +2 -0
- package/esm/switch/switch.js +2 -0
- package/esm/table/table.d.ts +3 -1
- package/esm/table/table.js +3 -1
- package/esm/tabs/tab/tab.d.ts +5 -0
- package/esm/tabs/tab/tab.js +5 -0
- package/esm/tabs/tab-bar/tab-bar.d.ts +2 -0
- package/esm/tabs/tab-bar/tab-bar.js +2 -0
- package/esm/text-field/text-field.d.ts +5 -0
- package/esm/text-field/text-field.js +5 -0
- package/esm/time-picker/time-picker.d.ts +5 -0
- package/esm/time-picker/time-picker.js +5 -0
- package/esm/toast/toast.d.ts +2 -0
- package/esm/toast/toast.js +2 -0
- package/esm/toolbar/toolbar.d.ts +5 -0
- package/esm/toolbar/toolbar.js +5 -0
- package/esm/tooltip/tooltip.d.ts +5 -1
- package/esm/tooltip/tooltip.js +5 -1
- package/esm/view-switcher/view/view.d.ts +5 -0
- package/esm/view-switcher/view/view.js +5 -0
- package/esm/view-switcher/view-switcher.d.ts +5 -0
- package/esm/view-switcher/view-switcher.js +5 -0
- package/package.json +3 -2
- package/dist/esm/chunks/chunk.3ZKORL4I.js.map +0 -7
- package/dist/esm/chunks/chunk.SSFSLBBM.js.map +0 -7
- package/dist/esm/chunks/chunk.SSXNS4NR.js.map +0 -7
- package/dist/esm/chunks/chunk.XN65LPA3.js.map +0 -7
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import {
|
|
7
7
|
STEP_CONSTANTS,
|
|
8
8
|
StepComponent
|
|
9
|
-
} from "./chunk.
|
|
9
|
+
} from "./chunk.67B6JDOJ.js";
|
|
10
10
|
import {
|
|
11
11
|
getEventPath
|
|
12
12
|
} from "./chunk.EY57VTRF.js";
|
|
@@ -729,4 +729,4 @@ export {
|
|
|
729
729
|
StepperComponent,
|
|
730
730
|
defineStepperComponent
|
|
731
731
|
};
|
|
732
|
-
//# sourceMappingURL=chunk.
|
|
732
|
+
//# sourceMappingURL=chunk.CLEUHAZ6.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/stepper/stepper/stepper-constants.ts", "../../src/stepper/core/stepper-utils.ts", "../../src/stepper/stepper/stepper-adapter.ts", "../../src/stepper/stepper/stepper-foundation.ts", "../../src/stepper/stepper/stepper.ts", "../../src/stepper/stepper/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}stepper`;\n\nconst classes = {\n STEPPER: 'forge-stepper',\n LINEAR: 'forge-stepper--linear',\n ALTERNATIVE: 'forge-stepper--alternative',\n CLUSTERED: 'forge-stepper--clustered',\n FIXED: 'forge-stepper--fixed',\n ALIGN_LEFT: 'forge-stepper--align-left',\n ALIGN_CENTER: 'forge-stepper--align-center',\n ALIGN_RIGHT: 'forge-stepper--align-right',\n VERTICAL: 'forge-stepper--vertical',\n FOCUSED: 'forge-stepper--focused'\n};\n\nconst selectors = {\n STEPPER: `.${classes.STEPPER}`\n};\n\nconst attributes = {\n SELECTED_INDEX: 'selected-index',\n LINEAR: 'linear',\n ALTERNATIVE: 'alternative',\n LAYOUT_MODE: 'layout-mode',\n LAYOUT_ALIGN: 'layout-align',\n DISABLED: 'disabled',\n VERTICAL: 'vertical'\n};\n\nconst strings = {\n ARROW_LEFT_KEY: 'ArrowLeft',\n ARROW_RIGHT_KEY: 'ArrowRight',\n ARROW_UP_KEY: 'ArrowUp',\n ARROW_DOWN_KEY: 'ArrowDown',\n END_KEY: 'End',\n ENTER_KEY: 'Enter',\n HOME_KEY: 'Home',\n SPACE_KEY: 'Space',\n TAB_KEY: 'Tab'\n};\n\nconst numbers = {\n ARROW_LEFT_KEYCODE: 37,\n ARROW_RIGHT_KEYCODE: 39,\n END_KEYCODE: 35,\n HOME_KEYCODE: 36,\n ENTER_KEYCODE: 13,\n SPACE_KEYCODE: 32\n};\n\nconst ACCEPTABLE_KEYS = [\n strings.ARROW_LEFT_KEY,\n strings.ARROW_RIGHT_KEY,\n strings.ARROW_DOWN_KEY,\n strings.ARROW_UP_KEY,\n strings.END_KEY,\n strings.HOME_KEY,\n strings.ENTER_KEY,\n strings.SPACE_KEY,\n strings.TAB_KEY\n];\n\nconst KEYCODE_MAP = {\n [numbers.ARROW_LEFT_KEYCODE]: strings.ARROW_LEFT_KEY,\n [numbers.ARROW_RIGHT_KEYCODE]: strings.ARROW_RIGHT_KEY,\n [numbers.END_KEYCODE]: strings.END_KEY,\n [numbers.HOME_KEYCODE]: strings.HOME_KEY,\n [numbers.ENTER_KEYCODE]: strings.ENTER_KEY,\n [numbers.SPACE_KEYCODE]: strings.SPACE_KEY\n};\n\nexport const STEPPER_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n numbers,\n strings,\n ACCEPTABLE_KEYS,\n KEYCODE_MAP\n};\n\nexport interface IStepConfiguration {\n label: string;\n optionalLabel?: string;\n editable?: boolean;\n completed?: boolean;\n error?: boolean;\n disabled?: boolean;\n vertical?: boolean;\n expanded?: boolean;\n ignoreUserExpansion?: boolean;\n}\n\nexport interface IStepperConfiguration {\n steps: IStepConfiguration[];\n selectedIndex: number;\n linear: boolean;\n alternative: boolean;\n layoutMode: StepperLayoutMode;\n layoutAlign: StepperLayoutAlign;\n vertical?: boolean;\n}\n\nexport type StepperLayoutMode = 'fixed' | 'clustered';\nexport type StepperLayoutAlign = 'left' | 'center' | 'right';\n", "import { IStepComponent, STEP_CONSTANTS } from '../step';\nimport { STEPPER_CONSTANTS, IStepConfiguration, IStepperConfiguration, StepperLayoutAlign, StepperLayoutMode } from '../stepper/stepper-constants';\n\nexport class StepperUtils {\n /**\n * Creates a step element using the provided configuration.\n * @param {IStepConfiguration} step The step configuration\n * @param {number} index The index of the step.\n * @param {number} activeStepIndex The currently active step index.\n * @param {boolean} linear Whether the stepper is in linear mode or not.\n */\n public static createStepElement(step: IStepConfiguration, index: number, stepperConfig: IStepperConfiguration): IStepComponent {\n const stepElement = document.createElement(STEP_CONSTANTS.elementName);\n\n stepElement.index = index;\n stepElement.completed = step.completed || false;\n stepElement.editable = step.editable || false;\n stepElement.selected = stepperConfig.selectedIndex === index;\n stepElement.alternative = stepperConfig.alternative;\n stepElement.error = step.error || false;\n stepElement.disabled = step.disabled || false;\n stepElement.vertical = step.vertical || false;\n stepElement.ignoreUserExpansion = step.ignoreUserExpansion || false;\n stepElement.expanded = step.expanded || false;\n\n if (stepperConfig.linear && index > stepperConfig.selectedIndex) {\n stepElement.tabIndex = -1;\n }\n\n stepElement.textContent = step.label;\n\n if (step.optionalLabel) {\n stepElement.appendChild(this.createStepOptionalLabel(step.optionalLabel));\n }\n\n return stepElement;\n }\n\n /**\n * Creates the step label element using the provided configuration.\n * @param {IStepConfiguration} step The step configuration.\n */\n public static createStepOptionalLabel(labelText: string): HTMLElement {\n const label = document.createElement('span');\n label.slot = 'optional';\n label.textContent = labelText || '';\n return label;\n }\n\n /**\n * Sets the stepper to the provided linear state.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {boolean} isLinear Whether the stepper is in linear mode or not.\n */\n public static setLinearState(stepperElement: HTMLElement, isLinear: boolean): void {\n let hasLinearClass = stepperElement.classList.contains(STEPPER_CONSTANTS.classes.LINEAR);\n\n if (hasLinearClass && !isLinear) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.LINEAR);\n hasLinearClass = false;\n }\n\n if (!hasLinearClass && isLinear) {\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.LINEAR);\n }\n }\n\n /**\n * Sets the stepper to the provided label state.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {boolean} isAlternative Whether the stepper is in alternative mode or not.\n */\n public static setAlternativeState(stepperElement: HTMLElement, isAlternative: boolean): void {\n let hasAlternativeClass = stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALTERNATIVE);\n\n if (hasAlternativeClass && !isAlternative) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALTERNATIVE);\n hasAlternativeClass = false;\n }\n\n if (!hasAlternativeClass && isAlternative) {\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALTERNATIVE);\n }\n }\n\n /**\n * Sets the stepper layout mode.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {StepperLayoutMode} mode The layout mode.\n */\n public static setLayoutMode(stepperElement: HTMLElement, mode: StepperLayoutMode): void {\n switch (mode) {\n case 'clustered':\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.FIXED)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.FIXED);\n }\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.CLUSTERED);\n break;\n case 'fixed':\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.CLUSTERED)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.CLUSTERED);\n }\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.FIXED);\n break;\n }\n }\n\n /**\n * Sets the stepper layout alignment.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {StepperLayoutAlign} mode The layout alignment.\n */\n public static setLayoutAlign(stepperElement: HTMLElement, mode: StepperLayoutAlign): void {\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALIGN_LEFT)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALIGN_LEFT);\n }\n\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALIGN_CENTER)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALIGN_CENTER);\n }\n\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALIGN_RIGHT)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALIGN_RIGHT);\n }\n\n switch (mode) {\n case 'left':\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALIGN_LEFT);\n break;\n case 'center':\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALIGN_CENTER);\n break;\n case 'right':\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALIGN_RIGHT);\n break;\n }\n }\n\n /**\n * Creates a stepper with all of its step elements.\n * @param {IStepperConfiguration} stepperConfiguration The stepper configuration.\n */\n public static createSteps(stepperConfiguration: IStepperConfiguration): IStepComponent[] {\n const steps: IStepComponent[] = [];\n\n stepperConfiguration.steps.forEach((step, index) => {\n const stepElement = StepperUtils.createStepElement(step, index, stepperConfiguration);\n steps.push(stepElement);\n });\n\n steps[0].setAttribute(STEP_CONSTANTS.attributes.FIRST, '');\n steps[steps.length - 1].setAttribute(STEP_CONSTANTS.attributes.LAST, '');\n\n return steps;\n }\n}\n", "import { getShadowElement, getActiveElement, toggleClass } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../../core/base';\nimport { StepperUtils } from '../core/stepper-utils';\nimport { IStepComponent } from '../step/step';\nimport { STEP_CONSTANTS } from '../step/step-constants';\nimport { IStepperComponent } from './stepper';\nimport { StepperLayoutAlign, StepperLayoutMode, STEPPER_CONSTANTS } from './stepper-constants';\n\nexport interface IStepperAdapter extends IBaseAdapter {\n initializeAccessibility(): void;\n toggleDisabled(disabled: boolean): void;\n patchSafari(): void;\n getFocusedOrSelectedStep(): IStepComponent;\n applyConfiguredSteps(steps: IStepComponent[]): void;\n setLinearState(linear: boolean): void;\n setLayoutAlign(layoutAlign: StepperLayoutAlign): void;\n setLayoutMode(layoutMode: StepperLayoutMode): void;\n setAlternativeState(alternative: boolean): void;\n setVertical(vertical: boolean): void;\n assignIndices(): void;\n addRootListener(event: string, listener: EventListener): void;\n removeRootListener(event: string, listener: EventListener): void;\n setSelected(step: IStepComponent): void;\n setSelectedByIndex(index: number): void;\n assignFirstLastStep(): void;\n getStep(index: number): IStepComponent;\n getLastStep(): IStepComponent;\n addSlotChangeListener(listener: EventListener): void;\n removeSlotChangeListener(listener: EventListener): void;\n toggleRootClass(className: string, show: boolean): void;\n isStepperFocused(): boolean;\n setStepsListener(event: string, listener: EventListener): void;\n removeStepsListener(event: string, listener: EventListener): void;\n}\n\nexport class StepperAdapter extends BaseAdapter<IStepperComponent> implements IStepperAdapter {\n private _rootElement: HTMLElement;\n private _slotElement: HTMLSlotElement;\n\n constructor(component: IStepperComponent) {\n super(component);\n this._rootElement = getShadowElement(component, STEPPER_CONSTANTS.selectors.STEPPER);\n this._slotElement = this._rootElement.querySelector('slot') as HTMLSlotElement;\n }\n\n public initializeAccessibility(): void {\n if (!this._component.hasAttribute('role')) {\n this._component.setAttribute('role', 'tablist');\n }\n }\n\n public patchSafari(): void {\n this._applyToSteps(s => s.setAttribute('safari', ''));\n }\n\n public addSlotChangeListener(listener: EventListener): void {\n this._slotElement.addEventListener('slotchange', listener);\n }\n public removeSlotChangeListener(listener: EventListener): void {\n this._slotElement.addEventListener('slotchange', listener);\n }\n\n public getLastStep(): IStepComponent {\n const steps = this._getSteps();\n return steps.item(steps.length - 1);\n }\n\n public setSelected(step: IStepComponent): void {\n this._getSteps().forEach(s => {\n if (s === step) {\n s.selected = true;\n } else {\n s.selected = false;\n }\n });\n }\n\n public assignIndices(): void {\n const steps = this._getSteps();\n\n steps.forEach((tab, index) => {\n tab.index = index;\n });\n }\n\n public assignFirstLastStep(): void {\n const steps = this._getSteps();\n if (steps && steps.length > 1) {\n steps[0].setAttribute('first', '');\n steps[steps.length - 1].setAttribute('last', '');\n }\n }\n\n public setLayoutAlign(layoutAlign: StepperLayoutAlign): void {\n StepperUtils.setLayoutAlign(this._rootElement, layoutAlign);\n }\n public setLayoutMode(layoutMode: StepperLayoutMode): void {\n StepperUtils.setLayoutMode(this._rootElement, layoutMode);\n this._applyToSteps(s => s.setAttribute(STEP_CONSTANTS.attributes.CLUSTERED, ''));\n }\n public setAlternativeState(alternative: boolean): void {\n StepperUtils.setAlternativeState(this._rootElement, alternative);\n this._applyToSteps(step => step.alternative = alternative);\n }\n\n public setVertical(vertical: boolean): void {\n toggleClass(this._rootElement, vertical, STEPPER_CONSTANTS.classes.VERTICAL);\n this._applyToSteps(step => step.vertical = vertical);\n }\n\n public setLinearState(linear: boolean): void {\n StepperUtils.setLinearState(this._rootElement, linear);\n }\n\n public removeRootListener(event: string, listener: EventListener): void {\n this._rootElement.removeEventListener('click', listener);\n }\n public addRootListener(event: string, listener: EventListener): void {\n this._rootElement.addEventListener(event, listener);\n }\n\n public setSelectedByIndex(index: number): void {\n this._applyToSteps(step => {\n if (step.selected && step.index !== index) {\n step.selected = false;\n }\n\n if (step.index === index) {\n step.selected = true;\n }\n });\n }\n\n public applyConfiguredSteps(steps: IStepComponent[]): void {\n this._component.querySelectorAll(STEP_CONSTANTS.elementName).forEach(n => {\n this._component.removeChild(n);\n });\n\n steps.forEach(s => this._component.appendChild(s));\n }\n\n public tryGetFocusedStep(): IStepComponent | undefined {\n let focusedStep: IStepComponent = undefined as any;\n const activeElement = getActiveElement();\n this._applyToSteps(step => {\n if (activeElement === getShadowElement(step, STEP_CONSTANTS.selectors.STEP)) {\n focusedStep = step;\n }\n });\n\n return focusedStep;\n }\n\n public getFocusedOrSelectedStep(): IStepComponent {\n let focusedStep = this.tryGetFocusedStep();\n\n if (!focusedStep) {\n focusedStep = this._getSteps()[0];\n focusedStep.focus();\n }\n\n return focusedStep;\n }\n\n public getStep(index: number): IStepComponent {\n let realIndex = 0;\n const steps = this._getSteps();\n\n if (index < 0) {\n return steps.item(steps.length - 1);\n }\n\n if (steps.length > index) {\n realIndex = index;\n }\n return steps.item(realIndex);\n }\n\n public toggleDisabled(disabled: boolean): void {\n this._applyToSteps(s => s.disabled = disabled);\n }\n\n public toggleRootClass(className: string, show: boolean): void{\n toggleClass(this._rootElement, show, className);\n }\n\n public isStepperFocused(): boolean {\n return this._rootElement.classList.contains(STEPPER_CONSTANTS.classes.FOCUSED);\n }\n\n public setStepsListener(event: string, listener: EventListener): void {\n this._applyToSteps(s => s.addEventListener(event, listener));\n }\n\n public removeStepsListener(event: string, listener: EventListener): void {\n this._applyToSteps(s => s.removeEventListener(event, listener));\n }\n\n private _applyToSteps(action: (step: IStepComponent, index?: number) => void): void {\n this._getSteps().forEach(action);\n }\n\n private _getSteps(): NodeListOf<IStepComponent> {\n return this._component.querySelectorAll<IStepComponent>(STEP_CONSTANTS.elementName);\n }\n}\n", "import { getEventPath, getShadowElement, ICustomElementFoundation, isDefined, isNumber, Platform } from '@tylertech/forge-core';\nimport { STEP_CONSTANTS } from '../step/step-constants';\nimport { StepperUtils } from '../core/stepper-utils';\nimport { IStepComponent } from '../step/step';\nimport { IStepperAdapter } from './stepper-adapter';\nimport { STEPPER_CONSTANTS, IStepConfiguration, StepperLayoutAlign, StepperLayoutMode } from './stepper-constants';\n\nexport interface IStepperFoundation extends ICustomElementFoundation {\n steps: IStepConfiguration[];\n selectedIndex: number;\n linear: boolean;\n alternative: boolean;\n layoutMode: StepperLayoutMode;\n layoutAlign: StepperLayoutAlign;\n}\n\nexport class StepperFoundation implements IStepperFoundation {\n private _steps: IStepConfiguration[] = [];\n private _selectedIndex = 0;\n private _linear = false;\n private _alternative = false;\n private _layoutMode: StepperLayoutMode = 'fixed';\n private _layoutAlign: StepperLayoutAlign = 'center';\n private _initialize = false;\n private _disabled: boolean;\n private _vertical: boolean;\n\n private _clickListener: EventListener;\n private _keyListener: EventListener;\n private _slotChangeListener: EventListener;\n private _stepFocusListener: () => void;\n private _stepBlurListener: () => void;\n private _stepExpandedContentFocusInListener: (event: CustomEvent<IStepComponent>) => void;\n private _stepExpandedContentFocusOutListener: (event: CustomEvent<IStepComponent>) => void;\n\n constructor(private _adapter: IStepperAdapter) {\n this._clickListener = event => this._handleClick(event);\n this._keyListener = event => this._onKeydown(event as KeyboardEvent);\n this._stepFocusListener = () => this._onStepFocus();\n this._stepBlurListener = () => this._onStepBlur();\n this._stepExpandedContentFocusInListener = event => this._onStepExpandedContentFocusIn(event);\n this._stepExpandedContentFocusOutListener = event => this._onStepExpandedContentFocusOut(event);\n this._slotChangeListener = event => this._onSlotChange(event as Event);\n }\n\n public initialize(): void {\n this._adapter.initializeAccessibility();\n this._adapter.assignIndices();\n this._adapter.setLinearState(this._linear);\n this._adapter.setAlternativeState(this._alternative);\n this._adapter.setLayoutAlign(this._layoutAlign);\n this._adapter.setLayoutMode(this._layoutMode);\n this._adapter.addRootListener('click', this._clickListener);\n this._adapter.addHostListener('keydown', this._keyListener);\n this._adapter.assignFirstLastStep();\n this._adapter.addRootListener(STEP_CONSTANTS.events.EXPANDED_CONTENT_FOCUSIN, this._stepExpandedContentFocusInListener);\n this._adapter.addRootListener(STEP_CONSTANTS.events.EXPANDED_CONTENT_FOCUSOUT, this._stepExpandedContentFocusOutListener);\n this._applySelectedIndex();\n this._patchBrowser();\n this._adapter.setStepsListener('blur', this._stepBlurListener);\n this._adapter.setStepsListener('focus', this._stepFocusListener);\n if (!this._initialize) {\n this._adapter.addSlotChangeListener(this._slotChangeListener);\n }\n\n this._initialize = true;\n }\n\n public disconnect(): void {\n this._adapter.removeRootListener('click', this._clickListener);\n this._adapter.removeHostListener('keydown', this._keyListener);\n this._adapter.removeSlotChangeListener(this._slotChangeListener);\n this._adapter.removeStepsListener('blur', this._stepBlurListener);\n this._adapter.removeStepsListener('focus', this._stepFocusListener);\n }\n\n /** The step configurations. */\n public get steps(): IStepConfiguration[] {\n return JSON.parse(JSON.stringify(this._steps));\n }\n public set steps(value: IStepConfiguration[]) {\n if (Array.isArray(value) && value.length > 0) {\n this._steps = [...value.map(s => ({ ...s }))];\n } else {\n this._steps = [];\n return;\n }\n\n this._renderConfiguration();\n }\n\n /** The active step index. */\n public get selectedIndex(): number {\n return this._selectedIndex;\n }\n public set selectedIndex(value: number) {\n if (!isDefined(value)) {\n value = 0;\n } else if (!isNumber(value)) {\n const v = Number(value);\n value = !isNaN(v) ? v : 0;\n }\n\n if (this._selectedIndex !== value) {\n this._selectedIndex = value;\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.SELECTED_INDEX, this._selectedIndex.toString());\n this._applySelectedIndex();\n }\n }\n\n /** Whether the stepper is linear or non-linear. */\n public get linear(): boolean {\n return this._linear;\n }\n public set linear(value: boolean) {\n value = Boolean(value);\n if (this._linear !== value) {\n this._linear = value;\n this._adapter.setLinearState(this._linear);\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.LINEAR, this._linear.toString());\n }\n }\n\n /** Whether the stepper uses the default or alternative label layout mode. */\n public get alternative(): boolean {\n return this._alternative;\n }\n public set alternative(value: boolean) {\n value = Boolean(value);\n if (this._alternative !== value) {\n this._alternative = value;\n this._adapter.setAlternativeState(this._alternative);\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.ALTERNATIVE, this._alternative.toString());\n }\n }\n\n /** The layout mode of the stepper. */\n public get layoutMode(): StepperLayoutMode {\n return this._layoutMode;\n }\n public set layoutMode(value: StepperLayoutMode) {\n if (!/^(fixed|clustered)$/.test(value)) {\n return;\n }\n\n if (this._layoutMode !== value) {\n this._layoutMode = value;\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.LAYOUT_MODE, this._layoutMode);\n this._adapter.setLayoutMode(this._layoutMode);\n }\n }\n\n /** The layout alignment of the stepper. */\n public get layoutAlign(): StepperLayoutAlign {\n return this._layoutAlign;\n }\n public set layoutAlign(value: StepperLayoutAlign) {\n if (!/^(left|center|right)$/.test(value)) {\n return;\n }\n\n if (this._layoutAlign !== value) {\n this._layoutAlign = value;\n this._adapter.setLayoutAlign(this._layoutAlign);\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.LAYOUT_ALIGN, this._layoutAlign);\n }\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n public set disabled(value: boolean) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._applyDisabled();\n }\n }\n\n public get vertical(): boolean {\n return this._vertical;\n }\n public set vertical(value: boolean) {\n if (value !== this._vertical) {\n this._vertical = value;\n this._applyVertical();\n this._adapter.toggleHostAttribute(STEPPER_CONSTANTS.attributes.VERTICAL, this._vertical);\n }\n }\n\n private _applyVertical(): void {\n this._adapter.setVertical(this._vertical);\n }\n\n private _applyDisabled(): void {\n if (this._disabled) {\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.DISABLED, 'disabled');\n } else {\n this._adapter.removeHostAttribute(STEPPER_CONSTANTS.attributes.DISABLED);\n }\n\n this._adapter.toggleDisabled(this._disabled);\n }\n\n private _applySelectedIndex(): void {\n this._adapter.setSelectedByIndex(this._selectedIndex);\n }\n\n private _handleClick(event: Event): void {\n event.preventDefault();\n if (this._linear) {\n return;\n }\n const eventPath = getEventPath(event);\n const stepRoot = eventPath.find(el => el.classList && el.classList.contains(STEP_CONSTANTS.classes.STEP));\n const step = eventPath.find(el => el.localName === STEP_CONSTANTS.elementName) as IStepComponent | undefined;\n\n if (stepRoot && step && !step.selected && !step.disabled && this._adapter.emitHostEvent(STEP_CONSTANTS.events.SELECT, step.index, true, true)) {\n this._adapter.setSelected(step);\n this.selectedIndex = step.index;\n }\n }\n\n private _renderConfiguration(): void {\n const steps = StepperUtils.createSteps({\n steps: this._steps,\n selectedIndex: this._selectedIndex,\n alternative: this._alternative,\n layoutAlign: this._layoutAlign,\n layoutMode: this._layoutMode,\n linear: this._linear\n });\n\n this.disconnect();\n this._adapter.applyConfiguredSteps(steps);\n this.initialize();\n }\n\n private _onKeydown(event: KeyboardEvent): void {\n if (this._linear) {\n return;\n }\n\n const key = this._getKeyFromEvent(event);\n\n // If the expanded content is currently being focused, ignore stepper specific keys\n if (!this._adapter.isStepperFocused()) {\n return;\n }\n\n // Early exit if the event key isn't one of the keyboard navigation keys\n if (!key) {\n return;\n }\n\n if ([STEP_CONSTANTS.strings.HOME_KEY, STEP_CONSTANTS.strings.END_KEY, STEP_CONSTANTS.strings.ARROW_DOWN_KEY, STEPPER_CONSTANTS.strings.ARROW_UP_KEY].includes(key)) {\n event.preventDefault();\n }\n\n\n const step = this._vertical ? this._determineVerticalMoveTarget(key) : this._determineMoveTarget(key);\n\n if (step) {\n this._moveFocusTo(step);\n }\n }\n\n private _moveFocusTo(step: IStepComponent): void {\n getShadowElement(step, STEP_CONSTANTS.selectors.STEP).focus();\n }\n\n private _getKeyFromEvent(evt: KeyboardEvent): string {\n if (STEPPER_CONSTANTS.ACCEPTABLE_KEYS.includes(evt.key)) {\n return evt.key;\n }\n return STEPPER_CONSTANTS.KEYCODE_MAP[evt.keyCode];\n }\n\n private _determineMoveTarget(key: string): IStepComponent {\n const step = this._adapter.getFocusedOrSelectedStep();\n\n if (step) {\n switch (key) {\n case STEPPER_CONSTANTS.strings.ARROW_RIGHT_KEY:\n return this._adapter.getStep(step.index + 1);\n case STEPPER_CONSTANTS.strings.ARROW_LEFT_KEY:\n return this._adapter.getStep(step.index - 1);\n case STEPPER_CONSTANTS.strings.HOME_KEY:\n return this._adapter.getStep(0);\n case STEPPER_CONSTANTS.strings.END_KEY:\n return this._adapter.getLastStep();\n }\n }\n\n return step as IStepComponent;\n }\n\n private _determineVerticalMoveTarget(key: string): IStepComponent {\n const step = this._adapter.getFocusedOrSelectedStep();\n\n if (step) {\n switch (key) {\n case STEPPER_CONSTANTS.strings.ARROW_DOWN_KEY:\n return this._adapter.getStep(step.index + 1);\n case STEPPER_CONSTANTS.strings.ARROW_UP_KEY:\n return this._adapter.getStep(step.index - 1);\n case STEPPER_CONSTANTS.strings.HOME_KEY:\n return this._adapter.getStep(0);\n case STEPPER_CONSTANTS.strings.END_KEY:\n return this._adapter.getLastStep();\n }\n }\n\n return step as IStepComponent;\n }\n\n private _onSlotChange(event: Event): void {\n this.disconnect();\n this.initialize();\n }\n\n private _onStepExpandedContentFocusIn(event: CustomEvent<IStepComponent>): void {\n const step = this._adapter.getStep(event.detail.index + 1);\n if (step) {\n step.setStepTabIndex(0);\n }\n event.detail.setStepTabIndex(0);\n }\n\n private _onStepExpandedContentFocusOut(event: CustomEvent<IStepComponent>): void {\n const focusOutStep = event.target as IStepComponent;\n const step = this._adapter.getStep(focusOutStep.index + 1);\n\n if (step) {\n step.setStepTabIndex(-1);\n }\n\n focusOutStep.setStepTabIndex(-1);\n }\n\n private _onStepFocus(): void {\n this._adapter.toggleRootClass(STEPPER_CONSTANTS.classes.FOCUSED, true);\n }\n\n private _onStepBlur(): void {\n this._adapter.toggleRootClass(STEPPER_CONSTANTS.classes.FOCUSED, false);\n }\n\n private _patchBrowser(): void {\n if (new Platform().SAFARI()) {\n this._adapter.patchSafari();\n }\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, ensureChildren, FoundationProperty } from '@tylertech/forge-core';\nimport { BaseComponent, IBaseComponent } from '../../core/base/base-component';\nimport { IStepConfiguration, StepperLayoutAlign, StepperLayoutMode } from '../stepper/stepper-constants';\nimport { StepComponent } from '../step/step';\nimport { StepperAdapter } from './stepper-adapter';\nimport { STEPPER_CONSTANTS } from './stepper-constants';\nimport { StepperFoundation } from './stepper-foundation';\n\nconst template = '<template><div class=\\\"forge-stepper\\\" part=\\\"root\\\"><slot></slot></div></template>';\nconst styles = '.forge-stepper{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;white-space:nowrap;overflow:hidden}.forge-stepper:not(.forge-stepper--vertical) ::slotted(*){display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;position:relative;min-width:112px}.forge-stepper--fixed ::slotted(*){-webkit-box-flex:1;flex:1}.forge-stepper--alternative{-webkit-box-align:start;align-items:flex-start}.forge-stepper--alternative ::slotted(*){min-width:160px}.forge-stepper--align-left{-webkit-box-pack:start;justify-content:flex-start}.forge-stepper--align-center{-webkit-box-pack:center;justify-content:center}.forge-stepper--align-right{-webkit-box-pack:end;justify-content:flex-end}:host{display:block}:host([hidden]){display:none}:host([vertical]) .forge-stepper{display:unset;-webkit-box-align:unset;align-items:unset;white-space:unset;overflow:unset}';\n\nexport interface IStepperComponent extends IBaseComponent {\n steps: IStepConfiguration[];\n selectedIndex: number;\n linear: boolean;\n alternative: boolean;\n layoutMode: StepperLayoutMode;\n layoutAlign: StepperLayoutAlign;\n disabled: boolean;\n vertical: boolean;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-stepper': IStepperComponent;\n }\n}\n\n@CustomElement({\n name: STEPPER_CONSTANTS.elementName,\n dependencies: [StepComponent]\n})\nexport class StepperComponent extends BaseComponent implements IStepperComponent {\n public static get observedAttributes(): string[] {\n return [\n STEPPER_CONSTANTS.attributes.SELECTED_INDEX,\n STEPPER_CONSTANTS.attributes.LINEAR,\n STEPPER_CONSTANTS.attributes.ALTERNATIVE,\n STEPPER_CONSTANTS.attributes.LAYOUT_MODE,\n STEPPER_CONSTANTS.attributes.LAYOUT_ALIGN,\n STEPPER_CONSTANTS.attributes.DISABLED,\n STEPPER_CONSTANTS.attributes.VERTICAL\n ];\n }\n\n private _foundation: StepperFoundation;\n\n constructor() {\n super();\n attachShadowTemplate(this, template, styles);\n this._foundation = new StepperFoundation(new StepperAdapter(this));\n }\n\n public async connectedCallback(): Promise<void> {\n await ensureChildren(this);\n this._foundation.initialize();\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case STEPPER_CONSTANTS.attributes.SELECTED_INDEX:\n this.selectedIndex = Number(newValue) || 0;\n break;\n case STEPPER_CONSTANTS.attributes.LINEAR:\n this.linear = coerceBoolean(newValue);\n break;\n case STEPPER_CONSTANTS.attributes.ALTERNATIVE:\n this.alternative = coerceBoolean(newValue);\n break;\n case STEPPER_CONSTANTS.attributes.LAYOUT_MODE:\n this.layoutMode = newValue as StepperLayoutMode;\n break;\n case STEPPER_CONSTANTS.attributes.LAYOUT_ALIGN:\n this.layoutAlign = newValue as StepperLayoutAlign;\n break;\n case STEPPER_CONSTANTS.attributes.DISABLED:\n this.disabled = coerceBoolean(newValue);\n break;\n case STEPPER_CONSTANTS.attributes.VERTICAL:\n this.vertical = coerceBoolean(newValue);\n break;\n }\n }\n\n /** The step configurations. */\n @FoundationProperty()\n public steps: IStepConfiguration[];\n\n /** The active step index. */\n @FoundationProperty()\n public selectedIndex: number;\n\n /** Whether the stepper is linear or non-linear. */\n @FoundationProperty()\n public linear: boolean;\n\n /** Whether the stepper uses the default or alternative label layout mode. */\n @FoundationProperty()\n public alternative: boolean;\n\n /** The layout mode of the stepper. */\n @FoundationProperty()\n public layoutMode: StepperLayoutMode;\n\n /** The layout alignment of the stepper. */\n @FoundationProperty()\n public layoutAlign: StepperLayoutAlign;\n\n @FoundationProperty()\n public disabled: boolean;\n\n @FoundationProperty()\n public vertical: boolean;\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\nimport { StepperComponent } from './stepper';\n\nexport * from './stepper';\nexport * from './stepper-adapter';\nexport * from './stepper-constants';\nexport * from './stepper-foundation';\n\nexport function defineStepperComponent(): void {\n defineCustomElement(StepperComponent);\n}\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}stepper`;\n\nconst classes = {\n STEPPER: 'forge-stepper',\n LINEAR: 'forge-stepper--linear',\n ALTERNATIVE: 'forge-stepper--alternative',\n CLUSTERED: 'forge-stepper--clustered',\n FIXED: 'forge-stepper--fixed',\n ALIGN_LEFT: 'forge-stepper--align-left',\n ALIGN_CENTER: 'forge-stepper--align-center',\n ALIGN_RIGHT: 'forge-stepper--align-right',\n VERTICAL: 'forge-stepper--vertical',\n FOCUSED: 'forge-stepper--focused'\n};\n\nconst selectors = {\n STEPPER: `.${classes.STEPPER}`\n};\n\nconst attributes = {\n SELECTED_INDEX: 'selected-index',\n LINEAR: 'linear',\n ALTERNATIVE: 'alternative',\n LAYOUT_MODE: 'layout-mode',\n LAYOUT_ALIGN: 'layout-align',\n DISABLED: 'disabled',\n VERTICAL: 'vertical'\n};\n\nconst strings = {\n ARROW_LEFT_KEY: 'ArrowLeft',\n ARROW_RIGHT_KEY: 'ArrowRight',\n ARROW_UP_KEY: 'ArrowUp',\n ARROW_DOWN_KEY: 'ArrowDown',\n END_KEY: 'End',\n ENTER_KEY: 'Enter',\n HOME_KEY: 'Home',\n SPACE_KEY: 'Space',\n TAB_KEY: 'Tab'\n};\n\nconst numbers = {\n ARROW_LEFT_KEYCODE: 37,\n ARROW_RIGHT_KEYCODE: 39,\n END_KEYCODE: 35,\n HOME_KEYCODE: 36,\n ENTER_KEYCODE: 13,\n SPACE_KEYCODE: 32\n};\n\nconst ACCEPTABLE_KEYS = [\n strings.ARROW_LEFT_KEY,\n strings.ARROW_RIGHT_KEY,\n strings.ARROW_DOWN_KEY,\n strings.ARROW_UP_KEY,\n strings.END_KEY,\n strings.HOME_KEY,\n strings.ENTER_KEY,\n strings.SPACE_KEY,\n strings.TAB_KEY\n];\n\nconst KEYCODE_MAP = {\n [numbers.ARROW_LEFT_KEYCODE]: strings.ARROW_LEFT_KEY,\n [numbers.ARROW_RIGHT_KEYCODE]: strings.ARROW_RIGHT_KEY,\n [numbers.END_KEYCODE]: strings.END_KEY,\n [numbers.HOME_KEYCODE]: strings.HOME_KEY,\n [numbers.ENTER_KEYCODE]: strings.ENTER_KEY,\n [numbers.SPACE_KEYCODE]: strings.SPACE_KEY\n};\n\nexport const STEPPER_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n numbers,\n strings,\n ACCEPTABLE_KEYS,\n KEYCODE_MAP\n};\n\nexport interface IStepConfiguration {\n label: string;\n optionalLabel?: string;\n editable?: boolean;\n completed?: boolean;\n error?: boolean;\n disabled?: boolean;\n vertical?: boolean;\n expanded?: boolean;\n ignoreUserExpansion?: boolean;\n}\n\nexport interface IStepperConfiguration {\n steps: IStepConfiguration[];\n selectedIndex: number;\n linear: boolean;\n alternative: boolean;\n layoutMode: StepperLayoutMode;\n layoutAlign: StepperLayoutAlign;\n vertical?: boolean;\n}\n\nexport type StepperLayoutMode = 'fixed' | 'clustered';\nexport type StepperLayoutAlign = 'left' | 'center' | 'right';\n", "import { IStepComponent, STEP_CONSTANTS } from '../step';\nimport { STEPPER_CONSTANTS, IStepConfiguration, IStepperConfiguration, StepperLayoutAlign, StepperLayoutMode } from '../stepper/stepper-constants';\n\nexport class StepperUtils {\n /**\n * Creates a step element using the provided configuration.\n * @param {IStepConfiguration} step The step configuration\n * @param {number} index The index of the step.\n * @param {number} activeStepIndex The currently active step index.\n * @param {boolean} linear Whether the stepper is in linear mode or not.\n */\n public static createStepElement(step: IStepConfiguration, index: number, stepperConfig: IStepperConfiguration): IStepComponent {\n const stepElement = document.createElement(STEP_CONSTANTS.elementName);\n\n stepElement.index = index;\n stepElement.completed = step.completed || false;\n stepElement.editable = step.editable || false;\n stepElement.selected = stepperConfig.selectedIndex === index;\n stepElement.alternative = stepperConfig.alternative;\n stepElement.error = step.error || false;\n stepElement.disabled = step.disabled || false;\n stepElement.vertical = step.vertical || false;\n stepElement.ignoreUserExpansion = step.ignoreUserExpansion || false;\n stepElement.expanded = step.expanded || false;\n\n if (stepperConfig.linear && index > stepperConfig.selectedIndex) {\n stepElement.tabIndex = -1;\n }\n\n stepElement.textContent = step.label;\n\n if (step.optionalLabel) {\n stepElement.appendChild(this.createStepOptionalLabel(step.optionalLabel));\n }\n\n return stepElement;\n }\n\n /**\n * Creates the step label element using the provided configuration.\n * @param {IStepConfiguration} step The step configuration.\n */\n public static createStepOptionalLabel(labelText: string): HTMLElement {\n const label = document.createElement('span');\n label.slot = 'optional';\n label.textContent = labelText || '';\n return label;\n }\n\n /**\n * Sets the stepper to the provided linear state.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {boolean} isLinear Whether the stepper is in linear mode or not.\n */\n public static setLinearState(stepperElement: HTMLElement, isLinear: boolean): void {\n let hasLinearClass = stepperElement.classList.contains(STEPPER_CONSTANTS.classes.LINEAR);\n\n if (hasLinearClass && !isLinear) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.LINEAR);\n hasLinearClass = false;\n }\n\n if (!hasLinearClass && isLinear) {\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.LINEAR);\n }\n }\n\n /**\n * Sets the stepper to the provided label state.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {boolean} isAlternative Whether the stepper is in alternative mode or not.\n */\n public static setAlternativeState(stepperElement: HTMLElement, isAlternative: boolean): void {\n let hasAlternativeClass = stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALTERNATIVE);\n\n if (hasAlternativeClass && !isAlternative) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALTERNATIVE);\n hasAlternativeClass = false;\n }\n\n if (!hasAlternativeClass && isAlternative) {\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALTERNATIVE);\n }\n }\n\n /**\n * Sets the stepper layout mode.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {StepperLayoutMode} mode The layout mode.\n */\n public static setLayoutMode(stepperElement: HTMLElement, mode: StepperLayoutMode): void {\n switch (mode) {\n case 'clustered':\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.FIXED)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.FIXED);\n }\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.CLUSTERED);\n break;\n case 'fixed':\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.CLUSTERED)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.CLUSTERED);\n }\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.FIXED);\n break;\n }\n }\n\n /**\n * Sets the stepper layout alignment.\n * @param {HTMLElement} stepperElement The stepper element.\n * @param {StepperLayoutAlign} mode The layout alignment.\n */\n public static setLayoutAlign(stepperElement: HTMLElement, mode: StepperLayoutAlign): void {\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALIGN_LEFT)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALIGN_LEFT);\n }\n\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALIGN_CENTER)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALIGN_CENTER);\n }\n\n if (stepperElement.classList.contains(STEPPER_CONSTANTS.classes.ALIGN_RIGHT)) {\n stepperElement.classList.remove(STEPPER_CONSTANTS.classes.ALIGN_RIGHT);\n }\n\n switch (mode) {\n case 'left':\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALIGN_LEFT);\n break;\n case 'center':\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALIGN_CENTER);\n break;\n case 'right':\n stepperElement.classList.add(STEPPER_CONSTANTS.classes.ALIGN_RIGHT);\n break;\n }\n }\n\n /**\n * Creates a stepper with all of its step elements.\n * @param {IStepperConfiguration} stepperConfiguration The stepper configuration.\n */\n public static createSteps(stepperConfiguration: IStepperConfiguration): IStepComponent[] {\n const steps: IStepComponent[] = [];\n\n stepperConfiguration.steps.forEach((step, index) => {\n const stepElement = StepperUtils.createStepElement(step, index, stepperConfiguration);\n steps.push(stepElement);\n });\n\n steps[0].setAttribute(STEP_CONSTANTS.attributes.FIRST, '');\n steps[steps.length - 1].setAttribute(STEP_CONSTANTS.attributes.LAST, '');\n\n return steps;\n }\n}\n", "import { getShadowElement, getActiveElement, toggleClass } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../../core/base';\nimport { StepperUtils } from '../core/stepper-utils';\nimport { IStepComponent } from '../step/step';\nimport { STEP_CONSTANTS } from '../step/step-constants';\nimport { IStepperComponent } from './stepper';\nimport { StepperLayoutAlign, StepperLayoutMode, STEPPER_CONSTANTS } from './stepper-constants';\n\nexport interface IStepperAdapter extends IBaseAdapter {\n initializeAccessibility(): void;\n toggleDisabled(disabled: boolean): void;\n patchSafari(): void;\n getFocusedOrSelectedStep(): IStepComponent;\n applyConfiguredSteps(steps: IStepComponent[]): void;\n setLinearState(linear: boolean): void;\n setLayoutAlign(layoutAlign: StepperLayoutAlign): void;\n setLayoutMode(layoutMode: StepperLayoutMode): void;\n setAlternativeState(alternative: boolean): void;\n setVertical(vertical: boolean): void;\n assignIndices(): void;\n addRootListener(event: string, listener: EventListener): void;\n removeRootListener(event: string, listener: EventListener): void;\n setSelected(step: IStepComponent): void;\n setSelectedByIndex(index: number): void;\n assignFirstLastStep(): void;\n getStep(index: number): IStepComponent;\n getLastStep(): IStepComponent;\n addSlotChangeListener(listener: EventListener): void;\n removeSlotChangeListener(listener: EventListener): void;\n toggleRootClass(className: string, show: boolean): void;\n isStepperFocused(): boolean;\n setStepsListener(event: string, listener: EventListener): void;\n removeStepsListener(event: string, listener: EventListener): void;\n}\n\nexport class StepperAdapter extends BaseAdapter<IStepperComponent> implements IStepperAdapter {\n private _rootElement: HTMLElement;\n private _slotElement: HTMLSlotElement;\n\n constructor(component: IStepperComponent) {\n super(component);\n this._rootElement = getShadowElement(component, STEPPER_CONSTANTS.selectors.STEPPER);\n this._slotElement = this._rootElement.querySelector('slot') as HTMLSlotElement;\n }\n\n public initializeAccessibility(): void {\n if (!this._component.hasAttribute('role')) {\n this._component.setAttribute('role', 'tablist');\n }\n }\n\n public patchSafari(): void {\n this._applyToSteps(s => s.setAttribute('safari', ''));\n }\n\n public addSlotChangeListener(listener: EventListener): void {\n this._slotElement.addEventListener('slotchange', listener);\n }\n public removeSlotChangeListener(listener: EventListener): void {\n this._slotElement.addEventListener('slotchange', listener);\n }\n\n public getLastStep(): IStepComponent {\n const steps = this._getSteps();\n return steps.item(steps.length - 1);\n }\n\n public setSelected(step: IStepComponent): void {\n this._getSteps().forEach(s => {\n if (s === step) {\n s.selected = true;\n } else {\n s.selected = false;\n }\n });\n }\n\n public assignIndices(): void {\n const steps = this._getSteps();\n\n steps.forEach((tab, index) => {\n tab.index = index;\n });\n }\n\n public assignFirstLastStep(): void {\n const steps = this._getSteps();\n if (steps && steps.length > 1) {\n steps[0].setAttribute('first', '');\n steps[steps.length - 1].setAttribute('last', '');\n }\n }\n\n public setLayoutAlign(layoutAlign: StepperLayoutAlign): void {\n StepperUtils.setLayoutAlign(this._rootElement, layoutAlign);\n }\n public setLayoutMode(layoutMode: StepperLayoutMode): void {\n StepperUtils.setLayoutMode(this._rootElement, layoutMode);\n this._applyToSteps(s => s.setAttribute(STEP_CONSTANTS.attributes.CLUSTERED, ''));\n }\n public setAlternativeState(alternative: boolean): void {\n StepperUtils.setAlternativeState(this._rootElement, alternative);\n this._applyToSteps(step => step.alternative = alternative);\n }\n\n public setVertical(vertical: boolean): void {\n toggleClass(this._rootElement, vertical, STEPPER_CONSTANTS.classes.VERTICAL);\n this._applyToSteps(step => step.vertical = vertical);\n }\n\n public setLinearState(linear: boolean): void {\n StepperUtils.setLinearState(this._rootElement, linear);\n }\n\n public removeRootListener(event: string, listener: EventListener): void {\n this._rootElement.removeEventListener('click', listener);\n }\n public addRootListener(event: string, listener: EventListener): void {\n this._rootElement.addEventListener(event, listener);\n }\n\n public setSelectedByIndex(index: number): void {\n this._applyToSteps(step => {\n if (step.selected && step.index !== index) {\n step.selected = false;\n }\n\n if (step.index === index) {\n step.selected = true;\n }\n });\n }\n\n public applyConfiguredSteps(steps: IStepComponent[]): void {\n this._component.querySelectorAll(STEP_CONSTANTS.elementName).forEach(n => {\n this._component.removeChild(n);\n });\n\n steps.forEach(s => this._component.appendChild(s));\n }\n\n public tryGetFocusedStep(): IStepComponent | undefined {\n let focusedStep: IStepComponent = undefined as any;\n const activeElement = getActiveElement();\n this._applyToSteps(step => {\n if (activeElement === getShadowElement(step, STEP_CONSTANTS.selectors.STEP)) {\n focusedStep = step;\n }\n });\n\n return focusedStep;\n }\n\n public getFocusedOrSelectedStep(): IStepComponent {\n let focusedStep = this.tryGetFocusedStep();\n\n if (!focusedStep) {\n focusedStep = this._getSteps()[0];\n focusedStep.focus();\n }\n\n return focusedStep;\n }\n\n public getStep(index: number): IStepComponent {\n let realIndex = 0;\n const steps = this._getSteps();\n\n if (index < 0) {\n return steps.item(steps.length - 1);\n }\n\n if (steps.length > index) {\n realIndex = index;\n }\n return steps.item(realIndex);\n }\n\n public toggleDisabled(disabled: boolean): void {\n this._applyToSteps(s => s.disabled = disabled);\n }\n\n public toggleRootClass(className: string, show: boolean): void{\n toggleClass(this._rootElement, show, className);\n }\n\n public isStepperFocused(): boolean {\n return this._rootElement.classList.contains(STEPPER_CONSTANTS.classes.FOCUSED);\n }\n\n public setStepsListener(event: string, listener: EventListener): void {\n this._applyToSteps(s => s.addEventListener(event, listener));\n }\n\n public removeStepsListener(event: string, listener: EventListener): void {\n this._applyToSteps(s => s.removeEventListener(event, listener));\n }\n\n private _applyToSteps(action: (step: IStepComponent, index?: number) => void): void {\n this._getSteps().forEach(action);\n }\n\n private _getSteps(): NodeListOf<IStepComponent> {\n return this._component.querySelectorAll<IStepComponent>(STEP_CONSTANTS.elementName);\n }\n}\n", "import { getEventPath, getShadowElement, ICustomElementFoundation, isDefined, isNumber, Platform } from '@tylertech/forge-core';\nimport { STEP_CONSTANTS } from '../step/step-constants';\nimport { StepperUtils } from '../core/stepper-utils';\nimport { IStepComponent } from '../step/step';\nimport { IStepperAdapter } from './stepper-adapter';\nimport { STEPPER_CONSTANTS, IStepConfiguration, StepperLayoutAlign, StepperLayoutMode } from './stepper-constants';\n\nexport interface IStepperFoundation extends ICustomElementFoundation {\n steps: IStepConfiguration[];\n selectedIndex: number;\n linear: boolean;\n alternative: boolean;\n layoutMode: StepperLayoutMode;\n layoutAlign: StepperLayoutAlign;\n}\n\nexport class StepperFoundation implements IStepperFoundation {\n private _steps: IStepConfiguration[] = [];\n private _selectedIndex = 0;\n private _linear = false;\n private _alternative = false;\n private _layoutMode: StepperLayoutMode = 'fixed';\n private _layoutAlign: StepperLayoutAlign = 'center';\n private _initialize = false;\n private _disabled: boolean;\n private _vertical: boolean;\n\n private _clickListener: EventListener;\n private _keyListener: EventListener;\n private _slotChangeListener: EventListener;\n private _stepFocusListener: () => void;\n private _stepBlurListener: () => void;\n private _stepExpandedContentFocusInListener: (event: CustomEvent<IStepComponent>) => void;\n private _stepExpandedContentFocusOutListener: (event: CustomEvent<IStepComponent>) => void;\n\n constructor(private _adapter: IStepperAdapter) {\n this._clickListener = event => this._handleClick(event);\n this._keyListener = event => this._onKeydown(event as KeyboardEvent);\n this._stepFocusListener = () => this._onStepFocus();\n this._stepBlurListener = () => this._onStepBlur();\n this._stepExpandedContentFocusInListener = event => this._onStepExpandedContentFocusIn(event);\n this._stepExpandedContentFocusOutListener = event => this._onStepExpandedContentFocusOut(event);\n this._slotChangeListener = event => this._onSlotChange(event as Event);\n }\n\n public initialize(): void {\n this._adapter.initializeAccessibility();\n this._adapter.assignIndices();\n this._adapter.setLinearState(this._linear);\n this._adapter.setAlternativeState(this._alternative);\n this._adapter.setLayoutAlign(this._layoutAlign);\n this._adapter.setLayoutMode(this._layoutMode);\n this._adapter.addRootListener('click', this._clickListener);\n this._adapter.addHostListener('keydown', this._keyListener);\n this._adapter.assignFirstLastStep();\n this._adapter.addRootListener(STEP_CONSTANTS.events.EXPANDED_CONTENT_FOCUSIN, this._stepExpandedContentFocusInListener);\n this._adapter.addRootListener(STEP_CONSTANTS.events.EXPANDED_CONTENT_FOCUSOUT, this._stepExpandedContentFocusOutListener);\n this._applySelectedIndex();\n this._patchBrowser();\n this._adapter.setStepsListener('blur', this._stepBlurListener);\n this._adapter.setStepsListener('focus', this._stepFocusListener);\n if (!this._initialize) {\n this._adapter.addSlotChangeListener(this._slotChangeListener);\n }\n\n this._initialize = true;\n }\n\n public disconnect(): void {\n this._adapter.removeRootListener('click', this._clickListener);\n this._adapter.removeHostListener('keydown', this._keyListener);\n this._adapter.removeSlotChangeListener(this._slotChangeListener);\n this._adapter.removeStepsListener('blur', this._stepBlurListener);\n this._adapter.removeStepsListener('focus', this._stepFocusListener);\n }\n\n /** The step configurations. */\n public get steps(): IStepConfiguration[] {\n return JSON.parse(JSON.stringify(this._steps));\n }\n public set steps(value: IStepConfiguration[]) {\n if (Array.isArray(value) && value.length > 0) {\n this._steps = [...value.map(s => ({ ...s }))];\n } else {\n this._steps = [];\n return;\n }\n\n this._renderConfiguration();\n }\n\n /** The active step index. */\n public get selectedIndex(): number {\n return this._selectedIndex;\n }\n public set selectedIndex(value: number) {\n if (!isDefined(value)) {\n value = 0;\n } else if (!isNumber(value)) {\n const v = Number(value);\n value = !isNaN(v) ? v : 0;\n }\n\n if (this._selectedIndex !== value) {\n this._selectedIndex = value;\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.SELECTED_INDEX, this._selectedIndex.toString());\n this._applySelectedIndex();\n }\n }\n\n /** Whether the stepper is linear or non-linear. */\n public get linear(): boolean {\n return this._linear;\n }\n public set linear(value: boolean) {\n value = Boolean(value);\n if (this._linear !== value) {\n this._linear = value;\n this._adapter.setLinearState(this._linear);\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.LINEAR, this._linear.toString());\n }\n }\n\n /** Whether the stepper uses the default or alternative label layout mode. */\n public get alternative(): boolean {\n return this._alternative;\n }\n public set alternative(value: boolean) {\n value = Boolean(value);\n if (this._alternative !== value) {\n this._alternative = value;\n this._adapter.setAlternativeState(this._alternative);\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.ALTERNATIVE, this._alternative.toString());\n }\n }\n\n /** The layout mode of the stepper. */\n public get layoutMode(): StepperLayoutMode {\n return this._layoutMode;\n }\n public set layoutMode(value: StepperLayoutMode) {\n if (!/^(fixed|clustered)$/.test(value)) {\n return;\n }\n\n if (this._layoutMode !== value) {\n this._layoutMode = value;\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.LAYOUT_MODE, this._layoutMode);\n this._adapter.setLayoutMode(this._layoutMode);\n }\n }\n\n /** The layout alignment of the stepper. */\n public get layoutAlign(): StepperLayoutAlign {\n return this._layoutAlign;\n }\n public set layoutAlign(value: StepperLayoutAlign) {\n if (!/^(left|center|right)$/.test(value)) {\n return;\n }\n\n if (this._layoutAlign !== value) {\n this._layoutAlign = value;\n this._adapter.setLayoutAlign(this._layoutAlign);\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.LAYOUT_ALIGN, this._layoutAlign);\n }\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n public set disabled(value: boolean) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._applyDisabled();\n }\n }\n\n public get vertical(): boolean {\n return this._vertical;\n }\n public set vertical(value: boolean) {\n if (value !== this._vertical) {\n this._vertical = value;\n this._applyVertical();\n this._adapter.toggleHostAttribute(STEPPER_CONSTANTS.attributes.VERTICAL, this._vertical);\n }\n }\n\n private _applyVertical(): void {\n this._adapter.setVertical(this._vertical);\n }\n\n private _applyDisabled(): void {\n if (this._disabled) {\n this._adapter.setHostAttribute(STEPPER_CONSTANTS.attributes.DISABLED, 'disabled');\n } else {\n this._adapter.removeHostAttribute(STEPPER_CONSTANTS.attributes.DISABLED);\n }\n\n this._adapter.toggleDisabled(this._disabled);\n }\n\n private _applySelectedIndex(): void {\n this._adapter.setSelectedByIndex(this._selectedIndex);\n }\n\n private _handleClick(event: Event): void {\n event.preventDefault();\n if (this._linear) {\n return;\n }\n const eventPath = getEventPath(event);\n const stepRoot = eventPath.find(el => el.classList && el.classList.contains(STEP_CONSTANTS.classes.STEP));\n const step = eventPath.find(el => el.localName === STEP_CONSTANTS.elementName) as IStepComponent | undefined;\n\n if (stepRoot && step && !step.selected && !step.disabled && this._adapter.emitHostEvent(STEP_CONSTANTS.events.SELECT, step.index, true, true)) {\n this._adapter.setSelected(step);\n this.selectedIndex = step.index;\n }\n }\n\n private _renderConfiguration(): void {\n const steps = StepperUtils.createSteps({\n steps: this._steps,\n selectedIndex: this._selectedIndex,\n alternative: this._alternative,\n layoutAlign: this._layoutAlign,\n layoutMode: this._layoutMode,\n linear: this._linear\n });\n\n this.disconnect();\n this._adapter.applyConfiguredSteps(steps);\n this.initialize();\n }\n\n private _onKeydown(event: KeyboardEvent): void {\n if (this._linear) {\n return;\n }\n\n const key = this._getKeyFromEvent(event);\n\n // If the expanded content is currently being focused, ignore stepper specific keys\n if (!this._adapter.isStepperFocused()) {\n return;\n }\n\n // Early exit if the event key isn't one of the keyboard navigation keys\n if (!key) {\n return;\n }\n\n if ([STEP_CONSTANTS.strings.HOME_KEY, STEP_CONSTANTS.strings.END_KEY, STEP_CONSTANTS.strings.ARROW_DOWN_KEY, STEPPER_CONSTANTS.strings.ARROW_UP_KEY].includes(key)) {\n event.preventDefault();\n }\n\n\n const step = this._vertical ? this._determineVerticalMoveTarget(key) : this._determineMoveTarget(key);\n\n if (step) {\n this._moveFocusTo(step);\n }\n }\n\n private _moveFocusTo(step: IStepComponent): void {\n getShadowElement(step, STEP_CONSTANTS.selectors.STEP).focus();\n }\n\n private _getKeyFromEvent(evt: KeyboardEvent): string {\n if (STEPPER_CONSTANTS.ACCEPTABLE_KEYS.includes(evt.key)) {\n return evt.key;\n }\n return STEPPER_CONSTANTS.KEYCODE_MAP[evt.keyCode];\n }\n\n private _determineMoveTarget(key: string): IStepComponent {\n const step = this._adapter.getFocusedOrSelectedStep();\n\n if (step) {\n switch (key) {\n case STEPPER_CONSTANTS.strings.ARROW_RIGHT_KEY:\n return this._adapter.getStep(step.index + 1);\n case STEPPER_CONSTANTS.strings.ARROW_LEFT_KEY:\n return this._adapter.getStep(step.index - 1);\n case STEPPER_CONSTANTS.strings.HOME_KEY:\n return this._adapter.getStep(0);\n case STEPPER_CONSTANTS.strings.END_KEY:\n return this._adapter.getLastStep();\n }\n }\n\n return step as IStepComponent;\n }\n\n private _determineVerticalMoveTarget(key: string): IStepComponent {\n const step = this._adapter.getFocusedOrSelectedStep();\n\n if (step) {\n switch (key) {\n case STEPPER_CONSTANTS.strings.ARROW_DOWN_KEY:\n return this._adapter.getStep(step.index + 1);\n case STEPPER_CONSTANTS.strings.ARROW_UP_KEY:\n return this._adapter.getStep(step.index - 1);\n case STEPPER_CONSTANTS.strings.HOME_KEY:\n return this._adapter.getStep(0);\n case STEPPER_CONSTANTS.strings.END_KEY:\n return this._adapter.getLastStep();\n }\n }\n\n return step as IStepComponent;\n }\n\n private _onSlotChange(event: Event): void {\n this.disconnect();\n this.initialize();\n }\n\n private _onStepExpandedContentFocusIn(event: CustomEvent<IStepComponent>): void {\n const step = this._adapter.getStep(event.detail.index + 1);\n if (step) {\n step.setStepTabIndex(0);\n }\n event.detail.setStepTabIndex(0);\n }\n\n private _onStepExpandedContentFocusOut(event: CustomEvent<IStepComponent>): void {\n const focusOutStep = event.target as IStepComponent;\n const step = this._adapter.getStep(focusOutStep.index + 1);\n\n if (step) {\n step.setStepTabIndex(-1);\n }\n\n focusOutStep.setStepTabIndex(-1);\n }\n\n private _onStepFocus(): void {\n this._adapter.toggleRootClass(STEPPER_CONSTANTS.classes.FOCUSED, true);\n }\n\n private _onStepBlur(): void {\n this._adapter.toggleRootClass(STEPPER_CONSTANTS.classes.FOCUSED, false);\n }\n\n private _patchBrowser(): void {\n if (new Platform().SAFARI()) {\n this._adapter.patchSafari();\n }\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, ensureChildren, FoundationProperty } from '@tylertech/forge-core';\nimport { BaseComponent, IBaseComponent } from '../../core/base/base-component';\nimport { IStepConfiguration, StepperLayoutAlign, StepperLayoutMode } from '../stepper/stepper-constants';\nimport { StepComponent } from '../step/step';\nimport { StepperAdapter } from './stepper-adapter';\nimport { STEPPER_CONSTANTS } from './stepper-constants';\nimport { StepperFoundation } from './stepper-foundation';\n\nconst template = '<template><div class=\\\"forge-stepper\\\" part=\\\"root\\\"><slot></slot></div></template>';\nconst styles = '.forge-stepper{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;white-space:nowrap;overflow:hidden}.forge-stepper:not(.forge-stepper--vertical) ::slotted(*){display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;position:relative;min-width:112px}.forge-stepper--fixed ::slotted(*){-webkit-box-flex:1;flex:1}.forge-stepper--alternative{-webkit-box-align:start;align-items:flex-start}.forge-stepper--alternative ::slotted(*){min-width:160px}.forge-stepper--align-left{-webkit-box-pack:start;justify-content:flex-start}.forge-stepper--align-center{-webkit-box-pack:center;justify-content:center}.forge-stepper--align-right{-webkit-box-pack:end;justify-content:flex-end}:host{display:block}:host([hidden]){display:none}:host([vertical]) .forge-stepper{display:unset;-webkit-box-align:unset;align-items:unset;white-space:unset;overflow:unset}';\n\nexport interface IStepperComponent extends IBaseComponent {\n steps: IStepConfiguration[];\n selectedIndex: number;\n linear: boolean;\n alternative: boolean;\n layoutMode: StepperLayoutMode;\n layoutAlign: StepperLayoutAlign;\n disabled: boolean;\n vertical: boolean;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-stepper': IStepperComponent;\n }\n}\n\n/**\n * The web component class behind the `<forge-stepper>` custom element.\n * \n * @tag forge-stepper\n */\n@CustomElement({\n name: STEPPER_CONSTANTS.elementName,\n dependencies: [StepComponent]\n})\nexport class StepperComponent extends BaseComponent implements IStepperComponent {\n public static get observedAttributes(): string[] {\n return [\n STEPPER_CONSTANTS.attributes.SELECTED_INDEX,\n STEPPER_CONSTANTS.attributes.LINEAR,\n STEPPER_CONSTANTS.attributes.ALTERNATIVE,\n STEPPER_CONSTANTS.attributes.LAYOUT_MODE,\n STEPPER_CONSTANTS.attributes.LAYOUT_ALIGN,\n STEPPER_CONSTANTS.attributes.DISABLED,\n STEPPER_CONSTANTS.attributes.VERTICAL\n ];\n }\n\n private _foundation: StepperFoundation;\n\n constructor() {\n super();\n attachShadowTemplate(this, template, styles);\n this._foundation = new StepperFoundation(new StepperAdapter(this));\n }\n\n public async connectedCallback(): Promise<void> {\n await ensureChildren(this);\n this._foundation.initialize();\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case STEPPER_CONSTANTS.attributes.SELECTED_INDEX:\n this.selectedIndex = Number(newValue) || 0;\n break;\n case STEPPER_CONSTANTS.attributes.LINEAR:\n this.linear = coerceBoolean(newValue);\n break;\n case STEPPER_CONSTANTS.attributes.ALTERNATIVE:\n this.alternative = coerceBoolean(newValue);\n break;\n case STEPPER_CONSTANTS.attributes.LAYOUT_MODE:\n this.layoutMode = newValue as StepperLayoutMode;\n break;\n case STEPPER_CONSTANTS.attributes.LAYOUT_ALIGN:\n this.layoutAlign = newValue as StepperLayoutAlign;\n break;\n case STEPPER_CONSTANTS.attributes.DISABLED:\n this.disabled = coerceBoolean(newValue);\n break;\n case STEPPER_CONSTANTS.attributes.VERTICAL:\n this.vertical = coerceBoolean(newValue);\n break;\n }\n }\n\n /** The step configurations. */\n @FoundationProperty()\n public steps: IStepConfiguration[];\n\n /** The active step index. */\n @FoundationProperty()\n public selectedIndex: number;\n\n /** Whether the stepper is linear or non-linear. */\n @FoundationProperty()\n public linear: boolean;\n\n /** Whether the stepper uses the default or alternative label layout mode. */\n @FoundationProperty()\n public alternative: boolean;\n\n /** The layout mode of the stepper. */\n @FoundationProperty()\n public layoutMode: StepperLayoutMode;\n\n /** The layout alignment of the stepper. */\n @FoundationProperty()\n public layoutAlign: StepperLayoutAlign;\n\n @FoundationProperty()\n public disabled: boolean;\n\n @FoundationProperty()\n public vertical: boolean;\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\nimport { StepperComponent } from './stepper';\n\nexport * from './stepper';\nexport * from './stepper-adapter';\nexport * from './stepper-constants';\nexport * from './stepper-foundation';\n\nexport function defineStepperComponent(): void {\n defineCustomElement(StepperComponent);\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/keyboard-shortcut/keyboard-shortcut-constants.ts", "../../src/keyboard-shortcut/keyboard-shortcut-adapter.ts", "../../src/keyboard-shortcut/keyboard-shortcut-utils.ts", "../../src/keyboard-shortcut/keyboard-shortcut-foundation.ts", "../../src/keyboard-shortcut/keyboard-shortcut.ts", "../../src/keyboard-shortcut/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}keyboard-shortcut`;\n\nconst attributes = {\n KEY: 'key',\n TARGET: 'target',\n GLOBAL: 'global',\n ALLOW_WHILE_TYPING: 'allow-while-typing',\n USE_CODE: 'use-code',\n PREVENT_DEFAULT: 'prevent-default',\n CAPTURE: 'capture',\n DISABLED: 'disabled'\n};\n\nconst selectors = {\n TOOLTIP: 'forge-tooltip'\n};\n\nconst events = {\n ACTIVATE: `forge-keyboard-shortcut-activate`\n};\n\nexport const KEYBOARD_SHORTCUT_CONSTANTS = {\n elementName,\n attributes,\n selectors,\n events\n};\n\nexport const textInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n];\n\nexport interface IKeyCombination {\n key: string;\n modifier?: string;\n}\n", "import { matchesSelectors } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base';\nimport { IKeyboardShortcutComponent } from './keyboard-shortcut';\nimport { KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';\n\nexport interface IKeyboardShortcutAdapter extends IBaseAdapter {\n hasTargetElement(): boolean;\n destroy(): void;\n addTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void;\n removeTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void;\n setHostStyles(): void;\n setTargetElement(target: string | undefined, global: boolean): void;\n}\n\nexport class KeyboardShortcutAdapter extends BaseAdapter<IKeyboardShortcutComponent> implements IKeyboardShortcutAdapter {\n private _targetElement: HTMLElement | null;\n\n constructor(public component: IKeyboardShortcutComponent) {\n super(component);\n }\n\n public hasTargetElement(): boolean {\n return !!this._targetElement;\n }\n\n public destroy(): void {\n this._targetElement = null;\n }\n\n /**\n * Adds an event listener to the target element.\n * @param type The event type.\n * @param listener The event listener.\n */\n public addTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void {\n this._targetElement?.addEventListener(type, listener, { capture });\n }\n\n /**\n * Removes an event listener from the target element.\n * @param type The event type.\n * @param listener The event listener.\n */\n public removeTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void {\n this._targetElement?.removeEventListener(type, listener, { capture });\n }\n\n /**\n * Sets the host element's display to none\n */\n public setHostStyles(): void {\n this.component.style.display = 'none';\n }\n\n /**\n * Sets the target element based on the provided CSS selector.\n * @param {string | undefined} selector The target element selector.\n * @param {boolean} global Whether to target the document element.\n */\n public setTargetElement(selector: string | undefined, global: boolean): void {\n if (global) {\n const doc = this._component.ownerDocument || document;\n this._targetElement = doc.documentElement;\n return;\n }\n \n if (selector) {\n if (this._component.parentElement) {\n if (matchesSelectors(this._component.parentElement, selector)) {\n this._targetElement = this._component.parentElement;\n return;\n }\n this._targetElement = this._component.parentElement.querySelector(selector);\n return;\n }\n } else {\n let sibling = this._component.previousElementSibling;\n while (sibling) {\n // Ignore <forge-tooltip> elements\n if (!matchesSelectors(sibling, KEYBOARD_SHORTCUT_CONSTANTS.selectors.TOOLTIP)) {\n this._targetElement = sibling as HTMLElement;\n return;\n }\n sibling = sibling.previousElementSibling;\n }\n this._targetElement = this._component.parentElement as HTMLElement;\n return;\n }\n }\n}\n", "import { textInputTypes, IKeyCombination } from './keyboard-shortcut-constants';\n\n/** Checks if an HTML element allows text input */\nexport function elementAcceptsTextInput(el: any): boolean {\n if (el instanceof HTMLInputElement) {\n return textInputTypes.includes(el.type);\n }\n return false;\n}\n\n/** Parses a string of key combinations into an array of keys and modifiers */\nexport function parseKeyCombinations(keys: string | null, useCode = false): IKeyCombination[] {\n if (!keys || !keys.length) {\n return [];\n }\n\n const separatedKeys = keys.split(' ').map(key => key.trim());\n return separatedKeys.map(key => {\n const keyParts = key.split('+');\n const fixedKey = useCode ? keyParts.pop() || '' : fixKey((keyParts.pop() || '').toLowerCase());\n const modifiers = keyParts.sort().join('');\n return { key: fixedKey, modifier: modifiers };\n });\n}\n\n/** Checks a keyboard event for a matching key combination */\nexport function matchKeyCombination(evt: KeyboardEvent, keyCombinations: IKeyCombination[], useCode = false): boolean {\n const eventKey = useCode ? evt.code : evt.key.toLowerCase();\n const modifierKeys = getModiferKeysString(evt);\n return keyCombinations.some(combination => eventKey === combination.key && modifierKeys === combination.modifier);\n}\n\n/** Returns an array of active modifier keys from a keyboard event */\nexport function getModiferKeysString(evt: KeyboardEvent): string {\n // Ensure the modifier keys are appended in alphabetical order\n let modifierString = '';\n if (evt.altKey) {\n modifierString += 'Alt';\n }\n if (evt.ctrlKey) {\n modifierString += 'Control';\n }\n if (evt.metaKey) {\n modifierString += 'Meta';\n }\n if (evt.shiftKey) {\n modifierString += 'Shift';\n }\n return modifierString;\n}\n\n/** Returns a reserved key character from its alias */\nexport function fixKey(key: string): string {\n switch (key) {\n case 'plus':\n return '+';\n case 'space':\n return ' ';\n default:\n return key;\n }\n}\n", "import { ICustomElementFoundation } from '@tylertech/forge-core';\n\nimport { IKeyboardShortcutAdapter } from './keyboard-shortcut-adapter';\nimport { IKeyCombination, KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';\nimport { elementAcceptsTextInput, matchKeyCombination, parseKeyCombinations } from './keyboard-shortcut-utils';\n\nexport interface IKeyboardShortcutFoundation extends ICustomElementFoundation {\n key: string | null;\n target: string;\n global: boolean;\n allowWhileTyping: boolean;\n preventDefault: boolean;\n capture: boolean;\n useCode: boolean;\n disabled: boolean;\n}\n\nexport class KeyboardShortcutFoundation implements IKeyboardShortcutFoundation {\n private _key: string | null;\n private _target: string;\n private _global = false;\n private _allowWhileTyping = false;\n private _preventDefault = true;\n private _capture = false;\n private _useCode = false;\n private _disabled = false;\n private _keyCombinations: IKeyCombination[];\n private _keyDownListener: (evt: KeyboardEvent) => void;\n \n constructor(private _adapter: IKeyboardShortcutAdapter) {\n this._keyDownListener = evt => this._onKeyDown(evt);\n }\n\n public initialize(): void {\n this._initializeTargetElement();\n this._adapter.setHostStyles();\n }\n\n public disconnect(): void {\n this._disconnectTargetElement();\n this._adapter.destroy();\n }\n\n private _initializeTargetElement(): void {\n this._disconnectTargetElement();\n this._adapter.setTargetElement(this._target, this._global);\n \n if (!this._adapter.hasTargetElement()) {\n throw new Error('Unable to locate the target element.');\n }\n\n if (!this._disabled) {\n this._connectTargetElement();\n }\n }\n\n private _connectTargetElement(): void {\n if (!this._adapter.hasTargetElement) {\n return;\n }\n this._adapter.addTargetEventListener('keydown', this._keyDownListener, this._capture);\n }\n\n private _disconnectTargetElement(): void {\n if (!this._adapter.hasTargetElement) {\n return;\n }\n this._adapter.removeTargetEventListener('keydown', this._keyDownListener, this._capture);\n }\n\n private _onKeyDown(evt: KeyboardEvent): void {\n // Here we may check if the target element is disabled, but disabled elements typically can't receive focus anyway\n\n // Ignore the event if it originates from a text field\n // TODO: bypass this and allow it if a modifier key is used?\n if (!this._allowWhileTyping && elementAcceptsTextInput(evt.target)) {\n return;\n }\n\n if (matchKeyCombination(evt, this._keyCombinations, this._useCode)) {\n if (this._preventDefault) {\n evt.preventDefault();\n }\n this._adapter.emitHostEvent(KEYBOARD_SHORTCUT_CONSTANTS.events.ACTIVATE, evt);\n // TODO: should this also provide a callback?\n }\n }\n\n /** Sets the key combinations. */\n private _setKeyCombinations(): void {\n this._keyCombinations = parseKeyCombinations(this._key, this._useCode);\n }\n\n /** Gets/sets the key binding. */\n public get key(): string | null {\n return this._key;\n }\n public set key(value: string| null) {\n if (this._key !== value) {\n this._key = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.KEY, !!this.key, this._key || '');\n this._setKeyCombinations();\n }\n // TODO: prevent multiple shortcuts with the same keys on an element (possible?)\n }\n\n /** Gets/sets the target element selector. */\n public get target(): string {\n return this._target;\n }\n public set target(value: string) {\n if (this._target !== value) {\n this._target = value;\n this._adapter.setHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.TARGET, this._target);\n if (this._adapter.isConnected) {\n this._initializeTargetElement();\n }\n }\n }\n\n /** Gets/sets the global listener state. */\n public get global(): boolean {\n return this._global;\n }\n public set global(value: boolean) {\n if (this._global !== value) {\n this._global = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.GLOBAL, this._global);\n if (this._adapter.isConnected) {\n this._initializeTargetElement();\n }\n }\n }\n\n /** Gets/sets whether the callback will be trigger while a text input has focus. */\n public get allowWhileTyping(): boolean {\n return this._allowWhileTyping;\n }\n public set allowWhileTyping(value: boolean) {\n if (this._allowWhileTyping !== value) {\n this._allowWhileTyping = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.ALLOW_WHILE_TYPING, this._allowWhileTyping);\n }\n }\n\n /** Gets/sets whether to prevent default on keyboard events. */\n public get preventDefault(): boolean {\n return this._preventDefault;\n }\n public set preventDefault(value: boolean) {\n if (this._preventDefault !== value) {\n this._preventDefault = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.PREVENT_DEFAULT, this._preventDefault);\n }\n }\n\n /** Gets/sets whether to use capturing on keyboard events. */\n public get capture(): boolean {\n return this._capture;\n }\n public set capture(value: boolean) {\n if (this._capture !== value) {\n this._disconnectTargetElement(); // We need to disconnect first to ensure our listener is removed properly based on capturing state\n this._capture = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.CAPTURE, this.capture);\n this._connectTargetElement();\n }\n }\n\n /** Gets/sets whether to match codes instead of keys on keyboard events. */\n public get useCode(): boolean{\n return this._useCode;\n }\n public set useCode(value: boolean) {\n if (this._useCode !== value) {\n this._useCode = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.USE_CODE, this._useCode);\n this._setKeyCombinations();\n }\n }\n\n /** Gets/sets whether the event will be emitted. */\n public get disabled(): boolean {\n return this._disabled;\n }\n public set disabled(value: boolean) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.DISABLED, this._disabled);\n\n if (this._disabled) {\n this._disconnectTargetElement();\n } else {\n this._connectTargetElement();\n }\n }\n }\n}\n", "import { coerceBoolean, CustomElement, FoundationProperty } from '@tylertech/forge-core';\n\nimport { KeyboardShortcutAdapter } from './keyboard-shortcut-adapter';\nimport { KeyboardShortcutFoundation } from './keyboard-shortcut-foundation';\nimport { KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\n\nexport interface IKeyboardShortcutComponent extends IBaseComponent {\n key: string | null;\n target: string;\n global: boolean;\n allowWhileTyping: boolean;\n preventDefault: boolean;\n capture: boolean;\n useCode: boolean;\n disabled: boolean;\n}\n\ndeclare global {\n // tslint:disable-next-line: interface-name\n interface HTMLElementTagNameMap {\n 'forge-keyboard-shortcut': IKeyboardShortcutComponent;\n }\n}\n\n@CustomElement({\n name: KEYBOARD_SHORTCUT_CONSTANTS.elementName\n})\nexport class KeyboardShortcutComponent extends BaseComponent implements IKeyboardShortcutComponent {\n public static get observedAttributes(): string[] {\n return [\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.KEY,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.TARGET,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.GLOBAL,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.ALLOW_WHILE_TYPING,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.PREVENT_DEFAULT,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.CAPTURE,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.USE_CODE,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.DISABLED\n ];\n }\n\n private _foundation: KeyboardShortcutFoundation;\n\n constructor() {\n super();\n this._foundation = new KeyboardShortcutFoundation(new KeyboardShortcutAdapter(this));\n }\n\n public connectedCallback(): void {\n this._foundation.initialize();\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.KEY:\n this.key = newValue;\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.TARGET:\n this.target = newValue;\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.GLOBAL:\n this.global = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.ALLOW_WHILE_TYPING:\n this.allowWhileTyping = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.PREVENT_DEFAULT:\n this.preventDefault = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.CAPTURE:\n this.capture = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.USE_CODE:\n this.useCode = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.DISABLED:\n this.disabled = coerceBoolean(newValue);\n break;\n }\n }\n\n /** Gets/sets the key binding. */\n @FoundationProperty()\n public key: string | null;\n\n /** Gets/sets the target element selector. */\n @FoundationProperty()\n public target: string;\n\n /** Gets/sets the global listener state. */\n @FoundationProperty()\n public global: boolean;\n\n /** Gets/sets whether the callback will be called while in a text entry field. */\n @FoundationProperty()\n public allowWhileTyping: boolean;\n \n /** Gets/sets whether to prevent default on keyboard events */\n @FoundationProperty()\n public preventDefault: boolean;\n \n /** Gets/sets whether to use capturing on keyboard events */\n @FoundationProperty()\n public capture: boolean;\n \n /** Gets/sets whether to match codes instead of keys on keyboard events */\n @FoundationProperty()\n public useCode: boolean;\n\n /** Gets/sets whether the callback will be called. */\n @FoundationProperty()\n public disabled: boolean;\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { KeyboardShortcutComponent } from './keyboard-shortcut';\n\nexport * from './keyboard-shortcut-adapter';\nexport * from './keyboard-shortcut-constants';\nexport * from './keyboard-shortcut-foundation';\nexport * from './keyboard-shortcut-utils';\nexport * from './keyboard-shortcut';\n\nexport function defineKeyboardShortcutComponent(): void {\n defineCustomElement(KeyboardShortcutComponent);\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}keyboard-shortcut`;\n\nconst attributes = {\n KEY: 'key',\n TARGET: 'target',\n GLOBAL: 'global',\n ALLOW_WHILE_TYPING: 'allow-while-typing',\n USE_CODE: 'use-code',\n PREVENT_DEFAULT: 'prevent-default',\n CAPTURE: 'capture',\n DISABLED: 'disabled'\n};\n\nconst selectors = {\n TOOLTIP: 'forge-tooltip'\n};\n\nconst events = {\n ACTIVATE: `forge-keyboard-shortcut-activate`\n};\n\nexport const KEYBOARD_SHORTCUT_CONSTANTS = {\n elementName,\n attributes,\n selectors,\n events\n};\n\nexport const textInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n];\n\nexport interface IKeyCombination {\n key: string;\n modifier?: string;\n}\n", "import { matchesSelectors } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base';\nimport { IKeyboardShortcutComponent } from './keyboard-shortcut';\nimport { KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';\n\nexport interface IKeyboardShortcutAdapter extends IBaseAdapter {\n hasTargetElement(): boolean;\n destroy(): void;\n addTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void;\n removeTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void;\n setHostStyles(): void;\n setTargetElement(target: string | undefined, global: boolean): void;\n}\n\nexport class KeyboardShortcutAdapter extends BaseAdapter<IKeyboardShortcutComponent> implements IKeyboardShortcutAdapter {\n private _targetElement: HTMLElement | null;\n\n constructor(public component: IKeyboardShortcutComponent) {\n super(component);\n }\n\n public hasTargetElement(): boolean {\n return !!this._targetElement;\n }\n\n public destroy(): void {\n this._targetElement = null;\n }\n\n /**\n * Adds an event listener to the target element.\n * @param type The event type.\n * @param listener The event listener.\n */\n public addTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void {\n this._targetElement?.addEventListener(type, listener, { capture });\n }\n\n /**\n * Removes an event listener from the target element.\n * @param type The event type.\n * @param listener The event listener.\n */\n public removeTargetEventListener(type: string, listener: (evt: KeyboardEvent) => void, capture?: boolean): void {\n this._targetElement?.removeEventListener(type, listener, { capture });\n }\n\n /**\n * Sets the host element's display to none\n */\n public setHostStyles(): void {\n this.component.style.display = 'none';\n }\n\n /**\n * Sets the target element based on the provided CSS selector.\n * @param {string | undefined} selector The target element selector.\n * @param {boolean} global Whether to target the document element.\n */\n public setTargetElement(selector: string | undefined, global: boolean): void {\n if (global) {\n const doc = this._component.ownerDocument || document;\n this._targetElement = doc.documentElement;\n return;\n }\n \n if (selector) {\n if (this._component.parentElement) {\n if (matchesSelectors(this._component.parentElement, selector)) {\n this._targetElement = this._component.parentElement;\n return;\n }\n this._targetElement = this._component.parentElement.querySelector(selector);\n return;\n }\n } else {\n let sibling = this._component.previousElementSibling;\n while (sibling) {\n // Ignore <forge-tooltip> elements\n if (!matchesSelectors(sibling, KEYBOARD_SHORTCUT_CONSTANTS.selectors.TOOLTIP)) {\n this._targetElement = sibling as HTMLElement;\n return;\n }\n sibling = sibling.previousElementSibling;\n }\n this._targetElement = this._component.parentElement as HTMLElement;\n return;\n }\n }\n}\n", "import { textInputTypes, IKeyCombination } from './keyboard-shortcut-constants';\n\n/** Checks if an HTML element allows text input */\nexport function elementAcceptsTextInput(el: any): boolean {\n if (el instanceof HTMLInputElement) {\n return textInputTypes.includes(el.type);\n }\n return false;\n}\n\n/** Parses a string of key combinations into an array of keys and modifiers */\nexport function parseKeyCombinations(keys: string | null, useCode = false): IKeyCombination[] {\n if (!keys || !keys.length) {\n return [];\n }\n\n const separatedKeys = keys.split(' ').map(key => key.trim());\n return separatedKeys.map(key => {\n const keyParts = key.split('+');\n const fixedKey = useCode ? keyParts.pop() || '' : fixKey((keyParts.pop() || '').toLowerCase());\n const modifiers = keyParts.sort().join('');\n return { key: fixedKey, modifier: modifiers };\n });\n}\n\n/** Checks a keyboard event for a matching key combination */\nexport function matchKeyCombination(evt: KeyboardEvent, keyCombinations: IKeyCombination[], useCode = false): boolean {\n const eventKey = useCode ? evt.code : evt.key.toLowerCase();\n const modifierKeys = getModiferKeysString(evt);\n return keyCombinations.some(combination => eventKey === combination.key && modifierKeys === combination.modifier);\n}\n\n/** Returns an array of active modifier keys from a keyboard event */\nexport function getModiferKeysString(evt: KeyboardEvent): string {\n // Ensure the modifier keys are appended in alphabetical order\n let modifierString = '';\n if (evt.altKey) {\n modifierString += 'Alt';\n }\n if (evt.ctrlKey) {\n modifierString += 'Control';\n }\n if (evt.metaKey) {\n modifierString += 'Meta';\n }\n if (evt.shiftKey) {\n modifierString += 'Shift';\n }\n return modifierString;\n}\n\n/** Returns a reserved key character from its alias */\nexport function fixKey(key: string): string {\n switch (key) {\n case 'plus':\n return '+';\n case 'space':\n return ' ';\n default:\n return key;\n }\n}\n", "import { ICustomElementFoundation } from '@tylertech/forge-core';\n\nimport { IKeyboardShortcutAdapter } from './keyboard-shortcut-adapter';\nimport { IKeyCombination, KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';\nimport { elementAcceptsTextInput, matchKeyCombination, parseKeyCombinations } from './keyboard-shortcut-utils';\n\nexport interface IKeyboardShortcutFoundation extends ICustomElementFoundation {\n key: string | null;\n target: string;\n global: boolean;\n allowWhileTyping: boolean;\n preventDefault: boolean;\n capture: boolean;\n useCode: boolean;\n disabled: boolean;\n}\n\nexport class KeyboardShortcutFoundation implements IKeyboardShortcutFoundation {\n private _key: string | null;\n private _target: string;\n private _global = false;\n private _allowWhileTyping = false;\n private _preventDefault = true;\n private _capture = false;\n private _useCode = false;\n private _disabled = false;\n private _keyCombinations: IKeyCombination[];\n private _keyDownListener: (evt: KeyboardEvent) => void;\n \n constructor(private _adapter: IKeyboardShortcutAdapter) {\n this._keyDownListener = evt => this._onKeyDown(evt);\n }\n\n public initialize(): void {\n this._initializeTargetElement();\n this._adapter.setHostStyles();\n }\n\n public disconnect(): void {\n this._disconnectTargetElement();\n this._adapter.destroy();\n }\n\n private _initializeTargetElement(): void {\n this._disconnectTargetElement();\n this._adapter.setTargetElement(this._target, this._global);\n \n if (!this._adapter.hasTargetElement()) {\n throw new Error('Unable to locate the target element.');\n }\n\n if (!this._disabled) {\n this._connectTargetElement();\n }\n }\n\n private _connectTargetElement(): void {\n if (!this._adapter.hasTargetElement) {\n return;\n }\n this._adapter.addTargetEventListener('keydown', this._keyDownListener, this._capture);\n }\n\n private _disconnectTargetElement(): void {\n if (!this._adapter.hasTargetElement) {\n return;\n }\n this._adapter.removeTargetEventListener('keydown', this._keyDownListener, this._capture);\n }\n\n private _onKeyDown(evt: KeyboardEvent): void {\n // Here we may check if the target element is disabled, but disabled elements typically can't receive focus anyway\n\n // Ignore the event if it originates from a text field\n // TODO: bypass this and allow it if a modifier key is used?\n if (!this._allowWhileTyping && elementAcceptsTextInput(evt.target)) {\n return;\n }\n\n if (matchKeyCombination(evt, this._keyCombinations, this._useCode)) {\n if (this._preventDefault) {\n evt.preventDefault();\n }\n this._adapter.emitHostEvent(KEYBOARD_SHORTCUT_CONSTANTS.events.ACTIVATE, evt);\n // TODO: should this also provide a callback?\n }\n }\n\n /** Sets the key combinations. */\n private _setKeyCombinations(): void {\n this._keyCombinations = parseKeyCombinations(this._key, this._useCode);\n }\n\n /** Gets/sets the key binding. */\n public get key(): string | null {\n return this._key;\n }\n public set key(value: string| null) {\n if (this._key !== value) {\n this._key = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.KEY, !!this.key, this._key || '');\n this._setKeyCombinations();\n }\n // TODO: prevent multiple shortcuts with the same keys on an element (possible?)\n }\n\n /** Gets/sets the target element selector. */\n public get target(): string {\n return this._target;\n }\n public set target(value: string) {\n if (this._target !== value) {\n this._target = value;\n this._adapter.setHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.TARGET, this._target);\n if (this._adapter.isConnected) {\n this._initializeTargetElement();\n }\n }\n }\n\n /** Gets/sets the global listener state. */\n public get global(): boolean {\n return this._global;\n }\n public set global(value: boolean) {\n if (this._global !== value) {\n this._global = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.GLOBAL, this._global);\n if (this._adapter.isConnected) {\n this._initializeTargetElement();\n }\n }\n }\n\n /** Gets/sets whether the callback will be trigger while a text input has focus. */\n public get allowWhileTyping(): boolean {\n return this._allowWhileTyping;\n }\n public set allowWhileTyping(value: boolean) {\n if (this._allowWhileTyping !== value) {\n this._allowWhileTyping = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.ALLOW_WHILE_TYPING, this._allowWhileTyping);\n }\n }\n\n /** Gets/sets whether to prevent default on keyboard events. */\n public get preventDefault(): boolean {\n return this._preventDefault;\n }\n public set preventDefault(value: boolean) {\n if (this._preventDefault !== value) {\n this._preventDefault = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.PREVENT_DEFAULT, this._preventDefault);\n }\n }\n\n /** Gets/sets whether to use capturing on keyboard events. */\n public get capture(): boolean {\n return this._capture;\n }\n public set capture(value: boolean) {\n if (this._capture !== value) {\n this._disconnectTargetElement(); // We need to disconnect first to ensure our listener is removed properly based on capturing state\n this._capture = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.CAPTURE, this.capture);\n this._connectTargetElement();\n }\n }\n\n /** Gets/sets whether to match codes instead of keys on keyboard events. */\n public get useCode(): boolean{\n return this._useCode;\n }\n public set useCode(value: boolean) {\n if (this._useCode !== value) {\n this._useCode = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.USE_CODE, this._useCode);\n this._setKeyCombinations();\n }\n }\n\n /** Gets/sets whether the event will be emitted. */\n public get disabled(): boolean {\n return this._disabled;\n }\n public set disabled(value: boolean) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._adapter.toggleHostAttribute(KEYBOARD_SHORTCUT_CONSTANTS.attributes.DISABLED, this._disabled);\n\n if (this._disabled) {\n this._disconnectTargetElement();\n } else {\n this._connectTargetElement();\n }\n }\n }\n}\n", "import { coerceBoolean, CustomElement, FoundationProperty } from '@tylertech/forge-core';\n\nimport { KeyboardShortcutAdapter } from './keyboard-shortcut-adapter';\nimport { KeyboardShortcutFoundation } from './keyboard-shortcut-foundation';\nimport { KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\n\nexport interface IKeyboardShortcutComponent extends IBaseComponent {\n key: string | null;\n target: string;\n global: boolean;\n allowWhileTyping: boolean;\n preventDefault: boolean;\n capture: boolean;\n useCode: boolean;\n disabled: boolean;\n}\n\ndeclare global {\n // tslint:disable-next-line: interface-name\n interface HTMLElementTagNameMap {\n 'forge-keyboard-shortcut': IKeyboardShortcutComponent;\n }\n}\n\n/**\n * The web component class behind the `<forge-keyboard-shortcut>` custom element.\n * \n * @tag forge-keyboard-shortcut\n */\n@CustomElement({\n name: KEYBOARD_SHORTCUT_CONSTANTS.elementName\n})\nexport class KeyboardShortcutComponent extends BaseComponent implements IKeyboardShortcutComponent {\n public static get observedAttributes(): string[] {\n return [\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.KEY,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.TARGET,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.GLOBAL,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.ALLOW_WHILE_TYPING,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.PREVENT_DEFAULT,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.CAPTURE,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.USE_CODE,\n KEYBOARD_SHORTCUT_CONSTANTS.attributes.DISABLED\n ];\n }\n\n private _foundation: KeyboardShortcutFoundation;\n\n constructor() {\n super();\n this._foundation = new KeyboardShortcutFoundation(new KeyboardShortcutAdapter(this));\n }\n\n public connectedCallback(): void {\n this._foundation.initialize();\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.KEY:\n this.key = newValue;\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.TARGET:\n this.target = newValue;\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.GLOBAL:\n this.global = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.ALLOW_WHILE_TYPING:\n this.allowWhileTyping = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.PREVENT_DEFAULT:\n this.preventDefault = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.CAPTURE:\n this.capture = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.USE_CODE:\n this.useCode = coerceBoolean(newValue);\n break;\n case KEYBOARD_SHORTCUT_CONSTANTS.attributes.DISABLED:\n this.disabled = coerceBoolean(newValue);\n break;\n }\n }\n\n /** Gets/sets the key binding. */\n @FoundationProperty()\n public key: string | null;\n\n /** Gets/sets the target element selector. */\n @FoundationProperty()\n public target: string;\n\n /** Gets/sets the global listener state. */\n @FoundationProperty()\n public global: boolean;\n\n /** Gets/sets whether the callback will be called while in a text entry field. */\n @FoundationProperty()\n public allowWhileTyping: boolean;\n \n /** Gets/sets whether to prevent default on keyboard events */\n @FoundationProperty()\n public preventDefault: boolean;\n \n /** Gets/sets whether to use capturing on keyboard events */\n @FoundationProperty()\n public capture: boolean;\n \n /** Gets/sets whether to match codes instead of keys on keyboard events */\n @FoundationProperty()\n public useCode: boolean;\n\n /** Gets/sets whether the callback will be called. */\n @FoundationProperty()\n public disabled: boolean;\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { KeyboardShortcutComponent } from './keyboard-shortcut';\n\nexport * from './keyboard-shortcut-adapter';\nexport * from './keyboard-shortcut-constants';\nexport * from './keyboard-shortcut-foundation';\nexport * from './keyboard-shortcut-utils';\nexport * from './keyboard-shortcut';\n\nexport function defineKeyboardShortcutComponent(): void {\n defineCustomElement(KeyboardShortcutComponent);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/popup/popup-constants.ts", "../../src/popup/popup-adapter.ts", "../../src/popup/popup-foundation.ts", "../../src/popup/popup.ts", "../../src/popup/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { PositionPlacement } from '@tylertech/forge-core';\nimport { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}popup`;\n\nconst attributes = {\n CONTAINER: 'forge-popup',\n OPEN: 'open',\n PLACEMENT: 'placement',\n MANAGE_FOCUS: 'manage-focus',\n ANIMATION_TYPE: 'animation-type',\n STATIC: 'static',\n HIDE_WHEN_CLIPPED: 'hide-when-clipped',\n HOST: 'forge-popup-host',\n INITIAL_FOCUS: 'forge-popup-focus'\n};\n\nconst classes = {\n OPEN: 'forge-popup--open',\n OPENING: 'forge-popup--opening',\n CLOSED: 'forge-popup--closed',\n SELECT: 'forge-popup--select'\n};\n\nconst selectors = {\n HOST: `.forge-popup-host, [${attributes.HOST}]`,\n CONTAINER: '.forge-popup',\n INITIAL_FOCUS: `[${attributes.INITIAL_FOCUS}]`\n};\n\nconst events = {\n OPEN: `${elementName}-open`,\n CLOSE: `${elementName}-close`,\n POSITION: `${elementName}-position`,\n BLUR: `${elementName}-blur`\n};\n\nconst numbers = {\n ANIMATION_DURATION: 120\n};\n\nexport const POPUP_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n events,\n numbers\n};\n\nexport interface IPopupPosition {\n x: number;\n y: number;\n}\n\nexport type PopupPlacement = PositionPlacement;\n\nexport enum PopupAnimationType {\n None = 'none',\n Menu = 'menu',\n Dropdown = 'dropdown'\n}\n\nexport interface IPopupPositionEventData extends IPopupPosition {\n visibility: 'visible' | 'hidden';\n}\n\nexport type PopupStateCallback = () => boolean | void | Promise<boolean | void>;\n", "import { addClass, closestElement, emitEvent, getShadowElement, IPositionElementConfig, notChildEventListener, positionElementAsync, removeClass, removeElement, deepQuerySelectorAll, getActiveElement } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { IPopupComponent } from './popup';\nimport { IPopupPositionEventData, POPUP_CONSTANTS } from './popup-constants';\n\nexport interface IPopupAdapter extends IBaseAdapter {\n setAttribute(attribute: string, value: string, element?: HTMLElement): void;\n removeAttribute(attribute: string, element?: HTMLElement): void;\n positionPopup(): void;\n addPopup(targetElement: HTMLElement, manageFocus: boolean): void;\n removePopup(manageFocus: boolean): void;\n manageWindowEvents(add: boolean): void;\n dispatchEvent(type: string, data?: any, bubbles?: boolean, cancellable?: boolean): boolean;\n addClass(classes: string | string[]): void;\n removeClass(classes: string | string[]): void;\n setAnimationEndListener(listener: (evt: TransitionEvent) => void, classes?: string | string[]): void;\n removeEventListener(type: string, listener: (evt: Event) => void): void;\n setBlurListener(listener: () => void): () => void;\n trySetInitialFocus(): void;\n}\n\nexport class PopupAdapter extends BaseAdapter<IPopupComponent> implements IPopupAdapter {\n private _windowEventCallback?: (evt: Event) => void;\n private _previouslyFocusedElement?: HTMLElement;\n private _hostElement?: HTMLElement;\n private _rootElement: HTMLElement;\n\n constructor(component: IPopupComponent) {\n super(component);\n this._rootElement = getShadowElement(component, POPUP_CONSTANTS.selectors.CONTAINER);\n }\n\n public setAttribute(attribute: string, value: string, element?: HTMLElement): void {\n if (element) {\n element.setAttribute(attribute, value);\n } else {\n this._component.setAttribute(attribute, value);\n }\n }\n\n public removeAttribute(attribute: string, element?: HTMLElement): void {\n if (element) {\n element.removeAttribute(attribute);\n } else {\n this._component.removeAttribute(attribute);\n }\n }\n\n public async positionPopup(): Promise<void> {\n const config: IPositionElementConfig = {\n element: this._component,\n targetElement: this._component.targetElement,\n placement: this._component.placement,\n hide: this._component.hideWhenClipped\n };\n if (this._component.offset) {\n config.offset = this._component.offset;\n }\n const data: IPopupPositionEventData = await positionElementAsync(config);\n emitEvent(this._component, POPUP_CONSTANTS.events.POSITION, data);\n }\n\n public addPopup(targetElement: HTMLElement, manageFocus: boolean): void {\n this._component.setAttribute('tabindex', '-1');\n this._component.setAttribute(POPUP_CONSTANTS.attributes.HOST, '');\n const hostDocument = targetElement.ownerDocument || document;\n this._hostElement = (closestElement(POPUP_CONSTANTS.selectors.HOST, targetElement) as HTMLElement) || hostDocument.body;\n this._hostElement.appendChild(this._component);\n this.positionPopup();\n\n if (manageFocus) {\n this._previouslyFocusedElement = getActiveElement() as HTMLElement;\n this._component.focus();\n }\n }\n\n public removePopup(manageFocus: boolean): void {\n removeElement(this._component);\n\n if (manageFocus) {\n window.requestAnimationFrame(() => {\n if (this._previouslyFocusedElement) {\n const activeElement = getActiveElement();\n if (!activeElement || activeElement === document.body) {\n this._previouslyFocusedElement.focus();\n }\n this._previouslyFocusedElement = undefined;\n }\n });\n }\n\n this._hostElement = undefined;\n }\n\n public manageWindowEvents(add = false): void {\n if (add) {\n this._windowEventCallback = evt => this._windowInteraction(evt);\n window.addEventListener('scroll', this._windowEventCallback, true);\n window.addEventListener('resize', this._windowEventCallback, true);\n } else {\n if (this._windowEventCallback) {\n window.removeEventListener('scroll', this._windowEventCallback, true);\n window.removeEventListener('resize', this._windowEventCallback, true);\n this._windowEventCallback = undefined;\n }\n }\n }\n\n public dispatchEvent(type: string, data?: any, bubbles?: boolean, cancelable?: boolean): boolean {\n if (this._component.targetElement) {\n return !emitEvent(this._component.targetElement, type, data, bubbles, cancelable);\n }\n return false;\n }\n\n public addClass(classes: string | string[]): void {\n addClass(classes, this._rootElement);\n }\n\n public removeClass(classes: string | string[]): void {\n removeClass(classes, this._rootElement);\n }\n\n public setAnimationEndListener(listener: (evt: TransitionEvent) => void, classes?: string | string[]): void {\n window.requestAnimationFrame(() => {\n if (classes && classes.length) {\n addClass(classes, this._rootElement);\n }\n this._rootElement.addEventListener('transitionend', listener);\n });\n }\n\n public removeEventListener(type: string, listener: (evt: Event) => void): void {\n this._rootElement.removeEventListener(type, listener);\n }\n\n public setBlurListener(listener: () => void): () => void {\n return notChildEventListener(this._component, activeElement => {\n if (!this._component.contains(activeElement)) {\n listener();\n }\n }, true );\n }\n\n public trySetInitialFocus(): void {\n window.requestAnimationFrame(() => {\n const elements = deepQuerySelectorAll(this._component, POPUP_CONSTANTS.selectors.INITIAL_FOCUS);\n if (elements && elements.length) {\n const initialElement = elements[elements.length - 1] as HTMLElement;\n initialElement.focus();\n }\n });\n }\n\n private _windowInteraction(evt: Event): void {\n if (!this._component.open) {\n return;\n }\n\n switch (evt.type) {\n case 'scroll':\n case 'resize':\n this.positionPopup();\n break;\n default:\n break;\n }\n }\n}\n", "import { ICustomElementFoundation, isElement } from '@tylertech/forge-core';\nimport { IPopupAdapter } from './popup-adapter';\nimport { IPopupPosition, PopupAnimationType, PopupPlacement, PopupStateCallback, POPUP_CONSTANTS as constants, POPUP_CONSTANTS } from './popup-constants';\n\nexport interface IPopupFoundation extends ICustomElementFoundation {\n targetElement: HTMLElement;\n placement: PopupPlacement;\n open: boolean;\n manageFocus: boolean;\n animationType: PopupAnimationType;\n static: boolean;\n offset: IPopupPosition;\n hideWhenClipped: boolean;\n position(): void;\n openCallback: PopupStateCallback;\n closeCallback: PopupStateCallback;\n}\n\nexport class PopupFoundation implements IPopupFoundation {\n private _targetElement: HTMLElement;\n private _placement: PopupPlacement = 'bottom-start';\n private _open = false;\n private _manageFocus = false;\n private _animationType = PopupAnimationType.None;\n private _static = false;\n private _offset?: IPopupPosition;\n private _hideWhenClipped = false;\n private _destroyBlurListener: (() => void) | undefined;\n private _openCallback: PopupStateCallback;\n private _closeCallback: PopupStateCallback;\n private _blurListener: () => void;\n\n constructor(private _adapter: IPopupAdapter) {\n this._blurListener = () => this._onBlur();\n }\n\n public disconnect(): void {\n if (this.open) {\n this.open = false;\n }\n }\n\n private _openPopup(): void {\n if (this._animationType !== PopupAnimationType.None) {\n this._applyOpenAnimation();\n\n if (this._animationType === PopupAnimationType.Dropdown) {\n this._adapter.addClass(POPUP_CONSTANTS.classes.SELECT);\n }\n } else {\n this._adapter.addClass(POPUP_CONSTANTS.classes.OPEN);\n }\n\n this._adapter.setAttribute(POPUP_CONSTANTS.attributes.OPEN, '');\n this._adapter.addPopup(this.targetElement, this._manageFocus);\n this._adapter.trySetInitialFocus();\n\n if (this._destroyBlurListener) {\n this._destroyBlurListener();\n }\n\n if (!this._static) {\n this._destroyBlurListener = this._adapter.setBlurListener(this._blurListener);\n }\n\n this._adapter.manageWindowEvents(true);\n this._adapter.dispatchEvent(constants.events.OPEN);\n }\n\n private _closePopup(): void {\n if (this._destroyBlurListener) {\n this._destroyBlurListener();\n this._destroyBlurListener = undefined;\n }\n\n if (this._animationType !== PopupAnimationType.None) {\n this._applyCloseAnimation();\n } else {\n this._destroyPopup();\n }\n }\n\n private _destroyPopup(): void {\n this._adapter.manageWindowEvents(false);\n this._adapter.removePopup(this._manageFocus);\n this._adapter.dispatchEvent(constants.events.CLOSE);\n this._adapter.removeAttribute(POPUP_CONSTANTS.attributes.OPEN);\n }\n\n private _applyOpenAnimation(): void {\n switch (this._animationType) {\n case PopupAnimationType.Dropdown:\n case PopupAnimationType.Menu:\n this._adapter.addClass(POPUP_CONSTANTS.classes.OPENING);\n const transitionEndListener = (evt: TransitionEvent): void => {\n if (evt.propertyName === 'transform') {\n this._adapter.removeClass(POPUP_CONSTANTS.classes.OPENING);\n this._adapter.removeEventListener('transitionend', transitionEndListener);\n }\n };\n this._adapter.setAnimationEndListener(transitionEndListener, POPUP_CONSTANTS.classes.OPEN);\n break;\n }\n }\n\n private _applyCloseAnimation(): void {\n switch (this._animationType) {\n case PopupAnimationType.Dropdown:\n case PopupAnimationType.Menu:\n this._adapter.removeClass(POPUP_CONSTANTS.classes.OPEN);\n this._adapter.addClass(POPUP_CONSTANTS.classes.CLOSED);\n const transitionEndListener = (evt: TransitionEvent): void => {\n if (evt.propertyName === 'opacity') {\n if (fallbackTimer) {\n clearTimeout(fallbackTimer);\n }\n this._destroyPopup();\n }\n };\n this._adapter.setAnimationEndListener(transitionEndListener);\n const fallbackTimer = setTimeout(() => this._destroyPopup(), POPUP_CONSTANTS.numbers.ANIMATION_DURATION);\n break;\n }\n }\n\n private _onBlur(): void {\n const cancelled = this._adapter.dispatchEvent(POPUP_CONSTANTS.events.BLUR, undefined, true, true);\n if (!cancelled) {\n this.open = false;\n }\n }\n\n private _applyOpen(): void {\n if (this._open) {\n if (!this.targetElement || !isElement(this.targetElement)) {\n throw new Error('targetElement on Popup component must be an HTMLElement');\n }\n\n if (typeof this._openCallback === 'function') {\n this._executeOpenCallback();\n } else {\n this._openPopup();\n }\n } else {\n if (typeof this._closeCallback === 'function') {\n this._executeCloseCallback();\n } else {\n this._closePopup();\n }\n }\n }\n\n private async _executeOpenCallback(): Promise<void> {\n try {\n if (await Promise.resolve(this._openCallback()) !== false) {\n this._openPopup();\n } else {\n this._open = false;\n }\n } catch (e) {\n this._open = false;\n }\n }\n\n private async _executeCloseCallback(): Promise<void> {\n try {\n if (await Promise.resolve(this._closeCallback()) !== false) {\n this._closePopup();\n } else {\n this._open = true;\n }\n } catch (e) {\n this._open = true;\n }\n }\n\n public get targetElement(): HTMLElement {\n return this._targetElement;\n }\n public set targetElement(element: HTMLElement) {\n if (!element || !isElement(element)) {\n throw new Error('targetElement on Popup component must be an HTMLElement');\n }\n this._targetElement = element;\n }\n\n public get placement(): PopupPlacement {\n return this._placement;\n }\n public set placement(value: PopupPlacement) {\n if (this._placement !== value) {\n this._placement = value || 'bottom-start';\n this._adapter.setAttribute(POPUP_CONSTANTS.attributes.PLACEMENT, this._placement);\n }\n }\n\n public get open(): boolean {\n return this._open;\n }\n public set open(value: boolean) {\n value = Boolean(value);\n if (this._open !== value) {\n this._open = value;\n this._applyOpen();\n }\n }\n\n public get manageFocus(): boolean {\n return this._manageFocus;\n }\n public set manageFocus(value: boolean) {\n if (this._manageFocus !== value) {\n this._manageFocus = value;\n }\n }\n\n public get animationType(): PopupAnimationType {\n return this._animationType;\n }\n public set animationType(value: PopupAnimationType) {\n if (this._animationType !== value) {\n this._animationType = value;\n }\n }\n\n public get static(): boolean {\n return this._static;\n }\n public set static(value: boolean) {\n if (this._static !== value) {\n this._static = value;\n if (this._static && this._destroyBlurListener) {\n this._destroyBlurListener();\n this._destroyBlurListener = undefined;\n }\n }\n }\n\n public get hideWhenClipped(): boolean {\n return this._hideWhenClipped;\n }\n public set hideWhenClipped(value: boolean) {\n if (this._hideWhenClipped !== value) {\n this._hideWhenClipped = value;\n }\n }\n\n public get offset(): IPopupPosition {\n return this._offset ?? { x: 0, y: 0 };\n }\n public set offset(value: IPopupPosition) {\n if (!value) {\n this._offset = undefined;\n } else {\n this._offset = {\n x: value.x ?? 0,\n y: value.y ?? 0\n };\n }\n if (this._open) {\n this._adapter.positionPopup();\n }\n }\n\n public get openCallback(): PopupStateCallback {\n return this._openCallback;\n }\n public set openCallback(callback: PopupStateCallback) {\n this._openCallback = callback;\n }\n\n public get closeCallback(): PopupStateCallback {\n return this._closeCallback;\n }\n public set closeCallback(callback: PopupStateCallback) {\n this._closeCallback = callback;\n }\n\n public position(): void {\n this._adapter.positionPopup();\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, FoundationProperty, isDefined } from '@tylertech/forge-core';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\nimport { PopupAdapter } from './popup-adapter';\nimport { IPopupPosition, IPopupPositionEventData, PopupAnimationType, PopupPlacement, PopupStateCallback, POPUP_CONSTANTS } from './popup-constants';\nimport { PopupFoundation } from './popup-foundation';\n\n\nconst template = '<template><div class=\\\"forge-popup\\\" part=\\\"root\\\"><slot></slot></div></template>';\nconst styles = '.forge-popup{min-width:112px;min-width:var(--min-width,112px);background-color:#fff;background-color:var(--forge-theme-elevated-surface,#fff);-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);-webkit-box-shadow:var(--forge-theme-popup-elevation,0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12));box-shadow:var(--forge-theme-popup-elevation,0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12));color:#000;color:var(--mdc-theme-on-surface,#000);border-radius:4px;border-radius:var(--mdc-shape-medium,4px);display:none;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:100%;margin:0;padding:0;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 24px 0;transform-origin:50% 24px 0;opacity:0;will-change:transform,opacity;-webkit-transition:opacity 120ms linear,-webkit-transform 120ms cubic-bezier(0, 0, .2, 1);transition:opacity 120ms linear,-webkit-transform 120ms cubic-bezier(0, 0, .2, 1);transition:opacity 120ms linear,transform 120ms cubic-bezier(0, 0, .2, 1);transition:opacity 120ms linear,transform 120ms cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms cubic-bezier(0, 0, .2, 1)}.forge-popup::-webkit-scrollbar{width:16px;width:var(--forge-scrollbar-width,16px);height:16px;height:var(--forge-scrollbar-height,16px)}.forge-popup::-webkit-scrollbar-corner{background-color:#f0f0f0;background-color:var(--forge-theme-scrollbar-track,#f0f0f0)}.forge-popup::-webkit-scrollbar-track{background-color:#f0f0f0;background-color:var(--forge-theme-scrollbar-track,#f0f0f0)}.forge-popup::-webkit-scrollbar-track:hover{background-color:#ececec;background-color:var(--forge-theme-scrollbar-track-hover,#ececec)}.forge-popup::-webkit-scrollbar-thumb{background-color:#bdbdbd;background-color:var(--forge-theme-scrollbar-thumb,#bdbdbd);height:32px;height:var(--forge-scrollbar-min-height,32px);width:32px;width:var(--forge-scrollbar-min-width,32px);border-radius:10px;border-radius:var(--forge-scrollbar-border-radius,10px);border-width:3px;border-width:var(--forge-scrollbar-border-width,3px);border-style:solid;border-color:transparent;background-clip:content-box}.forge-popup::-webkit-scrollbar-thumb:hover{background-color:#9e9e9e;background-color:var(--forge-theme-scrollbar-thumb-hover,#9e9e9e)}.forge-popup--opening{display:block;-webkit-transform:scale(.8);transform:scale(.8);opacity:0}.forge-popup--closed{display:block;opacity:0;-webkit-transition:opacity 120ms linear;transition:opacity 120ms linear}.forge-popup--open{display:block;-webkit-transform:scale(1);transform:scale(1);opacity:1}.forge-popup--select{border-top-left-radius:0;border-top-right-radius:0;max-height:256px;overflow-y:auto}:host{z-index:10;z-index:var(--forge-z-index-popup,10);border-radius:4px;border-radius:var(--mdc-shape-medium,4px);display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;position:absolute;overflow:visible}:host([hidden]){display:none}';\n\nexport interface IPopupComponent extends IBaseComponent {\n targetElement: HTMLElement;\n placement: PopupPlacement;\n open: boolean;\n manageFocus: boolean;\n animationType: PopupAnimationType;\n static: boolean;\n offset: IPopupPosition;\n hideWhenClipped: boolean;\n position(): void;\n openCallback: PopupStateCallback;\n closeCallback: PopupStateCallback;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-popup': IPopupComponent;\n }\n\n interface HTMLElementEventMap {\n 'forge-popup-open': CustomEvent<void>;\n 'forge-popup-close': CustomEvent<void>;\n 'forge-popup-position': CustomEvent<IPopupPositionEventData>;\n 'forge-popup-blur': CustomEvent<void>;\n }\n}\n\n@CustomElement({\n name: POPUP_CONSTANTS.elementName\n})\nexport class PopupComponent extends BaseComponent implements IPopupComponent {\n private _foundation: PopupFoundation;\n\n public static get observedAttributes(): string[] {\n return [\n POPUP_CONSTANTS.attributes.OPEN,\n POPUP_CONSTANTS.attributes.PLACEMENT,\n POPUP_CONSTANTS.attributes.MANAGE_FOCUS,\n POPUP_CONSTANTS.attributes.ANIMATION_TYPE,\n POPUP_CONSTANTS.attributes.STATIC,\n POPUP_CONSTANTS.attributes.HIDE_WHEN_CLIPPED\n ];\n }\n\n constructor() {\n super();\n attachShadowTemplate(this, template, styles);\n this._foundation = new PopupFoundation(new PopupAdapter(this));\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case POPUP_CONSTANTS.attributes.OPEN:\n this.open = isDefined(newValue);\n break;\n case POPUP_CONSTANTS.attributes.PLACEMENT:\n this.placement = newValue as PopupPlacement;\n break;\n case POPUP_CONSTANTS.attributes.MANAGE_FOCUS:\n this.manageFocus = coerceBoolean(newValue);\n break;\n case POPUP_CONSTANTS.attributes.ANIMATION_TYPE:\n this.animationType = newValue as PopupAnimationType;\n break;\n case POPUP_CONSTANTS.attributes.STATIC:\n this.static = coerceBoolean(newValue);\n break;\n case POPUP_CONSTANTS.attributes.HIDE_WHEN_CLIPPED:\n this.hideWhenClipped = coerceBoolean(newValue);\n break;\n }\n }\n\n @FoundationProperty()\n public targetElement: HTMLElement;\n\n @FoundationProperty()\n public placement: PopupPlacement;\n\n @FoundationProperty()\n public open: boolean;\n\n @FoundationProperty()\n public manageFocus: boolean;\n\n @FoundationProperty()\n public animationType: PopupAnimationType;\n\n @FoundationProperty()\n public static: boolean;\n\n @FoundationProperty()\n public hideWhenClipped: boolean;\n\n @FoundationProperty()\n public openCallback: PopupStateCallback;\n\n @FoundationProperty()\n public closeCallback: PopupStateCallback;\n\n @FoundationProperty()\n public offset: IPopupPosition;\n\n public position(): void {\n this._foundation.position();\n }\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { PopupComponent } from './popup';\n\nexport * from './popup-adapter';\nexport * from './popup-constants';\nexport * from './popup-foundation';\nexport * from './popup';\n\nexport function definePopupComponent(): void {\n defineCustomElement(PopupComponent);\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { PositionPlacement } from '@tylertech/forge-core';\nimport { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}popup`;\n\nconst attributes = {\n CONTAINER: 'forge-popup',\n OPEN: 'open',\n PLACEMENT: 'placement',\n MANAGE_FOCUS: 'manage-focus',\n ANIMATION_TYPE: 'animation-type',\n STATIC: 'static',\n HIDE_WHEN_CLIPPED: 'hide-when-clipped',\n HOST: 'forge-popup-host',\n INITIAL_FOCUS: 'forge-popup-focus'\n};\n\nconst classes = {\n OPEN: 'forge-popup--open',\n OPENING: 'forge-popup--opening',\n CLOSED: 'forge-popup--closed',\n SELECT: 'forge-popup--select'\n};\n\nconst selectors = {\n HOST: `.forge-popup-host, [${attributes.HOST}]`,\n CONTAINER: '.forge-popup',\n INITIAL_FOCUS: `[${attributes.INITIAL_FOCUS}]`\n};\n\nconst events = {\n OPEN: `${elementName}-open`,\n CLOSE: `${elementName}-close`,\n POSITION: `${elementName}-position`,\n BLUR: `${elementName}-blur`\n};\n\nconst numbers = {\n ANIMATION_DURATION: 120\n};\n\nexport const POPUP_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n events,\n numbers\n};\n\nexport interface IPopupPosition {\n x: number;\n y: number;\n}\n\nexport type PopupPlacement = PositionPlacement;\n\nexport enum PopupAnimationType {\n None = 'none',\n Menu = 'menu',\n Dropdown = 'dropdown'\n}\n\nexport interface IPopupPositionEventData extends IPopupPosition {\n visibility: 'visible' | 'hidden';\n}\n\nexport type PopupStateCallback = () => boolean | void | Promise<boolean | void>;\n", "import { addClass, closestElement, emitEvent, getShadowElement, IPositionElementConfig, notChildEventListener, positionElementAsync, removeClass, removeElement, deepQuerySelectorAll, getActiveElement } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { IPopupComponent } from './popup';\nimport { IPopupPositionEventData, POPUP_CONSTANTS } from './popup-constants';\n\nexport interface IPopupAdapter extends IBaseAdapter {\n setAttribute(attribute: string, value: string, element?: HTMLElement): void;\n removeAttribute(attribute: string, element?: HTMLElement): void;\n positionPopup(): void;\n addPopup(targetElement: HTMLElement, manageFocus: boolean): void;\n removePopup(manageFocus: boolean): void;\n manageWindowEvents(add: boolean): void;\n dispatchEvent(type: string, data?: any, bubbles?: boolean, cancellable?: boolean): boolean;\n addClass(classes: string | string[]): void;\n removeClass(classes: string | string[]): void;\n setAnimationEndListener(listener: (evt: TransitionEvent) => void, classes?: string | string[]): void;\n removeEventListener(type: string, listener: (evt: Event) => void): void;\n setBlurListener(listener: () => void): () => void;\n trySetInitialFocus(): void;\n}\n\nexport class PopupAdapter extends BaseAdapter<IPopupComponent> implements IPopupAdapter {\n private _windowEventCallback?: (evt: Event) => void;\n private _previouslyFocusedElement?: HTMLElement;\n private _hostElement?: HTMLElement;\n private _rootElement: HTMLElement;\n\n constructor(component: IPopupComponent) {\n super(component);\n this._rootElement = getShadowElement(component, POPUP_CONSTANTS.selectors.CONTAINER);\n }\n\n public setAttribute(attribute: string, value: string, element?: HTMLElement): void {\n if (element) {\n element.setAttribute(attribute, value);\n } else {\n this._component.setAttribute(attribute, value);\n }\n }\n\n public removeAttribute(attribute: string, element?: HTMLElement): void {\n if (element) {\n element.removeAttribute(attribute);\n } else {\n this._component.removeAttribute(attribute);\n }\n }\n\n public async positionPopup(): Promise<void> {\n const config: IPositionElementConfig = {\n element: this._component,\n targetElement: this._component.targetElement,\n placement: this._component.placement,\n hide: this._component.hideWhenClipped\n };\n if (this._component.offset) {\n config.offset = this._component.offset;\n }\n const data: IPopupPositionEventData = await positionElementAsync(config);\n emitEvent(this._component, POPUP_CONSTANTS.events.POSITION, data);\n }\n\n public addPopup(targetElement: HTMLElement, manageFocus: boolean): void {\n this._component.setAttribute('tabindex', '-1');\n this._component.setAttribute(POPUP_CONSTANTS.attributes.HOST, '');\n const hostDocument = targetElement.ownerDocument || document;\n this._hostElement = (closestElement(POPUP_CONSTANTS.selectors.HOST, targetElement) as HTMLElement) || hostDocument.body;\n this._hostElement.appendChild(this._component);\n this.positionPopup();\n\n if (manageFocus) {\n this._previouslyFocusedElement = getActiveElement() as HTMLElement;\n this._component.focus();\n }\n }\n\n public removePopup(manageFocus: boolean): void {\n removeElement(this._component);\n\n if (manageFocus) {\n window.requestAnimationFrame(() => {\n if (this._previouslyFocusedElement) {\n const activeElement = getActiveElement();\n if (!activeElement || activeElement === document.body) {\n this._previouslyFocusedElement.focus();\n }\n this._previouslyFocusedElement = undefined;\n }\n });\n }\n\n this._hostElement = undefined;\n }\n\n public manageWindowEvents(add = false): void {\n if (add) {\n this._windowEventCallback = evt => this._windowInteraction(evt);\n window.addEventListener('scroll', this._windowEventCallback, true);\n window.addEventListener('resize', this._windowEventCallback, true);\n } else {\n if (this._windowEventCallback) {\n window.removeEventListener('scroll', this._windowEventCallback, true);\n window.removeEventListener('resize', this._windowEventCallback, true);\n this._windowEventCallback = undefined;\n }\n }\n }\n\n public dispatchEvent(type: string, data?: any, bubbles?: boolean, cancelable?: boolean): boolean {\n if (this._component.targetElement) {\n return !emitEvent(this._component.targetElement, type, data, bubbles, cancelable);\n }\n return false;\n }\n\n public addClass(classes: string | string[]): void {\n addClass(classes, this._rootElement);\n }\n\n public removeClass(classes: string | string[]): void {\n removeClass(classes, this._rootElement);\n }\n\n public setAnimationEndListener(listener: (evt: TransitionEvent) => void, classes?: string | string[]): void {\n window.requestAnimationFrame(() => {\n if (classes && classes.length) {\n addClass(classes, this._rootElement);\n }\n this._rootElement.addEventListener('transitionend', listener);\n });\n }\n\n public removeEventListener(type: string, listener: (evt: Event) => void): void {\n this._rootElement.removeEventListener(type, listener);\n }\n\n public setBlurListener(listener: () => void): () => void {\n return notChildEventListener(this._component, activeElement => {\n if (!this._component.contains(activeElement)) {\n listener();\n }\n }, true );\n }\n\n public trySetInitialFocus(): void {\n window.requestAnimationFrame(() => {\n const elements = deepQuerySelectorAll(this._component, POPUP_CONSTANTS.selectors.INITIAL_FOCUS);\n if (elements && elements.length) {\n const initialElement = elements[elements.length - 1] as HTMLElement;\n initialElement.focus();\n }\n });\n }\n\n private _windowInteraction(evt: Event): void {\n if (!this._component.open) {\n return;\n }\n\n switch (evt.type) {\n case 'scroll':\n case 'resize':\n this.positionPopup();\n break;\n default:\n break;\n }\n }\n}\n", "import { ICustomElementFoundation, isElement } from '@tylertech/forge-core';\nimport { IPopupAdapter } from './popup-adapter';\nimport { IPopupPosition, PopupAnimationType, PopupPlacement, PopupStateCallback, POPUP_CONSTANTS as constants, POPUP_CONSTANTS } from './popup-constants';\n\nexport interface IPopupFoundation extends ICustomElementFoundation {\n targetElement: HTMLElement;\n placement: PopupPlacement;\n open: boolean;\n manageFocus: boolean;\n animationType: PopupAnimationType;\n static: boolean;\n offset: IPopupPosition;\n hideWhenClipped: boolean;\n position(): void;\n openCallback: PopupStateCallback;\n closeCallback: PopupStateCallback;\n}\n\nexport class PopupFoundation implements IPopupFoundation {\n private _targetElement: HTMLElement;\n private _placement: PopupPlacement = 'bottom-start';\n private _open = false;\n private _manageFocus = false;\n private _animationType = PopupAnimationType.None;\n private _static = false;\n private _offset?: IPopupPosition;\n private _hideWhenClipped = false;\n private _destroyBlurListener: (() => void) | undefined;\n private _openCallback: PopupStateCallback;\n private _closeCallback: PopupStateCallback;\n private _blurListener: () => void;\n\n constructor(private _adapter: IPopupAdapter) {\n this._blurListener = () => this._onBlur();\n }\n\n public disconnect(): void {\n if (this.open) {\n this.open = false;\n }\n }\n\n private _openPopup(): void {\n if (this._animationType !== PopupAnimationType.None) {\n this._applyOpenAnimation();\n\n if (this._animationType === PopupAnimationType.Dropdown) {\n this._adapter.addClass(POPUP_CONSTANTS.classes.SELECT);\n }\n } else {\n this._adapter.addClass(POPUP_CONSTANTS.classes.OPEN);\n }\n\n this._adapter.setAttribute(POPUP_CONSTANTS.attributes.OPEN, '');\n this._adapter.addPopup(this.targetElement, this._manageFocus);\n this._adapter.trySetInitialFocus();\n\n if (this._destroyBlurListener) {\n this._destroyBlurListener();\n }\n\n if (!this._static) {\n this._destroyBlurListener = this._adapter.setBlurListener(this._blurListener);\n }\n\n this._adapter.manageWindowEvents(true);\n this._adapter.dispatchEvent(constants.events.OPEN);\n }\n\n private _closePopup(): void {\n if (this._destroyBlurListener) {\n this._destroyBlurListener();\n this._destroyBlurListener = undefined;\n }\n\n if (this._animationType !== PopupAnimationType.None) {\n this._applyCloseAnimation();\n } else {\n this._destroyPopup();\n }\n }\n\n private _destroyPopup(): void {\n this._adapter.manageWindowEvents(false);\n this._adapter.removePopup(this._manageFocus);\n this._adapter.dispatchEvent(constants.events.CLOSE);\n this._adapter.removeAttribute(POPUP_CONSTANTS.attributes.OPEN);\n }\n\n private _applyOpenAnimation(): void {\n switch (this._animationType) {\n case PopupAnimationType.Dropdown:\n case PopupAnimationType.Menu:\n this._adapter.addClass(POPUP_CONSTANTS.classes.OPENING);\n const transitionEndListener = (evt: TransitionEvent): void => {\n if (evt.propertyName === 'transform') {\n this._adapter.removeClass(POPUP_CONSTANTS.classes.OPENING);\n this._adapter.removeEventListener('transitionend', transitionEndListener);\n }\n };\n this._adapter.setAnimationEndListener(transitionEndListener, POPUP_CONSTANTS.classes.OPEN);\n break;\n }\n }\n\n private _applyCloseAnimation(): void {\n switch (this._animationType) {\n case PopupAnimationType.Dropdown:\n case PopupAnimationType.Menu:\n this._adapter.removeClass(POPUP_CONSTANTS.classes.OPEN);\n this._adapter.addClass(POPUP_CONSTANTS.classes.CLOSED);\n const transitionEndListener = (evt: TransitionEvent): void => {\n if (evt.propertyName === 'opacity') {\n if (fallbackTimer) {\n clearTimeout(fallbackTimer);\n }\n this._destroyPopup();\n }\n };\n this._adapter.setAnimationEndListener(transitionEndListener);\n const fallbackTimer = setTimeout(() => this._destroyPopup(), POPUP_CONSTANTS.numbers.ANIMATION_DURATION);\n break;\n }\n }\n\n private _onBlur(): void {\n const cancelled = this._adapter.dispatchEvent(POPUP_CONSTANTS.events.BLUR, undefined, true, true);\n if (!cancelled) {\n this.open = false;\n }\n }\n\n private _applyOpen(): void {\n if (this._open) {\n if (!this.targetElement || !isElement(this.targetElement)) {\n throw new Error('targetElement on Popup component must be an HTMLElement');\n }\n\n if (typeof this._openCallback === 'function') {\n this._executeOpenCallback();\n } else {\n this._openPopup();\n }\n } else {\n if (typeof this._closeCallback === 'function') {\n this._executeCloseCallback();\n } else {\n this._closePopup();\n }\n }\n }\n\n private async _executeOpenCallback(): Promise<void> {\n try {\n if (await Promise.resolve(this._openCallback()) !== false) {\n this._openPopup();\n } else {\n this._open = false;\n }\n } catch (e) {\n this._open = false;\n }\n }\n\n private async _executeCloseCallback(): Promise<void> {\n try {\n if (await Promise.resolve(this._closeCallback()) !== false) {\n this._closePopup();\n } else {\n this._open = true;\n }\n } catch (e) {\n this._open = true;\n }\n }\n\n public get targetElement(): HTMLElement {\n return this._targetElement;\n }\n public set targetElement(element: HTMLElement) {\n if (!element || !isElement(element)) {\n throw new Error('targetElement on Popup component must be an HTMLElement');\n }\n this._targetElement = element;\n }\n\n public get placement(): PopupPlacement {\n return this._placement;\n }\n public set placement(value: PopupPlacement) {\n if (this._placement !== value) {\n this._placement = value || 'bottom-start';\n this._adapter.setAttribute(POPUP_CONSTANTS.attributes.PLACEMENT, this._placement);\n }\n }\n\n public get open(): boolean {\n return this._open;\n }\n public set open(value: boolean) {\n value = Boolean(value);\n if (this._open !== value) {\n this._open = value;\n this._applyOpen();\n }\n }\n\n public get manageFocus(): boolean {\n return this._manageFocus;\n }\n public set manageFocus(value: boolean) {\n if (this._manageFocus !== value) {\n this._manageFocus = value;\n }\n }\n\n public get animationType(): PopupAnimationType {\n return this._animationType;\n }\n public set animationType(value: PopupAnimationType) {\n if (this._animationType !== value) {\n this._animationType = value;\n }\n }\n\n public get static(): boolean {\n return this._static;\n }\n public set static(value: boolean) {\n if (this._static !== value) {\n this._static = value;\n if (this._static && this._destroyBlurListener) {\n this._destroyBlurListener();\n this._destroyBlurListener = undefined;\n }\n }\n }\n\n public get hideWhenClipped(): boolean {\n return this._hideWhenClipped;\n }\n public set hideWhenClipped(value: boolean) {\n if (this._hideWhenClipped !== value) {\n this._hideWhenClipped = value;\n }\n }\n\n public get offset(): IPopupPosition {\n return this._offset ?? { x: 0, y: 0 };\n }\n public set offset(value: IPopupPosition) {\n if (!value) {\n this._offset = undefined;\n } else {\n this._offset = {\n x: value.x ?? 0,\n y: value.y ?? 0\n };\n }\n if (this._open) {\n this._adapter.positionPopup();\n }\n }\n\n public get openCallback(): PopupStateCallback {\n return this._openCallback;\n }\n public set openCallback(callback: PopupStateCallback) {\n this._openCallback = callback;\n }\n\n public get closeCallback(): PopupStateCallback {\n return this._closeCallback;\n }\n public set closeCallback(callback: PopupStateCallback) {\n this._closeCallback = callback;\n }\n\n public position(): void {\n this._adapter.positionPopup();\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, FoundationProperty, isDefined } from '@tylertech/forge-core';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\nimport { PopupAdapter } from './popup-adapter';\nimport { IPopupPosition, IPopupPositionEventData, PopupAnimationType, PopupPlacement, PopupStateCallback, POPUP_CONSTANTS } from './popup-constants';\nimport { PopupFoundation } from './popup-foundation';\n\n\nconst template = '<template><div class=\\\"forge-popup\\\" part=\\\"root\\\"><slot></slot></div></template>';\nconst styles = '.forge-popup{min-width:112px;min-width:var(--min-width,112px);background-color:#fff;background-color:var(--forge-theme-elevated-surface,#fff);-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);-webkit-box-shadow:var(--forge-theme-popup-elevation,0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12));box-shadow:var(--forge-theme-popup-elevation,0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12));color:#000;color:var(--mdc-theme-on-surface,#000);border-radius:4px;border-radius:var(--mdc-shape-medium,4px);display:none;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:100%;margin:0;padding:0;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 24px 0;transform-origin:50% 24px 0;opacity:0;will-change:transform,opacity;-webkit-transition:opacity 120ms linear,-webkit-transform 120ms cubic-bezier(0, 0, .2, 1);transition:opacity 120ms linear,-webkit-transform 120ms cubic-bezier(0, 0, .2, 1);transition:opacity 120ms linear,transform 120ms cubic-bezier(0, 0, .2, 1);transition:opacity 120ms linear,transform 120ms cubic-bezier(0, 0, .2, 1),-webkit-transform 120ms cubic-bezier(0, 0, .2, 1)}.forge-popup::-webkit-scrollbar{width:16px;width:var(--forge-scrollbar-width,16px);height:16px;height:var(--forge-scrollbar-height,16px)}.forge-popup::-webkit-scrollbar-corner{background-color:#f0f0f0;background-color:var(--forge-theme-scrollbar-track,#f0f0f0)}.forge-popup::-webkit-scrollbar-track{background-color:#f0f0f0;background-color:var(--forge-theme-scrollbar-track,#f0f0f0)}.forge-popup::-webkit-scrollbar-track:hover{background-color:#ececec;background-color:var(--forge-theme-scrollbar-track-hover,#ececec)}.forge-popup::-webkit-scrollbar-thumb{background-color:#bdbdbd;background-color:var(--forge-theme-scrollbar-thumb,#bdbdbd);height:32px;height:var(--forge-scrollbar-min-height,32px);width:32px;width:var(--forge-scrollbar-min-width,32px);border-radius:10px;border-radius:var(--forge-scrollbar-border-radius,10px);border-width:3px;border-width:var(--forge-scrollbar-border-width,3px);border-style:solid;border-color:transparent;background-clip:content-box}.forge-popup::-webkit-scrollbar-thumb:hover{background-color:#9e9e9e;background-color:var(--forge-theme-scrollbar-thumb-hover,#9e9e9e)}.forge-popup--opening{display:block;-webkit-transform:scale(.8);transform:scale(.8);opacity:0}.forge-popup--closed{display:block;opacity:0;-webkit-transition:opacity 120ms linear;transition:opacity 120ms linear}.forge-popup--open{display:block;-webkit-transform:scale(1);transform:scale(1);opacity:1}.forge-popup--select{border-top-left-radius:0;border-top-right-radius:0;max-height:256px;overflow-y:auto}:host{z-index:10;z-index:var(--forge-z-index-popup,10);border-radius:4px;border-radius:var(--mdc-shape-medium,4px);display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;position:absolute;overflow:visible}:host([hidden]){display:none}';\n\nexport interface IPopupComponent extends IBaseComponent {\n targetElement: HTMLElement;\n placement: PopupPlacement;\n open: boolean;\n manageFocus: boolean;\n animationType: PopupAnimationType;\n static: boolean;\n offset: IPopupPosition;\n hideWhenClipped: boolean;\n position(): void;\n openCallback: PopupStateCallback;\n closeCallback: PopupStateCallback;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-popup': IPopupComponent;\n }\n\n interface HTMLElementEventMap {\n 'forge-popup-open': CustomEvent<void>;\n 'forge-popup-close': CustomEvent<void>;\n 'forge-popup-position': CustomEvent<IPopupPositionEventData>;\n 'forge-popup-blur': CustomEvent<void>;\n }\n}\n\n/**\n * The web component class behind the `<forge-popup>` custom element.\n * \n * @tag forge-popup\n */\n@CustomElement({\n name: POPUP_CONSTANTS.elementName\n})\nexport class PopupComponent extends BaseComponent implements IPopupComponent {\n private _foundation: PopupFoundation;\n\n public static get observedAttributes(): string[] {\n return [\n POPUP_CONSTANTS.attributes.OPEN,\n POPUP_CONSTANTS.attributes.PLACEMENT,\n POPUP_CONSTANTS.attributes.MANAGE_FOCUS,\n POPUP_CONSTANTS.attributes.ANIMATION_TYPE,\n POPUP_CONSTANTS.attributes.STATIC,\n POPUP_CONSTANTS.attributes.HIDE_WHEN_CLIPPED\n ];\n }\n\n constructor() {\n super();\n attachShadowTemplate(this, template, styles);\n this._foundation = new PopupFoundation(new PopupAdapter(this));\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case POPUP_CONSTANTS.attributes.OPEN:\n this.open = isDefined(newValue);\n break;\n case POPUP_CONSTANTS.attributes.PLACEMENT:\n this.placement = newValue as PopupPlacement;\n break;\n case POPUP_CONSTANTS.attributes.MANAGE_FOCUS:\n this.manageFocus = coerceBoolean(newValue);\n break;\n case POPUP_CONSTANTS.attributes.ANIMATION_TYPE:\n this.animationType = newValue as PopupAnimationType;\n break;\n case POPUP_CONSTANTS.attributes.STATIC:\n this.static = coerceBoolean(newValue);\n break;\n case POPUP_CONSTANTS.attributes.HIDE_WHEN_CLIPPED:\n this.hideWhenClipped = coerceBoolean(newValue);\n break;\n }\n }\n\n @FoundationProperty()\n public targetElement: HTMLElement;\n\n @FoundationProperty()\n public placement: PopupPlacement;\n\n @FoundationProperty()\n public open: boolean;\n\n @FoundationProperty()\n public manageFocus: boolean;\n\n @FoundationProperty()\n public animationType: PopupAnimationType;\n\n @FoundationProperty()\n public static: boolean;\n\n @FoundationProperty()\n public hideWhenClipped: boolean;\n\n @FoundationProperty()\n public openCallback: PopupStateCallback;\n\n @FoundationProperty()\n public closeCallback: PopupStateCallback;\n\n @FoundationProperty()\n public offset: IPopupPosition;\n\n public position(): void {\n this._foundation.position();\n }\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { PopupComponent } from './popup';\n\nexport * from './popup-adapter';\nexport * from './popup-constants';\nexport * from './popup-foundation';\nexport * from './popup';\n\nexport function definePopupComponent(): void {\n defineCustomElement(PopupComponent);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|