@tylertech/forge 3.0.0-next.8 → 3.0.0-next.9
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 +2080 -487
- package/dist/button/forge-button.css +1 -1
- package/dist/esm/accordion/index.js +1 -1
- package/dist/esm/app-bar/help-button/index.js +1 -1
- package/dist/esm/app-bar/index.js +1 -1
- package/dist/esm/app-bar/menu-button/index.js +1 -1
- package/dist/esm/app-bar/notification-button/index.js +1 -1
- package/dist/esm/app-bar/profile-button/index.js +1 -1
- package/dist/esm/app-bar/search/index.js +1 -1
- package/dist/esm/autocomplete/index.js +1 -1
- package/dist/esm/banner/index.js +1 -1
- package/dist/esm/bottom-sheet/index.js +1 -1
- package/dist/esm/busy-indicator/index.js +1 -1
- package/dist/esm/button/index.js +1 -1
- package/dist/esm/button-toggle/button-toggle/index.js +1 -1
- package/dist/esm/button-toggle/button-toggle-group/index.js +1 -1
- package/dist/esm/button-toggle/index.js +1 -1
- package/dist/esm/calendar/calendar-dropdown/index.js +1 -1
- package/dist/esm/calendar/calendar-menu/index.js +1 -1
- package/dist/esm/calendar/index.js +1 -1
- package/dist/esm/checkbox/index.js +1 -1
- package/dist/esm/chip-field/index.js +1 -1
- package/dist/esm/chips/chip/index.js +1 -1
- package/dist/esm/chips/chip-set/index.js +1 -1
- package/dist/esm/chips/index.js +1 -1
- package/dist/esm/chunks/{chunk.PPPTT3SM.js → chunk.2VP57RZO.js} +2 -2
- package/dist/esm/chunks/{chunk.PPPTT3SM.js.map → chunk.2VP57RZO.js.map} +2 -2
- package/dist/esm/chunks/{chunk.TXFYS6EU.js → chunk.33EJTOVA.js} +2 -2
- package/dist/esm/chunks/{chunk.OTVT3XM2.js → chunk.3JDFBEF7.js} +2 -2
- package/dist/esm/chunks/chunk.3ME47JIX.js +7 -0
- package/dist/esm/chunks/chunk.3ME47JIX.js.map +7 -0
- package/dist/esm/chunks/{chunk.V6JVHYVW.js → chunk.44UCSD46.js} +2 -2
- package/dist/esm/chunks/{chunk.EUE3OVC7.js → chunk.4WVHON6T.js} +2 -2
- package/dist/esm/chunks/chunk.4WVHON6T.js.map +7 -0
- package/dist/esm/chunks/{chunk.6SBTLXLH.js → chunk.5IQGVS6U.js} +2 -2
- package/dist/esm/chunks/{chunk.6SBTLXLH.js.map → chunk.5IQGVS6U.js.map} +1 -1
- package/dist/esm/chunks/{chunk.7JQHQKXN.js → chunk.6MPXRRMB.js} +2 -2
- package/dist/esm/chunks/{chunk.MXNLCQRB.js → chunk.6VDF54LZ.js} +2 -2
- package/dist/esm/chunks/{chunk.GF2GUVYS.js → chunk.7TGGJGTG.js} +2 -2
- package/dist/esm/chunks/{chunk.GF2GUVYS.js.map → chunk.7TGGJGTG.js.map} +1 -1
- package/dist/esm/chunks/{chunk.4EB5NVCK.js → chunk.AHHNJSZK.js} +2 -2
- package/dist/esm/chunks/chunk.BBKRPL6R.js +7 -0
- package/dist/esm/chunks/chunk.BBKRPL6R.js.map +7 -0
- package/dist/esm/chunks/{chunk.BSTIDYQJ.js → chunk.BBWMSCVG.js} +2 -2
- package/dist/esm/chunks/{chunk.BKCEVPKW.js → chunk.BDCJIRNK.js} +2 -2
- package/dist/esm/chunks/{chunk.IIXLFXHZ.js → chunk.BSVFCJCQ.js} +2 -2
- package/dist/esm/chunks/chunk.CAUWWFF4.js +7 -0
- package/dist/esm/chunks/chunk.CAUWWFF4.js.map +7 -0
- package/dist/esm/chunks/{chunk.SYZB7B4F.js → chunk.CL65KLH7.js} +2 -2
- package/dist/esm/chunks/{chunk.4LVS2EYJ.js → chunk.DFGBVJBE.js} +2 -2
- package/dist/esm/chunks/chunk.DXZ5LVFJ.js +7 -0
- package/dist/esm/chunks/chunk.DXZ5LVFJ.js.map +7 -0
- package/dist/esm/chunks/{chunk.YUAU5IWT.js → chunk.F776DWXU.js} +2 -2
- package/dist/esm/chunks/{chunk.HKJEGD6C.js → chunk.FIBGOPNP.js} +2 -2
- package/dist/esm/chunks/{chunk.HKJEGD6C.js.map → chunk.FIBGOPNP.js.map} +1 -1
- package/dist/esm/chunks/{chunk.CN27IHDN.js → chunk.GEGK55XX.js} +2 -2
- package/dist/esm/chunks/{chunk.CN27IHDN.js.map → chunk.GEGK55XX.js.map} +2 -2
- package/dist/esm/chunks/{chunk.2QFIMTVP.js → chunk.GT3XBPZY.js} +2 -2
- package/dist/esm/chunks/{chunk.5MK5YWCK.js → chunk.HUGRRRQA.js} +2 -2
- package/dist/esm/chunks/{chunk.GJW4WS4I.js → chunk.HXJCTE47.js} +2 -2
- package/dist/esm/chunks/{chunk.RHYRMQS7.js → chunk.IPGZ24EH.js} +2 -2
- package/dist/esm/chunks/{chunk.RHYRMQS7.js.map → chunk.IPGZ24EH.js.map} +1 -1
- package/dist/esm/chunks/chunk.ISC7SZSP.js +7 -0
- package/dist/esm/chunks/chunk.ISC7SZSP.js.map +7 -0
- package/dist/esm/chunks/{chunk.RUSHOL23.js → chunk.JAAJDT5E.js} +2 -2
- package/dist/esm/chunks/{chunk.SIJGKRYS.js → chunk.JCRC2VEI.js} +2 -2
- package/dist/esm/chunks/{chunk.SIJGKRYS.js.map → chunk.JCRC2VEI.js.map} +1 -1
- package/dist/esm/chunks/{chunk.3AF7CJP2.js → chunk.JFKSREWG.js} +2 -2
- package/dist/esm/chunks/{chunk.3AF7CJP2.js.map → chunk.JFKSREWG.js.map} +1 -1
- package/dist/esm/chunks/{chunk.FAANPQES.js → chunk.JL4XB4RI.js} +2 -2
- package/dist/esm/chunks/{chunk.24L5GDD2.js → chunk.JTIPXKV6.js} +2 -2
- package/dist/esm/chunks/{chunk.24L5GDD2.js.map → chunk.JTIPXKV6.js.map} +2 -2
- package/dist/esm/chunks/chunk.KO45GDOA.js +7 -0
- package/dist/esm/chunks/{chunk.2CTK5R37.js.map → chunk.KO45GDOA.js.map} +2 -2
- package/dist/esm/chunks/chunk.KSCUIS5C.js +7 -0
- package/dist/esm/chunks/chunk.KSCUIS5C.js.map +7 -0
- package/dist/esm/chunks/{chunk.2LRDPTHK.js → chunk.M2M47T4L.js} +2 -2
- package/dist/esm/chunks/{chunk.JVW6JGV3.js → chunk.MGWY7YIL.js} +2 -2
- package/dist/esm/chunks/{chunk.JVW6JGV3.js.map → chunk.MGWY7YIL.js.map} +2 -2
- package/dist/esm/chunks/{chunk.3CBVRCKM.js → chunk.MJSLXZBM.js} +2 -2
- package/dist/esm/chunks/{chunk.3CBVRCKM.js.map → chunk.MJSLXZBM.js.map} +1 -1
- package/dist/esm/chunks/{chunk.2YAU7AXH.js → chunk.N7PQ2MUQ.js} +2 -2
- package/dist/esm/chunks/{chunk.2YAU7AXH.js.map → chunk.N7PQ2MUQ.js.map} +1 -1
- package/dist/esm/chunks/{chunk.NDGFQILG.js → chunk.NE4NCRRZ.js} +2 -2
- package/dist/esm/chunks/chunk.NF4J3Q5X.js +7 -0
- package/dist/esm/chunks/chunk.NF4J3Q5X.js.map +7 -0
- package/dist/esm/chunks/chunk.OEYALYRM.js +7 -0
- package/dist/esm/chunks/chunk.OEYALYRM.js.map +7 -0
- package/dist/esm/chunks/{chunk.GHSAKRYH.js → chunk.OKKH7F7M.js} +2 -2
- package/dist/esm/chunks/{chunk.AGMPIMJV.js → chunk.QL45FKVJ.js} +2 -2
- package/dist/esm/chunks/{chunk.AGMPIMJV.js.map → chunk.QL45FKVJ.js.map} +2 -2
- package/dist/esm/chunks/chunk.QU76MOCS.js +12 -0
- package/dist/esm/chunks/chunk.QU76MOCS.js.map +7 -0
- package/dist/esm/chunks/{chunk.5PHLKON3.js → chunk.R5HZFOUK.js} +2 -2
- package/dist/esm/chunks/{chunk.5PHLKON3.js.map → chunk.R5HZFOUK.js.map} +2 -2
- package/dist/esm/chunks/chunk.SAXRW6GB.js +7 -0
- package/dist/esm/chunks/chunk.SAXRW6GB.js.map +7 -0
- package/dist/esm/chunks/{chunk.2IQGDFQS.js → chunk.SEP3L4QL.js} +2 -2
- package/dist/esm/chunks/{chunk.2IQGDFQS.js.map → chunk.SEP3L4QL.js.map} +1 -1
- package/dist/esm/chunks/{chunk.Z5TWWM7I.js → chunk.SN5LPTHH.js} +2 -2
- package/dist/esm/chunks/{chunk.Z5TWWM7I.js.map → chunk.SN5LPTHH.js.map} +1 -1
- package/dist/esm/chunks/{chunk.CNQESSA3.js → chunk.UKFJHDO7.js} +2 -2
- package/dist/esm/chunks/{chunk.IGK3VYZG.js → chunk.VI2GRQO3.js} +2 -2
- package/dist/esm/chunks/{chunk.A5MBSCSQ.js → chunk.VNOJO2PF.js} +2 -2
- package/dist/esm/chunks/chunk.W7PZTNZ4.js +7 -0
- package/dist/esm/chunks/chunk.W7PZTNZ4.js.map +7 -0
- package/dist/esm/chunks/{chunk.2YX7ASSX.js → chunk.WXN4S7CN.js} +2 -2
- package/dist/esm/chunks/{chunk.ER52NFXX.js → chunk.X5BG35YX.js} +2 -2
- package/dist/esm/chunks/{chunk.THPU5KBV.js → chunk.XRESQBNE.js} +2 -2
- package/dist/esm/chunks/{chunk.632OMHHN.js → chunk.YDY2IGBF.js} +2 -2
- package/dist/esm/chunks/{chunk.632OMHHN.js.map → chunk.YDY2IGBF.js.map} +1 -1
- package/dist/esm/chunks/{chunk.QYKO543K.js → chunk.YWCLKUK7.js} +2 -2
- package/dist/esm/chunks/{chunk.QA3NU7EN.js → chunk.Z4J4D5FD.js} +2 -2
- package/dist/esm/chunks/{chunk.QA3NU7EN.js.map → chunk.Z4J4D5FD.js.map} +1 -1
- package/dist/esm/chunks/{chunk.V4RBOYNH.js → chunk.ZTGPXIC2.js} +2 -2
- package/dist/esm/chunks/{chunk.V4RBOYNH.js.map → chunk.ZTGPXIC2.js.map} +1 -1
- package/dist/esm/circular-progress/index.js +1 -1
- package/dist/esm/color-picker/index.js +1 -1
- package/dist/esm/core/index.js +1 -1
- package/dist/esm/core/utils/index.js +1 -1
- package/dist/esm/date-picker/index.js +1 -1
- package/dist/esm/date-range-picker/index.js +1 -1
- package/dist/esm/expansion-panel/index.js +1 -1
- package/dist/esm/file-picker/index.js +1 -1
- package/dist/esm/focus-indicator/index.js +1 -1
- package/dist/esm/icon/index.js +1 -1
- package/dist/esm/icon-button/index.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/list/index.js +1 -1
- package/dist/esm/list/list/index.js +1 -1
- package/dist/esm/list/list-item/index.js +1 -1
- package/dist/esm/list-dropdown/index.js +1 -1
- package/dist/esm/menu/index.js +1 -1
- package/dist/esm/open-icon/index.js +1 -1
- package/dist/esm/paginator/index.js +1 -1
- package/dist/esm/profile-card/index.js +1 -1
- package/dist/esm/quantity-field/index.js +1 -1
- package/dist/esm/radio/index.js +1 -1
- package/dist/esm/select/core/index.js +1 -1
- package/dist/esm/select/index.js +1 -1
- package/dist/esm/select/select/index.js +1 -1
- package/dist/esm/select/select-dropdown/index.js +1 -1
- package/dist/esm/slider/index.js +1 -1
- package/dist/esm/split-view/index.js +1 -1
- package/dist/esm/split-view/split-view/index.js +1 -1
- package/dist/esm/split-view/split-view-panel/index.js +1 -1
- package/dist/esm/state-layer/index.js +7 -0
- package/dist/esm/state-layer/index.js.map +7 -0
- package/dist/esm/stepper/index.js +1 -1
- package/dist/esm/stepper/step/index.js +1 -1
- package/dist/esm/stepper/stepper/index.js +1 -1
- package/dist/esm/switch/index.js +1 -1
- package/dist/esm/table/index.js +1 -1
- package/dist/esm/tabs/index.js +1 -1
- package/dist/esm/tabs/tab/index.js +1 -1
- package/dist/esm/tabs/tab-bar/index.js +1 -1
- package/dist/esm/text-field/index.js +1 -1
- package/dist/esm/time-picker/index.js +1 -1
- package/dist/esm/toast/index.js +1 -1
- package/dist/forge-dark.css +1 -1
- package/dist/forge.css +1 -1
- package/dist/icon-button/forge-icon-button.css +1 -1
- package/dist/table/forge-table.css +1 -1
- package/dist/theme/forge-theme.css +1 -1
- package/esm/app-bar/app-bar.js +1 -1
- package/esm/banner/banner.js +1 -1
- package/esm/bottom-sheet/bottom-sheet.js +1 -1
- package/esm/busy-indicator/busy-indicator.js +1 -1
- package/esm/button/button.d.ts +1 -0
- package/esm/button/button.js +8 -2
- package/esm/button-toggle/button-toggle/button-toggle.js +1 -1
- package/esm/calendar/calendar-menu/calendar-menu.js +1 -1
- package/esm/calendar/calendar.js +1 -1
- package/esm/checkbox/checkbox-adapter.d.ts +1 -0
- package/esm/checkbox/checkbox-adapter.js +9 -2
- package/esm/checkbox/checkbox.js +1 -1
- package/esm/chip-field/chip-field.js +1 -1
- package/esm/chips/chip/chip.js +1 -1
- package/esm/circular-progress/circular-progress.d.ts +3 -3
- package/esm/circular-progress/circular-progress.js +4 -4
- package/esm/color-picker/color-picker.js +1 -1
- package/esm/core/testing/pointer.d.ts +13 -0
- package/esm/core/testing/pointer.js +42 -0
- package/esm/core/utils/utils.d.ts +16 -2
- package/esm/core/utils/utils.js +47 -6
- package/esm/file-picker/file-picker.js +1 -1
- package/esm/focus-indicator/focus-indicator-adapter.d.ts +0 -8
- package/esm/focus-indicator/focus-indicator-adapter.js +2 -22
- package/esm/focus-indicator/focus-indicator-foundation.js +1 -1
- package/esm/focus-indicator/focus-indicator.js +1 -1
- package/esm/icon-button/icon-button.d.ts +1 -0
- package/esm/icon-button/icon-button.js +9 -2
- package/esm/index.d.ts +1 -0
- package/esm/index.js +3 -0
- package/esm/list/list-item/list-item-adapter.d.ts +3 -3
- package/esm/list/list-item/list-item-adapter.js +2 -2
- package/esm/list/list-item/list-item-foundation.d.ts +1 -0
- package/esm/list/list-item/list-item-foundation.js +8 -1
- package/esm/list/list-item/list-item.js +1 -1
- package/esm/paginator/paginator.js +1 -1
- package/esm/profile-card/profile-card.js +1 -1
- package/esm/radio/radio-adapter.d.ts +1 -0
- package/esm/radio/radio-adapter.js +9 -2
- package/esm/select/select/select.js +1 -1
- package/esm/slider/slider-adapter.d.ts +0 -16
- package/esm/slider/slider-adapter.js +11 -71
- package/esm/slider/slider-constants.d.ts +0 -3
- package/esm/slider/slider-constants.js +0 -3
- package/esm/slider/slider-foundation.d.ts +0 -1
- package/esm/slider/slider-foundation.js +0 -6
- package/esm/slider/slider-utils.js +3 -3
- package/esm/slider/slider.d.ts +0 -1
- package/esm/slider/slider.js +5 -6
- package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
- package/esm/state-layer/index.d.ts +10 -0
- package/esm/state-layer/index.js +14 -0
- package/esm/state-layer/state-layer-adapter.d.ts +41 -0
- package/esm/state-layer/state-layer-adapter.js +101 -0
- package/esm/state-layer/state-layer-constants.d.ts +79 -0
- package/esm/state-layer/state-layer-constants.js +89 -0
- package/esm/state-layer/state-layer-foundation.d.ts +57 -0
- package/esm/state-layer/state-layer-foundation.js +237 -0
- package/esm/state-layer/state-layer-utils.d.ts +26 -0
- package/esm/state-layer/state-layer-utils.js +54 -0
- package/esm/state-layer/state-layer.d.ts +66 -0
- package/esm/state-layer/state-layer.js +96 -0
- package/esm/stepper/step/step.js +1 -1
- package/esm/switch/switch.js +10 -3
- package/esm/tabs/tab/tab-adapter.d.ts +3 -5
- package/esm/tabs/tab/tab-adapter.js +6 -15
- package/esm/tabs/tab/tab-constants.d.ts +0 -1
- package/esm/tabs/tab/tab-constants.js +0 -1
- package/esm/tabs/tab/tab-foundation.d.ts +0 -1
- package/esm/tabs/tab/tab-foundation.js +1 -3
- package/esm/tabs/tab/tab.d.ts +0 -1
- package/esm/tabs/tab/tab.js +5 -6
- package/esm/tabs/tab-bar/tab-bar.d.ts +2 -2
- package/esm/tabs/tab-bar/tab-bar.js +3 -3
- package/esm/text-field/text-field.js +1 -1
- package/esm/toast/toast.js +1 -1
- package/package.json +1 -1
- package/styles/app-bar/_mixins.scss +9 -1
- package/styles/circular-progress/_mixins.scss +3 -10
- package/styles/core/{style-layer → styles}/circular-progress/_core.scss +5 -8
- package/styles/core/styles/focus-indicator/_core.scss +5 -0
- package/styles/core/styles/focus-indicator/_variables.scss +8 -0
- package/styles/core/styles/focus-indicator/index.scss +7 -0
- package/styles/core/{style-layer → styles}/slider/_core.scss +13 -31
- package/styles/core/styles/state-layer/_core.scss +144 -0
- package/styles/core/styles/state-layer/_variables.scss +8 -0
- package/styles/core/{style-layer/tabs/tab → styles/state-layer}/index.scss +0 -4
- package/styles/core/{style-layer → styles}/tabs/tab/_core.scss +36 -40
- package/styles/core/{style-layer → styles}/tabs/tab-bar/_core.scss +2 -2
- package/styles/core/{style-layer → styles}/tabs/tab-bar/_variables.scss +1 -1
- package/styles/core/styles/tabs/tab-bar/index.scss +7 -0
- package/styles/core/styles/tokens/_color-palette.scss +299 -0
- package/styles/core/styles/tokens/circular-progress/_tokens.scss +14 -0
- package/styles/core/styles/tokens/focus-indicator/_tokens.scss +24 -0
- package/styles/core/styles/tokens/index.scss +58 -0
- package/styles/core/styles/tokens/state-layer/_tokens.scss +17 -0
- package/styles/core/styles/tokens/theme/_tokens.scss +185 -0
- package/styles/core/styles/tokens/typography/_tokens.scss +47 -0
- package/styles/core/styles/utils/_elevation.scss +5 -0
- package/styles/focus-indicator/_mixins.scss +4 -13
- package/styles/focus-indicator/_variables.scss +0 -15
- package/styles/linear-progress/_mixins.scss +1 -1
- package/styles/linear-progress/_variables.scss +1 -1
- package/styles/slider/_mixins.scss +8 -1
- package/styles/state-layer/_mixins.scss +23 -0
- package/styles/state-layer/state-layer.scss +20 -0
- package/styles/tabs/tab/_mixins.scss +9 -1
- package/styles/tabs/tab/_variables.scss +2 -0
- package/styles/tabs/tab-bar/_mixins.scss +2 -1
- package/styles/tabs/tab-bar/_variables.scss +2 -2
- package/styles/theme/_theme-dark.scss +5 -3
- package/styles/theme/_theme.scss +3 -36
- package/dist/esm/chunks/chunk.246JM2YT.js +0 -7
- package/dist/esm/chunks/chunk.246JM2YT.js.map +0 -7
- package/dist/esm/chunks/chunk.2CTK5R37.js +0 -7
- package/dist/esm/chunks/chunk.2XFVFZ3P.js +0 -7
- package/dist/esm/chunks/chunk.2XFVFZ3P.js.map +0 -7
- package/dist/esm/chunks/chunk.57XQ4F6F.js +0 -12
- package/dist/esm/chunks/chunk.57XQ4F6F.js.map +0 -7
- package/dist/esm/chunks/chunk.5IVB5L5Z.js +0 -7
- package/dist/esm/chunks/chunk.5IVB5L5Z.js.map +0 -7
- package/dist/esm/chunks/chunk.A5R7KUIP.js +0 -7
- package/dist/esm/chunks/chunk.A5R7KUIP.js.map +0 -7
- package/dist/esm/chunks/chunk.C2LTB7EX.js +0 -7
- package/dist/esm/chunks/chunk.C2LTB7EX.js.map +0 -7
- package/dist/esm/chunks/chunk.EUE3OVC7.js.map +0 -7
- package/dist/esm/chunks/chunk.GUYPITGA.js +0 -7
- package/dist/esm/chunks/chunk.GUYPITGA.js.map +0 -7
- package/dist/esm/chunks/chunk.JQIOVCKI.js +0 -7
- package/dist/esm/chunks/chunk.JQIOVCKI.js.map +0 -7
- package/dist/esm/chunks/chunk.LJYTJ3RV.js +0 -7
- package/dist/esm/chunks/chunk.LJYTJ3RV.js.map +0 -7
- package/dist/esm/chunks/chunk.NVMILGC2.js +0 -7
- package/dist/esm/chunks/chunk.NVMILGC2.js.map +0 -7
- package/esm/slider/slider-handle-ripple.d.ts +0 -18
- package/esm/slider/slider-handle-ripple.js +0 -37
- package/esm/tabs/tab/tab-ripple.d.ts +0 -17
- package/esm/tabs/tab/tab-ripple.js +0 -33
- package/styles/circular-progress/_variables.scss +0 -12
- /package/dist/esm/chunks/{chunk.TXFYS6EU.js.map → chunk.33EJTOVA.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.OTVT3XM2.js.map → chunk.3JDFBEF7.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.V6JVHYVW.js.map → chunk.44UCSD46.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.7JQHQKXN.js.map → chunk.6MPXRRMB.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.MXNLCQRB.js.map → chunk.6VDF54LZ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.4EB5NVCK.js.map → chunk.AHHNJSZK.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.BSTIDYQJ.js.map → chunk.BBWMSCVG.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.BKCEVPKW.js.map → chunk.BDCJIRNK.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.IIXLFXHZ.js.map → chunk.BSVFCJCQ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.SYZB7B4F.js.map → chunk.CL65KLH7.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.4LVS2EYJ.js.map → chunk.DFGBVJBE.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.YUAU5IWT.js.map → chunk.F776DWXU.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.2QFIMTVP.js.map → chunk.GT3XBPZY.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.5MK5YWCK.js.map → chunk.HUGRRRQA.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.GJW4WS4I.js.map → chunk.HXJCTE47.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.RUSHOL23.js.map → chunk.JAAJDT5E.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.FAANPQES.js.map → chunk.JL4XB4RI.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.2LRDPTHK.js.map → chunk.M2M47T4L.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.NDGFQILG.js.map → chunk.NE4NCRRZ.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.GHSAKRYH.js.map → chunk.OKKH7F7M.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.CNQESSA3.js.map → chunk.UKFJHDO7.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.IGK3VYZG.js.map → chunk.VI2GRQO3.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.A5MBSCSQ.js.map → chunk.VNOJO2PF.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.2YX7ASSX.js.map → chunk.WXN4S7CN.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.ER52NFXX.js.map → chunk.X5BG35YX.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.THPU5KBV.js.map → chunk.XRESQBNE.js.map} +0 -0
- /package/dist/esm/chunks/{chunk.QYKO543K.js.map → chunk.YWCLKUK7.js.map} +0 -0
- /package/styles/core/{style-layer → styles}/circular-progress/_animations.scss +0 -0
- /package/styles/core/{style-layer → styles}/circular-progress/_variables.scss +0 -0
- /package/styles/core/{style-layer → styles}/circular-progress/index.scss +0 -0
- /package/styles/core/{style-layer → styles}/core/_config.scss +0 -0
- /package/styles/core/{style-layer → styles}/linear-progress/_animations.scss +0 -0
- /package/styles/core/{style-layer → styles}/linear-progress/_core.scss +0 -0
- /package/styles/core/{style-layer → styles}/linear-progress/_variables.scss +0 -0
- /package/styles/core/{style-layer → styles}/linear-progress/index.scss +0 -0
- /package/styles/core/{style-layer → styles}/slider/_functions.scss +0 -0
- /package/styles/core/{style-layer → styles}/slider/_variables.scss +0 -0
- /package/styles/core/{style-layer → styles}/slider/index.scss +0 -0
- /package/styles/core/{style-layer → styles}/tabs/tab/_variables.scss +0 -0
- /package/styles/core/{style-layer/tabs/tab-bar → styles/tabs/tab}/index.scss +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/color-picker/color-picker-constants.ts", "../../src/color-picker/color-picker-adapter.ts", "../../src/color-picker/color-picker-utils.ts", "../../src/color-picker/color-picker-gradient-slider.ts", "../../src/color-picker/color-picker-slider.ts", "../../src/color-picker/color-picker-foundation.ts", "../../src/color-picker/color-picker.ts", "../../src/color-picker/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}color-picker`;\n\nconst attributes = {\n VALUE: 'value',\n ALLOW_OPACITY: 'allow-opacity',\n DEBOUNCE_CHANGE_EVENT: 'debounce-change-event'\n};\n\nconst classes = {\n SLIDER_THUMB_ACTIVE: 'forge-color-picker__slider-thumb--active',\n GRADIENT_THUMB_ACTIVE: 'forge-color-picker__gradient-thumb--active'\n};\n\nconst selectors = {\n GRADIENT: '.forge-color-picker__gradient',\n GRADIENT_THUMB: '.forge-color-picker__gradient-thumb',\n PREVIEW_COLOR: '.forge-color-picker__color-preview',\n HEX_INPUT: '#forge-color-picker-hex-input',\n RGBA_INPUT: '#forge-color-picker-rgba-input',\n HSVA_INPUT: '#forge-color-picker-hsva-input',\n HUE_SLIDER: '.forge-color-picker__hue-slider',\n HUE_SLIDER_THUMB: '#forge-color-picker-hue-thumb',\n OPACITY_SLIDER: '.forge-color-picker__opacity-slider',\n OPACITY_SLIDER_THUMB: '#forge-color-picker-opacity-thumb',\n SLIDER: '.forge-color-picker__slider',\n SLIDER_THUMB: '.forge-color-picker__slider-thumb',\n COLOR_VALUE_HEX_CONTAINER: '.forge-color-picker__color-hex',\n COLOR_VALUE_RGBA_CONTAINER: '.forge-color-picker__color-rgba',\n COLOR_VALUE_HSVA_CONTAINER: '.forge-color-picker__color-hsva',\n TYPE_BUTTON: '#forge-color-picker-type-button',\n COLOR_VALUE_RGBA_R: '#forge-color-picker-rgba-r-input',\n COLOR_VALUE_RGBA_G: '#forge-color-picker-rgba-g-input',\n COLOR_VALUE_RGBA_B: '#forge-color-picker-rgba-b-input',\n COLOR_VALUE_RGBA_A: '#forge-color-picker-rgba-a-input',\n COLOR_VALUE_HSVA_H: '#forge-color-picker-hsva-h-input',\n COLOR_VALUE_HSVA_S: '#forge-color-picker-hsva-s-input',\n COLOR_VALUE_HSVA_V: '#forge-color-picker-hsva-v-input',\n COLOR_VALUE_HSVA_A: '#forge-color-picker-hsva-a-input'\n};\n\nconst events = {\n CHANGE: `${elementName}-change`\n};\n\nconst numbers = {\n CHANGE_EVENT_DEBOUNCE_THRESHOLD: 200\n};\n\nexport const COLOR_PICKER_CONSTANTS = {\n elementName,\n attributes,\n events,\n classes,\n selectors,\n numbers\n};\n\nexport const DEFAULT_COLOR = '000000';\n\nexport enum ColorPickerValueType {\n HEX = 'hex',\n RGB = 'rgb',\n RGBA = 'rgba',\n HSV = 'hsv',\n HSVA = 'hsva'\n}\n\nexport interface IRGBA {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface IHSVA {\n h: number;\n s: number;\n v: number;\n a: number;\n}\n\nexport type ColorPickerChangeEventType = 'slider' | 'input';\nexport type ColorPickerChangeEventSource = 'gradient' | 'hue' | 'opacity' | 'hex' | 'rgba' | 'hsva';\n\nexport interface IColorPickerChangeEventData {\n type: ColorPickerChangeEventType;\n source: ColorPickerChangeEventSource;\n hex: string;\n rgba: IRGBA;\n hsva: IHSVA;\n alpha?: number;\n}\n", "import { getShadowElement } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { IColorPickerComponent } from './color-picker';\nimport { ColorPickerValueType, COLOR_PICKER_CONSTANTS, IHSVA, IRGBA } from './color-picker-constants';\n\nexport interface IColorPickerAdapter extends IBaseAdapter {\n setPreviewColor(rgbaStyle: string): void;\n setHexInputValue(value: string): void;\n setRgbaInputValue(rgba: IRGBA): void;\n setHsvaInputValue(hsva: IHSVA): void;\n updateA11y(hueValue: number, opacityValue: number): void;\n setGradientColor(value: string): void;\n getHueSliderElement(): HTMLElement;\n getOpacitySliderElement(): HTMLElement;\n getGradientElement(): HTMLElement;\n setActiveValueType(type: ColorPickerValueType): void;\n focusValueInput(type: ColorPickerValueType): void;\n setTypeClickListener(listener: (evt: MouseEvent) => void): void;\n removeTypeClickListener(listener: (evt: MouseEvent) => void): void;\n setHexInputListener(type: string, listener: (evt: Event) => void): void;\n removeHexInputListener(type: string, listener: (evt: Event) => void): void;\n getHexInputValue(): string;\n setRgbaInputListener(type: string, listener: (evt: Event) => void): void;\n removeRgbaInputListener(type: string, listener: (evt: Event) => void): void;\n getRgbaInputValue(): IRGBA;\n setHsvaInputListener(type: string, listener: (evt: Event) => void): void;\n removeHsvaInputListener(type: string, listener: (evt: Event) => void): void;\n getHsvaInputValue(): IHSVA;\n toggleOpacityControls(visible: boolean): void;\n}\n\nexport class ColorPickerAdapter extends BaseAdapter<IColorPickerComponent> implements IColorPickerAdapter {\n private _gradientElement: HTMLElement;\n private _previewColorElement: HTMLElement;\n private _hexInputElement: HTMLInputElement;\n private _rgbaInputRElement: HTMLInputElement;\n private _rgbaInputGElement: HTMLInputElement;\n private _rgbaInputBElement: HTMLInputElement;\n private _rgbaInputAElement: HTMLInputElement;\n private _hsvaInputHElement: HTMLInputElement;\n private _hsvaInputSElement: HTMLInputElement;\n private _hsvaInputVElement: HTMLInputElement;\n private _hsvaInputAElement: HTMLInputElement;\n private _hueSliderElement: HTMLElement;\n private _hueSliderThumbElement: HTMLElement;\n private _opacitySliderElement: HTMLElement;\n private _opacitySliderThumbElement: HTMLElement;\n private _hexValueContainerElement: HTMLElement;\n private _rgbaValueContainerElement: HTMLElement;\n private _hsvaValueContainerElement: HTMLElement;\n private _typeButtonElement: HTMLButtonElement;\n\n constructor(component: IColorPickerComponent) {\n super(component);\n this._gradientElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.GRADIENT);\n this._previewColorElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.PREVIEW_COLOR);\n this._hexInputElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.HEX_INPUT) as HTMLInputElement;\n this._rgbaInputRElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_R) as HTMLInputElement;\n this._rgbaInputGElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_G) as HTMLInputElement;\n this._rgbaInputBElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_B) as HTMLInputElement;\n this._rgbaInputAElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_A) as HTMLInputElement;\n this._hsvaInputHElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_H) as HTMLInputElement;\n this._hsvaInputSElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_S) as HTMLInputElement;\n this._hsvaInputVElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_V) as HTMLInputElement;\n this._hsvaInputAElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_A) as HTMLInputElement;\n this._hueSliderElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.HUE_SLIDER);\n this._hueSliderThumbElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.HUE_SLIDER_THUMB);\n this._opacitySliderElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.OPACITY_SLIDER);\n this._opacitySliderThumbElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.OPACITY_SLIDER_THUMB);\n this._hexValueContainerElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HEX_CONTAINER);\n this._rgbaValueContainerElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_CONTAINER);\n this._hsvaValueContainerElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_CONTAINER);\n this._typeButtonElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.TYPE_BUTTON) as HTMLButtonElement;\n }\n\n public setPreviewColor(rgbaStyle: string): void {\n this._previewColorElement.style.backgroundColor = rgbaStyle;\n }\n\n public setHexInputValue(value: string): void {\n this._hexInputElement.value = value;\n }\n\n public setRgbaInputValue(rgba: IRGBA): void {\n this._rgbaInputRElement.value = rgba.r.toString();\n this._rgbaInputGElement.value = rgba.g.toString();\n this._rgbaInputBElement.value = rgba.b.toString();\n this._rgbaInputAElement.value = rgba.a.toString();\n }\n\n public setHsvaInputValue(hsva: IHSVA): void {\n this._hsvaInputHElement.value = hsva.h.toString();\n this._hsvaInputSElement.value = hsva.s.toString();\n this._hsvaInputVElement.value = hsva.v.toString();\n this._hsvaInputAElement.value = hsva.a.toString();\n }\n\n public updateA11y(hueValue: number, opacityValue: number): void {\n this._hueSliderThumbElement.setAttribute('aria-valuenow', hueValue.toString());\n this._hueSliderThumbElement.setAttribute('aria-valuetext', hueValue.toString());\n\n this._opacitySliderThumbElement.setAttribute('aria-valuenow', opacityValue.toString());\n this._opacitySliderThumbElement.setAttribute('aria-valuetext', opacityValue.toString());\n }\n\n public setGradientColor(value: string): void {\n this._gradientElement.style.backgroundColor = value;\n }\n\n public getHueSliderElement(): HTMLElement {\n return this._hueSliderElement;\n }\n\n public getOpacitySliderElement(): HTMLElement {\n return this._opacitySliderElement;\n }\n\n public getGradientElement(): HTMLElement {\n return this._gradientElement;\n }\n\n public setActiveValueType(type: ColorPickerValueType): void {\n this._hexValueContainerElement.style.display = 'none';\n this._rgbaValueContainerElement.style.display = 'none';\n this._hsvaValueContainerElement.style.display = 'none';\n\n switch (type) {\n case ColorPickerValueType.HEX:\n this._hexValueContainerElement.style.removeProperty('display');\n break;\n case ColorPickerValueType.RGBA:\n this._rgbaValueContainerElement.style.removeProperty('display');\n break;\n case ColorPickerValueType.HSVA:\n this._hsvaValueContainerElement.style.removeProperty('display');\n break;\n }\n }\n\n public focusValueInput(type: ColorPickerValueType): void {\n switch (type) {\n case ColorPickerValueType.HEX:\n this._hexInputElement.focus();\n this._hexInputElement.select();\n break;\n case ColorPickerValueType.RGBA:\n this._rgbaInputRElement.focus();\n this._rgbaInputRElement.select();\n break;\n case ColorPickerValueType.HSVA:\n this._hsvaInputHElement.focus();\n this._hsvaInputHElement.select();\n break;\n }\n }\n\n public setTypeClickListener(listener: (evt: MouseEvent) => void): void {\n this._typeButtonElement.addEventListener('click', listener);\n }\n\n public removeTypeClickListener(listener: (evt: MouseEvent) => void): void {\n this._typeButtonElement.removeEventListener('click', listener);\n }\n\n public setHexInputListener(type: string, listener: (evt: Event) => void): void {\n this._hexInputElement.addEventListener(type, listener);\n }\n\n public removeHexInputListener(type: string, listener: (evt: Event) => void): void {\n this._hexInputElement.removeEventListener(type, listener);\n }\n\n public getHexInputValue(): string {\n return this._hexInputElement.value;\n }\n\n public setRgbaInputListener(type: string, listener: (evt: Event) => void): void {\n this._rgbaInputRElement.addEventListener(type, listener);\n this._rgbaInputGElement.addEventListener(type, listener);\n this._rgbaInputBElement.addEventListener(type, listener);\n this._rgbaInputAElement.addEventListener(type, listener);\n }\n\n public removeRgbaInputListener(type: string, listener: (evt: Event) => void): void {\n this._rgbaInputRElement.removeEventListener(type, listener);\n this._rgbaInputGElement.removeEventListener(type, listener);\n this._rgbaInputBElement.removeEventListener(type, listener);\n this._rgbaInputAElement.removeEventListener(type, listener);\n }\n\n public getRgbaInputValue(): IRGBA {\n return {\n r: parseInt(this._rgbaInputRElement.value, 10),\n g: parseInt(this._rgbaInputGElement.value, 10),\n b: parseInt(this._rgbaInputBElement.value, 10),\n a: parseFloat(this._rgbaInputAElement.value)\n };\n }\n\n public setHsvaInputListener(type: string, listener: (evt: Event) => void): void {\n this._hsvaInputHElement.addEventListener(type, listener);\n this._hsvaInputSElement.addEventListener(type, listener);\n this._hsvaInputVElement.addEventListener(type, listener);\n this._hsvaInputAElement.addEventListener(type, listener);\n }\n\n public removeHsvaInputListener(type: string, listener: (evt: Event) => void): void {\n this._hsvaInputHElement.removeEventListener(type, listener);\n this._hsvaInputSElement.removeEventListener(type, listener);\n this._hsvaInputVElement.removeEventListener(type, listener);\n this._hsvaInputAElement.removeEventListener(type, listener);\n }\n\n public getHsvaInputValue(): IHSVA {\n return {\n h: parseInt(this._hsvaInputHElement.value, 10),\n s: parseInt(this._hsvaInputSElement.value, 10),\n v: parseInt(this._hsvaInputVElement.value, 10),\n a: parseFloat(this._hsvaInputAElement.value)\n };\n }\n\n public toggleOpacityControls(visible: boolean): void {\n if (visible) {\n this._opacitySliderElement.style.removeProperty('display');\n if (this._rgbaInputAElement.parentElement) {\n this._rgbaInputAElement.parentElement.style.removeProperty('display');\n }\n if (this._hsvaInputAElement.parentElement) {\n this._hsvaInputAElement.parentElement.style.removeProperty('display');\n }\n } else {\n this._opacitySliderElement.style.display = 'none';\n if (this._rgbaInputAElement.parentElement) {\n this._rgbaInputAElement.parentElement.style.display = 'none';\n }\n if (this._hsvaInputAElement.parentElement) {\n this._hsvaInputAElement.parentElement.style.display = 'none';\n }\n }\n }\n}\n", "import { isNumber } from '@tylertech/forge-core';\n\nimport { IRGBA, IHSVA } from './color-picker-constants';\n\n/**\n * Calcuates coordinates relative to the provided element based on absolute coordinates.\n * @param absX The x coordinate in screen space.\n * @param absY The y coordinate in screen space.\n * @param element The element to calculate the relative coordinates from.\n */\nexport function relativeCoords(absX: number, absY: number, element: HTMLElement): { x: number; y: number; height: number; width: number } {\n const bounds = element.getBoundingClientRect();\n let x = absX - bounds.left;\n let y = absY - bounds.top;\n\n if (x > bounds.width) {\n x = bounds.width;\n } else if (x < 0) {\n x = 0;\n }\n\n if (y > bounds.height) {\n y = bounds.height;\n } else if (y < 0) {\n y = 0;\n }\n\n return { x, y, height: bounds.height, width: bounds.width };\n}\n\nexport function hsvaToRgba(hsva: IHSVA): IRGBA {\n let r: number;\n let g: number;\n let b: number;\n const h = hsva.h / 60;\n const s = hsva.s / 100;\n const v = hsva.v / 100;\n\n if (s === 0) {\n r = g = b = v;\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n a: hsva.a\n };\n }\n\n const i = Math.floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n default: r = v; g = p; b = q;\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n a: hsva.a\n };\n}\n\nexport function rgbaToHex(rgba: IRGBA): string {\n return toHex(rgba.r) + toHex(rgba.g) + toHex(rgba.b) + (Math.round(rgba.a * 255) + 0x10000).toString(16).substr(-2);\n}\n\nexport function toHex(x: number): string {\n return ('0' + x.toString(16)).slice(-2);\n}\n\nexport function hexToRgba(hex: string): IRGBA {\n const isShorthand = hex.length === 3 || hex.length === 4;\n const hexR = isShorthand ? `${hex.slice(0, 1)}${hex.slice(0, 1)}` : hex.slice(0, 2);\n const hexG = isShorthand ? `${hex.slice(1, 2)}${hex.slice(1, 2)}` : hex.slice(2, 4);\n const hexB = isShorthand ? `${hex.slice(2, 3)}${hex.slice(2, 3)}` : hex.slice(4, 6);\n const hexA = (isShorthand ? `${hex.slice(3, 4)}${hex.slice(3, 4)}` : hex.slice(6, 8)) || 'ff';\n\n return {\n r: parseInt(hexR, 16),\n g: parseInt(hexG, 16),\n b: parseInt(hexB, 16),\n a: parseFloat((parseInt(hexA, 16) / 255).toFixed(2))\n };\n}\n\nexport function formatRgba(rgba: IRGBA): string {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n}\n\nexport function formatHex(value: string, allowOpacity: boolean): string {\n let hex = value.replace(/^#/, '');\n\n if (!allowOpacity) {\n if (hex.length === 4) {\n hex = hex.substring(0, 3);\n } else if (hex.length === 8) {\n hex = hex.substring(0, 6);\n }\n }\n\n return `#${hex}`;\n}\n\nexport function rgbaToHsva(rgba: IRGBA): IHSVA {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = max;\n let s = max;\n const v = max;\n\n const d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n v: Math.round(v * 100),\n a: rgba.a\n };\n}\n\n/**\n * Determines if the provided hex color string is valid.\n * @param value The hex color string.\n */\nexport function isValidHex(value: string): boolean {\n if (!value || typeof value !== 'string') {\n return false;\n }\n\n if (value.substring(0, 1) === '#') {\n value = value.substring(1);\n }\n\n switch (value.length) {\n case 3: return /^[0-9A-F]{3}$/i.test(value);\n case 4: return /^[0-9A-F]{4}$/i.test(value);\n case 6: return /^[0-9A-F]{6}$/i.test(value);\n case 8: return /^[0-9A-F]{8}$/i.test(value);\n default: return false;\n }\n}\n\n/**\n * Determines if the provided RGBA values are valid.\n * @param value The RGBA color values.\n */\nexport function isValidRGBA(value: IRGBA): boolean {\n return isNumber(value.r) && value.r >= 0 && value.r <= 255 &&\n isNumber(value.g) && value.g >= 0 && value.g <= 255 &&\n isNumber(value.b) && value.b >= 0 && value.b <= 255 &&\n isNumber(value.a) && value.a >= 0 && value.a <= 1;\n}\n\n/**\n * Determines if the provided HSVA values are valid.\n * @param value The HSVA color values.\n */\nexport function isValidHSVA(value: IHSVA): boolean {\n return isNumber(value.h) && value.h >= 0 && value.h <= 360 &&\n isNumber(value.s) && value.s >= 0 && value.s <= 100 &&\n isNumber(value.v) && value.v >= 0 && value.v <= 100 &&\n isNumber(value.a) && value.a >= 0 && value.a <= 1;\n}\n", "import { COLOR_PICKER_CONSTANTS } from './color-picker-constants';\nimport { relativeCoords } from './color-picker-utils';\n\nexport class ColorPickerGradientSlider {\n private _xPercent: number;\n private _yPercent: number;\n private _thumbElement: HTMLElement;\n private _keydownListener: (evt: KeyboardEvent) => void;\n private _downListener: (evt: MouseEvent & TouchEvent) => void;\n private _moveListener: (evt: MouseEvent & TouchEvent) => void;\n private _upListener: (evt: MouseEvent & TouchEvent) => void;\n\n constructor(private _rootElement: HTMLElement, private _changeListener: (x: number, y: number) => void) {\n this._keydownListener = evt => this._onKeydown(evt);\n this._downListener = evt => this._onDown(evt);\n this._moveListener = evt => this._onMove(evt);\n this._upListener = evt => this._onUp(evt);\n this._initialize();\n }\n\n public destroy(): void {\n this._unlisten();\n }\n\n public setValue(saturation: number, value: number): void {\n window.requestAnimationFrame(() => {\n const bounds = this._rootElement.getBoundingClientRect();\n this._xPercent = Math.round(bounds.width * (saturation / 100));\n this._yPercent = bounds.height - Math.round(bounds.height * (value / 100));\n this._setThumbPosition(this._xPercent, this._yPercent);\n });\n }\n\n private _initialize(): void {\n this._thumbElement = this._rootElement.querySelector(COLOR_PICKER_CONSTANTS.selectors.GRADIENT_THUMB) as HTMLElement;\n this._listen();\n this._setThumbPosition(this._xPercent, this._yPercent);\n }\n\n private _listen(): void {\n this._rootElement.addEventListener('keydown', this._keydownListener);\n this._rootElement.addEventListener('mousedown', this._downListener);\n this._rootElement.addEventListener('touchstart', this._downListener);\n }\n\n private _unlisten(): void {\n this._rootElement.removeEventListener('keydown', this._keydownListener);\n this._rootElement.removeEventListener('mousedown', this._downListener);\n this._rootElement.removeEventListener('touchstart', this._downListener);\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n }\n\n private _onKeydown(evt: KeyboardEvent): void {\n const isEnterKey = evt.key === 'Enter' || evt.keyCode === 13;\n const isArrowLeftKey = evt.key === 'ArrowLeft' || evt.keyCode === 37;\n const isArrowUpKey = evt.key === 'ArrowUp' || evt.keyCode === 38;\n const isArrowRightKey = evt.key === 'ArrowRight' || evt.keyCode === 39;\n const isArrowDownKey = evt.key === 'ArrowDown' || evt.keyCode === 40;\n\n const bounds = this._rootElement.getBoundingClientRect();\n\n if (isArrowDownKey) {\n evt.preventDefault();\n this._yPercent++;\n } else if (isArrowUpKey) {\n evt.preventDefault();\n this._yPercent--;\n } else if (isArrowLeftKey) {\n evt.preventDefault();\n this._xPercent--;\n } else if (isArrowRightKey) {\n evt.preventDefault();\n this._xPercent++;\n } else if (isEnterKey) {\n evt.preventDefault();\n // TODO(kieran.nichols): Select the current color\n } else {\n return;\n }\n\n if (this._xPercent > bounds.width) {\n this._xPercent = bounds.width;\n } else if (this._xPercent < 0) {\n this._xPercent = 0;\n }\n\n if (this._yPercent > bounds.height) {\n this._yPercent = bounds.height;\n } else if (this._yPercent < 0) {\n this._yPercent = 0;\n }\n\n this._setThumbPosition(this._xPercent, this._yPercent);\n this._notify();\n }\n\n private _onDown(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n document.addEventListener('mousemove', this._moveListener);\n document.addEventListener('touchmove', this._moveListener);\n document.addEventListener('mouseup', this._upListener);\n document.addEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n }\n\n private _onMove(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n this._updateThumbPosition(evt);\n }\n\n private _onUp(evt: MouseEvent & TouchEvent): void {\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n this._thumbElement.focus();\n }\n\n private _updateThumbPosition(evt: MouseEvent & TouchEvent): void {\n const isMouseEvent = /^mouse/.test(evt.type);\n const x = isMouseEvent ? evt.clientX : evt.changedTouches[0].clientX;\n const y = isMouseEvent ? evt.clientY : evt.changedTouches[0].clientY;\n const coords = this._calculateSliderPercent(x, y);\n this._setThumbPosition(coords.x, coords.y);\n this._xPercent = parseInt(((coords.x / coords.width) * 100).toString(), 10);\n this._yPercent = Math.abs(parseInt(((coords.y / coords.height) * 100).toString(), 10) - 100);\n this._notify();\n }\n\n private _calculateSliderPercent(absX: number, absY: number): { x: number; y: number; width: number; height: number } {\n return relativeCoords(absX, absY, this._rootElement);\n }\n\n private _setThumbPosition(xPercent: number, yPercent: number): void {\n this._thumbElement.style.left = `${xPercent}px`;\n this._thumbElement.style.top = `${yPercent}px`;\n }\n\n private _notify(): void {\n if (typeof this._changeListener === 'function') {\n this._changeListener(this._xPercent, this._yPercent);\n }\n }\n}\n", "import { COLOR_PICKER_CONSTANTS } from './color-picker-constants';\nimport { relativeCoords } from './color-picker-utils';\n\nexport interface IColorPickerSliderOptions {\n min: number;\n max: number;\n step: number;\n change: (value: number) => void;\n}\n\nexport class ColorPickerSlider {\n private _percent = 1;\n private _min = 0;\n private _max = 1;\n private _step = 0.01;\n private _thumbElement: HTMLElement;\n private _keydownListener: (evt: KeyboardEvent) => void;\n private _downListener: (evt: MouseEvent & TouchEvent) => void;\n private _moveListener: (evt: MouseEvent & TouchEvent) => void;\n private _upListener: (evt: MouseEvent & TouchEvent) => void;\n \n constructor(private _rootElement: HTMLElement, private _changeListener: (value: number) => void) {\n this._keydownListener = evt => this._onKeydown(evt);\n this._downListener = evt => this._onDown(evt);\n this._moveListener = evt => this._onMove(evt);\n this._upListener = evt => this._onUp(evt);\n this._initialize();\n }\n\n public destroy(): void {\n this._unlisten();\n }\n\n public setValue(value: number): void {\n this._percent = value;\n this._setThumbPosition(this._percent);\n }\n\n private _initialize(): void {\n this._thumbElement = this._rootElement.querySelector(COLOR_PICKER_CONSTANTS.selectors.SLIDER_THUMB) as HTMLElement;\n this._listen();\n this._setThumbPosition(this._percent);\n }\n\n private _listen(): void {\n this._thumbElement.addEventListener('keydown', this._keydownListener);\n this._rootElement.addEventListener('mousedown', this._downListener);\n this._rootElement.addEventListener('touchstart', this._downListener);\n }\n\n private _unlisten(): void {\n this._thumbElement.removeEventListener('keydown', this._keydownListener);\n this._rootElement.removeEventListener('mousedown', this._downListener);\n this._rootElement.removeEventListener('touchstart', this._downListener);\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n }\n\n private _onKeydown(evt: KeyboardEvent): void {\n const isArrowLeftKey = evt.key === 'ArrowLeft' || evt.keyCode === 37;\n const isArrowRightKey = evt.key === 'ArrowRight' || evt.keyCode === 39;\n const isHomeKey = evt.key === 'Home' || evt.keyCode === 36;\n const isEndKey = evt.key === 'End' || evt.keyCode === 35;\n\n if (isArrowLeftKey) {\n evt.preventDefault();\n this._percent -= this._step;\n } else if (isArrowRightKey) {\n evt.preventDefault();\n this._percent += this._step;\n } else if (isHomeKey) {\n evt.preventDefault();\n this._percent = this._min;\n } else if (isEndKey) {\n evt.preventDefault();\n this._percent = this._max;\n }\n\n if (this._percent < this._min) {\n this._percent = this._min;\n } else if (this._percent > this._max) {\n this._percent = this._max;\n }\n\n this._setThumbPosition(this._percent);\n this._notify();\n }\n\n private _onDown(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n document.addEventListener('mousemove', this._moveListener);\n document.addEventListener('touchmove', this._moveListener);\n document.addEventListener('mouseup', this._upListener);\n document.addEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n }\n\n private _onMove(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n this._thumbElement.classList.add(COLOR_PICKER_CONSTANTS.classes.SLIDER_THUMB_ACTIVE);\n this._updateThumbPosition(evt);\n }\n\n private _onUp(evt: MouseEvent & TouchEvent): void {\n this._thumbElement.classList.remove(COLOR_PICKER_CONSTANTS.classes.SLIDER_THUMB_ACTIVE);\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n this._thumbElement.focus();\n }\n\n private _updateThumbPosition(evt: MouseEvent & TouchEvent): void {\n const x = /^mouse/.test(evt.type) ? evt.clientX : evt.changedTouches[0].clientX;\n this._percent = this._calculateSliderPercent(x);\n this._setThumbPosition(this._percent);\n this._notify();\n }\n\n private _calculateSliderPercent(absX: number): number {\n const coords = relativeCoords(absX, 0, this._rootElement);\n return parseFloat((coords.x / coords.width).toFixed(2));\n }\n\n private _setThumbPosition(percent: number): void {\n this._thumbElement.style.left = `${percent * 100}%`;\n }\n\n private _notify(): void {\n if (typeof this._changeListener === 'function') {\n this._changeListener(this._percent);\n }\n }\n}\n", "import { ICustomElementFoundation, debounce } from '@tylertech/forge-core';\nimport { IColorPickerAdapter } from './color-picker-adapter';\nimport { ColorPickerValueType, COLOR_PICKER_CONSTANTS, DEFAULT_COLOR, IColorPickerChangeEventData, IHSVA, IRGBA, ColorPickerChangeEventType, ColorPickerChangeEventSource } from './color-picker-constants';\nimport { ColorPickerGradientSlider } from './color-picker-gradient-slider';\nimport { ColorPickerSlider } from './color-picker-slider';\nimport { formatHex, formatRgba, hexToRgba, hsvaToRgba, isValidHex, isValidHSVA, isValidRGBA, rgbaToHex, rgbaToHsva } from './color-picker-utils';\n\nexport interface IColorPickerFoundation extends ICustomElementFoundation {\n value: string | null | undefined;\n rgba: IRGBA | null | undefined;\n hsva: IHSVA | null | undefined;\n opacity: number | null | undefined;\n allowOpacity: boolean;\n debounceChangeEvent: boolean;\n}\n\nexport class ColorPickerFoundation implements IColorPickerFoundation {\n private _value: string | null | undefined = null;\n private _allowOpacity = true;\n private _hex = DEFAULT_COLOR;\n private _hsva: IHSVA = { h: 0, s: 0, v: 0, a: 1 };\n private _rgba: IRGBA = { r: 0, g: 0, b: 0, a: 1 };\n private _debounceChangeEvent = false;\n private _valueType = ColorPickerValueType.HEX;\n private _gradientSlider: ColorPickerGradientSlider;\n private _hueSlider: ColorPickerSlider;\n private _opacitySlider: ColorPickerSlider;\n private _initialized = false;\n private _gradientSliderChangedListener: (x: number, y: number) => void;\n private _hueSliderChangedListener: (percent: number) => void;\n private _opacitySliderChangedListener: (percent: number) => void;\n private _typeClickListener: (evt: MouseEvent) => void;\n private _hexInputChangedListener: (evt: KeyboardEvent) => void;\n private _rgbaInputChangedListener: (evt: KeyboardEvent) => void;\n private _hsvaInputChangedListener: (evt: KeyboardEvent) => void;\n private _triggerChangeEvent: (type: ColorPickerChangeEventType, source: ColorPickerChangeEventSource) => void;\n\n constructor(private _adapter: IColorPickerAdapter) {\n this._gradientSliderChangedListener = (x, y) => this._onGradientSliderChanged(x, y);\n this._hueSliderChangedListener = value => this._onHueSliderChanged(value);\n this._opacitySliderChangedListener = value => this._onOpacitySliderChanged(value);\n this._typeClickListener = evt => this._onTypeClicked(evt);\n this._hexInputChangedListener = evt => this._onHexInputChanged();\n this._rgbaInputChangedListener = evt => this._onRgbaInputChanged();\n this._hsvaInputChangedListener = evt => this._onHsvaInputChanged();\n }\n \n public initialize(): void {\n this._initialized = true;\n this._applyChangeEventTrigger();\n this._adapter.setTypeClickListener(this._typeClickListener);\n this._adapter.setHexInputListener('input', this._hexInputChangedListener);\n this._adapter.setRgbaInputListener('input', this._rgbaInputChangedListener);\n this._adapter.setHsvaInputListener('input', this._hsvaInputChangedListener);\n this._gradientSlider = new ColorPickerGradientSlider(this._adapter.getGradientElement(), this._gradientSliderChangedListener);\n this._hueSlider = new ColorPickerSlider(this._adapter.getHueSliderElement(), this._hueSliderChangedListener);\n this._opacitySlider = new ColorPickerSlider(this._adapter.getOpacitySliderElement(), this._opacitySliderChangedListener);\n\n this._initializeOpacity();\n this._setColorFromHex();\n this._adapter.setActiveValueType(this._valueType);\n }\n\n public disconnect(): void {\n this._adapter.removeTypeClickListener(this._typeClickListener);\n this._adapter.removeHexInputListener('input', this._hexInputChangedListener);\n this._adapter.removeRgbaInputListener('input', this._hexInputChangedListener);\n this._adapter.removeHsvaInputListener('input', this._hexInputChangedListener);\n\n this._gradientSlider.destroy();\n this._hueSlider.destroy();\n this._opacitySlider.destroy();\n this._initialized = false;\n }\n\n private _applyChangeEventTrigger(): void {\n if (this._debounceChangeEvent) {\n this._triggerChangeEvent = debounce((type: ColorPickerChangeEventType, source: ColorPickerChangeEventSource) => {\n this._emitChangeEvent(type, source);\n }, COLOR_PICKER_CONSTANTS.numbers.CHANGE_EVENT_DEBOUNCE_THRESHOLD, false);\n } else {\n this._triggerChangeEvent = (type, source) => this._emitChangeEvent(type, source);\n }\n }\n\n private _initializeOpacity(): void {\n this._hsva.a = 1;\n this._adapter.toggleOpacityControls(this._allowOpacity);\n this._render();\n }\n\n private _onTypeClicked(evt: MouseEvent): void {\n if (this._valueType === ColorPickerValueType.HEX) {\n this._valueType = ColorPickerValueType.RGBA;\n } else if (this._valueType === ColorPickerValueType.RGBA) {\n this._valueType = ColorPickerValueType.HSVA;\n } else if (this._valueType === ColorPickerValueType.HSVA) {\n this._valueType = ColorPickerValueType.HEX;\n }\n\n this._adapter.setActiveValueType(this._valueType);\n this._adapter.focusValueInput(this._valueType);\n }\n\n private _onHexInputChanged(): void {\n const value = this._adapter.getHexInputValue();\n if (isValidHex(value)) {\n this.value = value;\n this._triggerChangeEvent('input', 'hex');\n }\n }\n\n private _onRgbaInputChanged(): void {\n const value = this._adapter.getRgbaInputValue();\n if (isValidRGBA(value)) {\n this.value = rgbaToHex(value);\n this._triggerChangeEvent('input', 'rgba');\n }\n }\n\n private _onHsvaInputChanged(): void {\n const value = this._adapter.getHsvaInputValue();\n if (isValidHSVA(value)) {\n this.value = rgbaToHex(hsvaToRgba(value));\n this._triggerChangeEvent('input', 'hsva');\n }\n }\n\n private _setColorFromHex(): void {\n this._rgba = hexToRgba(this._hex);\n this._hsva = rgbaToHsva(this._rgba);\n\n if (this._initialized) {\n this._gradientSlider.setValue(this._hsva.s, this._hsva.v);\n this._hueSlider.setValue(parseFloat((this._hsva.h / 360).toFixed(2)));\n this._opacitySlider.setValue(this._hsva.a);\n this._render();\n }\n }\n\n private _onGradientSliderChanged(x: number, y: number): void {\n this._hsva.s = x;\n this._hsva.v = y;\n this._syncColors();\n this._render();\n this._triggerChangeEvent('slider', 'gradient');\n }\n\n private _onHueSliderChanged(value: number): void {\n this._hsva.h = parseInt((360 * value).toString(), 10);\n this._syncColors();\n this._setGradientColor();\n this._render();\n this._triggerChangeEvent('slider', 'hue');\n }\n\n private _onOpacitySliderChanged(value: number): void {\n this._hsva.a = value;\n this._syncColors();\n this._render();\n this._triggerChangeEvent('slider', 'opacity');\n }\n\n private _setGradientColor(): void {\n const rgba = hsvaToRgba({ h: this._hsva.h, s: 100, v: 100, a: 1 });\n this._adapter.setGradientColor(`rgb(${rgba.r}, ${rgba.g}, ${rgba.b})`);\n }\n\n private _syncColors(): void {\n this._rgba = hsvaToRgba(this._hsva);\n this._hex = rgbaToHex(this._rgba);\n this._value = this._hex || null;\n }\n\n private _render(): void {\n this._setGradientColor();\n this._adapter.setPreviewColor(formatRgba(this._rgba));\n this._adapter.setHexInputValue(this._getFormattedHex());\n this._adapter.setRgbaInputValue(this._rgba);\n this._adapter.setHsvaInputValue(this._hsva);\n this._adapter.updateA11y(this._hsva.h, Math.round(this._hsva.a * 100));\n }\n\n private _getFormattedHex(): string {\n return formatHex(this._hex, false);\n }\n\n private _emitChangeEvent(type: ColorPickerChangeEventType, source: ColorPickerChangeEventSource): void {\n const data: IColorPickerChangeEventData = {\n type,\n source,\n hex: formatHex(this._hex, false).replace(/^#/, ''),\n rgba: this._rgba,\n hsva: this._hsva\n };\n if (this._allowOpacity) {\n data.alpha = this._hsva.a;\n }\n this._adapter.emitHostEvent(COLOR_PICKER_CONSTANTS.events.CHANGE, data);\n }\n\n public get value(): string | null | undefined {\n return this._getFormattedHex();\n }\n public set value(value: string | null | undefined) {\n if (this._value !== value) {\n this._value = value || DEFAULT_COLOR;\n\n if (!isValidHex(this._value)) {\n throw new Error('Invalid hex value provided.');\n }\n\n this._hex = this._value.replace(/^#/, '');\n this._setColorFromHex();\n this._adapter.setHostAttribute(COLOR_PICKER_CONSTANTS.attributes.VALUE, this._value);\n }\n }\n\n public get rgba(): IRGBA | null | undefined {\n return !!this._rgba ? { ...this._rgba } : null;\n }\n public set rgba(value: IRGBA | null | undefined) {\n if (value) {\n if (isValidRGBA(value)) {\n this.value = rgbaToHex(value);\n }\n } else {\n this.value = null;\n }\n }\n\n public get hsva(): IHSVA | null | undefined {\n return !!this._hsva ? { ...this._hsva } : null;\n }\n public set hsva(value: IHSVA | null | undefined) {\n if (value) {\n if (isValidHSVA(value)) {\n this.value = rgbaToHex(hsvaToRgba(value));\n }\n } else {\n this.value = null;\n }\n }\n\n public get opacity(): number | null | undefined {\n return this._hsva ? this._hsva.a : null;\n }\n public set opacity(value: number | null | undefined) {\n if (this._hsva.a !== value) {\n if (value != null && this._allowOpacity) {\n if (value >= 0 && value <= 1) {\n this._hsva.a = value;\n this._syncColors();\n\n if (this._initialized) {\n this._opacitySlider.setValue(this._hsva.a);\n this._render();\n }\n } else {\n console.warn(`The provided opacity value (${value}) must be between 0 and 1.`);\n }\n }\n }\n }\n\n public get allowOpacity(): boolean {\n return this._allowOpacity;\n }\n public set allowOpacity(value: boolean) {\n this._allowOpacity = value;\n if (this._initialized) {\n this._initializeOpacity();\n }\n }\n\n public get debounceChangeEvent(): boolean {\n return this._debounceChangeEvent;\n }\n public set debounceChangeEvent(value: boolean) {\n if (this._debounceChangeEvent !== value) {\n this._debounceChangeEvent = value;\n if (this._initialized) {\n this._applyChangeEventTrigger();\n }\n }\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, FoundationProperty } from '@tylertech/forge-core';\nimport { tylIconUnfoldMore } from '@tylertech/tyler-icons/standard';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\nimport { IconComponent, IconRegistry } from '../icon';\nimport { IconButtonComponent } from '../icon-button';\nimport { TooltipComponent } from '../tooltip';\nimport { ColorPickerAdapter } from './color-picker-adapter';\nimport { COLOR_PICKER_CONSTANTS, IColorPickerChangeEventData, IHSVA, IRGBA } from './color-picker-constants';\nimport { ColorPickerFoundation } from './color-picker-foundation';\n\nconst template = '<template><div class=\\\"forge-color-picker\\\" part=\\\"root\\\"><input type=\\\"color\\\" tabindex=\\\"-1\\\" class=\\\"forge-color-picker__input\\\" spellcheck=\\\"false\\\" autocomplete=\\\"off\\\" aria-label=\\\"Color picker value\\\" part=\\\"input\\\"><div class=\\\"forge-color-picker__container\\\" part=\\\"container\\\"><div class=\\\"forge-color-picker__gradient\\\" tabindex=\\\"0\\\" part=\\\"gradient\\\"><div class=\\\"forge-color-picker__gradient-color\\\" part=\\\"gradient-color\\\"></div><div class=\\\"forge-color-picker__gradient-thumb\\\" part=\\\"gradient-thumb\\\"></div></div><div class=\\\"forge-color-picker__control-preview\\\" part=\\\"controls-preview-container\\\"><div class=\\\"forge-color-picker__controls\\\" part=\\\"controls-container\\\"><div class=\\\"forge-color-picker__slider-control\\\" part=\\\"hue-control-container\\\"><div class=\\\"forge-color-picker__slider forge-color-picker__hue-slider\\\" part=\\\"hue-control-slider\\\"><div class=\\\"forge-color-picker__slider-thumb\\\" id=\\\"forge-color-picker-hue-thumb\\\" part=\\\"hue-control-slider-thumb\\\" tabindex=\\\"0\\\" role=\\\"slider\\\" aria-label=\\\"Change hue\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"360\\\" aria-valuenow=\\\"0\\\" aria-orientation=\\\"horizontal\\\" aria-valuetext=\\\"0\\\"></div></div></div><div class=\\\"forge-color-picker__slider-control\\\" part=\\\"opacity-control-container\\\"><div class=\\\"forge-color-picker__canvas\\\" part=\\\"opacity-control-canvas\\\"><div class=\\\"forge-color-picker__slider forge-color-picker__opacity-slider\\\" part=\\\"opacity-control-slider\\\"><div class=\\\"forge-color-picker__slider-thumb\\\" id=\\\"forge-color-picker-opacity-thumb\\\" part=\\\"opacity-control-slider-thumb\\\" tabindex=\\\"0\\\" role=\\\"slider\\\" aria-label=\\\"Change opacity\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" aria-valuenow=\\\"0\\\" aria-orientation=\\\"horizontal\\\" aria-valuetext=\\\"0\\\"></div></div></div></div></div><div class=\\\"forge-color-picker__color-preview-container forge-color-picker__canvas\\\" part=\\\"color-preview-container\\\"><div class=\\\"forge-color-picker__color-preview\\\" part=\\\"color-preview\\\"></div></div></div><div class=\\\"forge-color-picker__value\\\" part=\\\"value-container\\\"><div class=\\\"forge-color-picker__color-types\\\" part=\\\"types-container\\\"><div class=\\\"forge-color-picker__color-hex\\\" part=\\\"hex-type-container\\\"><div part=\\\"hex-type-label-wrapper\\\"><label for=\\\"forge-color-picker-hex-input\\\" part=\\\"hex-label\\\">HEX</label></div><input type=\\\"text\\\" id=\\\"forge-color-picker-hex-input\\\" part=\\\"hex-input\\\" style=\\\"width: 88px;\\\" maxlength=\\\"9\\\" spellcheck=\\\"false\\\" autocomplete=\\\"off\\\" aria-label=\\\"HEX value\\\"></div><div class=\\\"forge-color-picker__color-rgba\\\" part=\\\"rgba-type-container\\\"><div part=\\\"rgba-type-wrapper-r\\\"><label for=\\\"forge-color-picker-rgba-r-input\\\" part=\\\"rgba-type-label-r\\\">R</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-r-input\\\" part=\\\"rgba-type-input-r\\\" min=\\\"0\\\" max=\\\"255\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Red\\\"></div><div part=\\\"rgba-type-wrapper-g\\\"><label for=\\\"forge-color-picker-rgba-g-input\\\" part=\\\"rgba-type-label-g\\\">G</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-g-input\\\" part=\\\"rgba-type-input-g\\\" min=\\\"0\\\" max=\\\"255\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Green\\\"></div><div part=\\\"rgba-type-wrapper-b\\\"><label for=\\\"forge-color-picker-rgba-b-input\\\" part=\\\"rgba-type-label-b\\\">B</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-b-input\\\" part=\\\"rgba-type-input-b\\\" min=\\\"0\\\" max=\\\"255\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Blue\\\"></div><div part=\\\"rgba-type-wrapper-a\\\"><label for=\\\"forge-color-picker-rgba-a-input\\\" part=\\\"rgba-type-label-a\\\">A</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-a-input\\\" part=\\\"rgba-type-input-a\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Alpha\\\"></div></div><div class=\\\"forge-color-picker__color-hsva\\\" part=\\\"hsva-type-container\\\"><div part=\\\"hsva-type-wrapper-h\\\"><label for=\\\"forge-color-picker-hsva-h-input\\\" part=\\\"hsva-type-label-h\\\">H</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-h-input\\\" part=\\\"hsva-type-input-h\\\" min=\\\"0\\\" max=\\\"360\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Hue\\\"></div><div part=\\\"hsva-type-wrapper-s\\\"><label for=\\\"forge-color-picker-hsva-s-input\\\" part=\\\"hsva-type-label-s\\\">S</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-s-input\\\" part=\\\"hsva-type-input-s\\\" min=\\\"0\\\" max=\\\"100\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Saturation\\\"></div><div part=\\\"hsva-type-wrapper-v\\\"><label for=\\\"forge-color-picker-hsva-v-input\\\" part=\\\"hsva-type-label-v\\\">V</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-v-input\\\" part=\\\"hsva-type-input-v\\\" min=\\\"0\\\" max=\\\"100\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Value\\\"></div><div part=\\\"hsva-type-wrapper-a\\\"><label for=\\\"forge-color-picker-hsva-a-input\\\" part=\\\"hsva-type-label-a\\\">A</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-a-input\\\" part=\\\"hsva-type-input-a\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Alpha\\\"></div></div></div><div class=\\\"forge-color-picker__type-button\\\" part=\\\"type-container\\\"><forge-icon-button part=\\\"type-button\\\"><button type=\\\"button\\\" id=\\\"forge-color-picker-type-button\\\" aria-labelledby=\\\"type-button-tooltip\\\" part=\\\"type-button-element\\\"><forge-icon name=\\\"unfold_more\\\" part=\\\"type-button-icon\\\"></forge-icon></button><forge-tooltip delay=\\\"500\\\" position=\\\"bottom\\\" id=\\\"type-button-tooltip\\\">Change color format</forge-tooltip></forge-icon-button></div></div></div></div></template>';\nconst styles = '.forge-icon-button{display:-webkit-inline-box;display:inline-flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border:none;outline:0;background-color:transparent;fill:currentColor;color:inherit;font-size:24px;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:48px;height:48px;padding:12px}.forge-icon-button forge-icon,.forge-icon-button img,.forge-icon-button svg{width:24px;height:24px}.forge-icon-button:disabled{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-disabled-on-light,rgba(0,0,0,.38))}.forge-icon-button:disabled{cursor:default;pointer-events:none}.forge-icon-button__icon{display:inline-block}.forge-icon-button__icon.forge-icon-button__icon--on{display:none}.forge-icon-button--on .forge-icon-button__icon{display:none}.forge-icon-button--on .forge-icon-button__icon.forge-icon-button__icon--on{display:inline-block}@-webkit-keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4,0,0.2,1);animation-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4,0,0.2,1);animation-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.forge-icon-button{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:transparent;will-change:transform,opacity}.forge-icon-button::after,.forge-icon-button::before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\\\"\\\"}.forge-icon-button::before{-webkit-transition:opacity 15ms linear,background-color 15ms linear;transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.forge-icon-button::after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.forge-icon-button.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale,1));transform:scale(var(--mdc-ripple-fg-scale,1))}.forge-icon-button.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.forge-icon-button.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.forge-icon-button.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.forge-icon-button.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.forge-icon-button::after,.forge-icon-button::before{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.forge-icon-button.mdc-ripple-upgraded::after,.forge-icon-button.mdc-ripple-upgraded::before{top:var(--mdc-ripple-top,calc(50% - 50%));left:var(--mdc-ripple-left,calc(50% - 50%));width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.forge-icon-button.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.forge-icon-button::after,.forge-icon-button::before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.forge-icon-button.mdc-ripple-surface--hover::before,.forge-icon-button:hover::before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity, .04)}.forge-icon-button.mdc-ripple-upgraded--background-focused::before,.forge-icon-button:not(.mdc-ripple-upgraded):focus::before{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity, .12)}.forge-icon-button:not(.mdc-ripple-upgraded)::after{-webkit-transition:opacity 150ms linear;transition:opacity 150ms linear}.forge-icon-button:not(.mdc-ripple-upgraded):active::after{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity, .12)}.forge-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}forge-icon-button{position:relative;display:inline-block;overflow:visible}.forge-icon-button--on{color:#3f51b5;color:var(--mdc-theme-primary,#3f51b5)}.forge-icon-button--on::after,.forge-icon-button--on::before{background-color:#3f51b5;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#3f51b5))}.forge-icon-button--on.mdc-ripple-surface--hover::before,.forge-icon-button--on:hover::before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity, .04)}.forge-icon-button--on.mdc-ripple-upgraded--background-focused::before,.forge-icon-button--on:not(.mdc-ripple-upgraded):focus::before{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity, .12)}.forge-icon-button--on:not(.mdc-ripple-upgraded)::after{-webkit-transition:opacity 150ms linear;transition:opacity 150ms linear}.forge-icon-button--on:not(.mdc-ripple-upgraded):active::after{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity, .12)}.forge-icon-button--on.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.forge-icon-button--on::before{background-color:#3f51b5;background-color:var(--mdc-theme-primary,#3f51b5);opacity:.08}.forge-icon-button--dense{width:28px;height:28px;padding:2px;padding:0}.forge-icon-button--dense-1{width:44px;height:44px;padding:10px}.forge-icon-button--dense-2{width:40px;height:40px;padding:8px}.forge-icon-button--dense-3{width:36px;height:36px;padding:6px}.forge-icon-button--dense-4{width:32px;height:32px;padding:4px}.forge-icon-button--dense-5{width:28px;height:28px;padding:2px}.forge-icon-button--dense-6{width:24px;height:24px;padding:0}.forge-icon-button--with-badge forge-badge{z-index:1;z-index:var(--forge-z-index-surface,1);pointer-events:none;--forge-badge-max-width:32px;--forge-badge-border:1px solid transparent}.forge-icon-button--with-badge forge-badge[app-bar-context]{--forge-badge-border:2px solid var(--forge-app-bar-theme-background)}*{-webkit-box-sizing:border-box;box-sizing:border-box}.forge-color-picker{width:272px;width:var(--forge-color-picker-width,272px);position:relative;display:inline-block;overflow:hidden}.forge-color-picker__input{height:1px;opacity:0;position:absolute;width:1px}.forge-color-picker__gradient{position:relative;outline:0}.forge-color-picker__gradient-color{background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(0,0,0,0)),to(#000)),-webkit-gradient(linear,left top,right top,color-stop(0,#fff),to(rgba(255,255,255,0)));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,#000 100%),linear-gradient(to right,#fff 0,rgba(255,255,255,0) 100%);height:152px}.forge-color-picker__gradient-thumb{border:1px solid #fff;border-radius:50%;cursor:pointer;display:inline-block;height:10px;width:10px;margin-left:-5px;margin-top:-5px;position:absolute;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:left .2s cubic-bezier(.25, .8, .25, 1) 0s,top .2s cubic-bezier(.25, .8, .25, 1) 0s;transition:left .2s cubic-bezier(.25, .8, .25, 1) 0s,top .2s cubic-bezier(.25, .8, .25, 1) 0s}.forge-color-picker__control-preview{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;width:100%;padding:16px}.forge-color-picker__controls{-webkit-box-flex:1;flex:1;margin-right:16px}.forge-color-picker__slider{position:relative}.forge-color-picker__slider-thumb{outline:0;height:16px;width:16px;background-color:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3);position:absolute;border-radius:50%;top:calc(50% - 8px);margin-left:-8px;-webkit-transition:left .4s cubic-bezier(.25, .8, .25, 1);transition:left .4s cubic-bezier(.25, .8, .25, 1)}.forge-color-picker__slider-thumb--active{-webkit-transition:none;transition:none}.forge-color-picker__slider-thumb:hover{cursor:pointer}.forge-color-picker__color-preview-container{border-radius:50%;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.54) inset,0 0 2px 0 rgba(0,0,0,.54);box-shadow:0 0 2px 0 rgba(0,0,0,.54) inset,0 0 2px 0 rgba(0,0,0,.54);overflow:hidden}.forge-color-picker__color-preview{height:32px;width:32px;-webkit-transition:background-color .2s cubic-bezier(.25, .8, .25, 1);transition:background-color .2s cubic-bezier(.25, .8, .25, 1)}.forge-color-picker__value{display:-webkit-box;display:flex;width:100%;-webkit-box-align:center;align-items:center;padding:0 8px 16px 16px;font-size:12px}.forge-color-picker__color-types{-webkit-box-flex:1;flex:1}.forge-color-picker__color-types label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, .75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);color:rgba(0,0,0,.54);color:var(--mdc-theme-text-secondary-on-light,rgba(0,0,0,.54))}.forge-color-picker__color-types input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, .75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit)}.forge-color-picker__color-types input[type=number],.forge-color-picker__color-types input[type=text]{color:#000;color:var(--mdc-theme-on-surface,#000);border-color:#e0e0e0;border-color:var(--forge-theme-border-color,#e0e0e0);background-color:transparent;padding:4px 8px;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;-webkit-transition:border-color .2s 0s cubic-bezier(0, 0, .2, 1),-webkit-box-shadow .2s 0s cubic-bezier(0, 0, .2, 1);transition:border-color .2s 0s cubic-bezier(0, 0, .2, 1),-webkit-box-shadow .2s 0s cubic-bezier(0, 0, .2, 1);transition:box-shadow .2s 0s cubic-bezier(0, 0, .2, 1),border-color .2s 0s cubic-bezier(0, 0, .2, 1);transition:box-shadow .2s 0s cubic-bezier(0, 0, .2, 1),border-color .2s 0s cubic-bezier(0, 0, .2, 1),-webkit-box-shadow .2s 0s cubic-bezier(0, 0, .2, 1)}.forge-color-picker__color-types input[type=number]:hover,.forge-color-picker__color-types input[type=text]:hover{border-color:rgba(0,0,0,.87);border-color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))}.forge-color-picker__color-types input[type=number]:focus,.forge-color-picker__color-types input[type=text]:focus{border-color:#3f51b5;border-color:var(--mdc-theme-primary,#3f51b5);-webkit-box-shadow:0 0 0 1px inset #3f51b5;box-shadow:0 0 0 1px inset #3f51b5;-webkit-box-shadow:0 0 0 1px inset var(--mdc-theme-primary,#3f51b5);box-shadow:0 0 0 1px inset var(--mdc-theme-primary,#3f51b5)}.forge-color-picker__color-types input[type=number]{text-align:center;-moz-appearance:textfield}.forge-color-picker__color-types input[type=number]::-webkit-inner-spin-button,.forge-color-picker__color-types input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.forge-color-picker__color-hex{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:center;justify-content:center;-webkit-box-align:space-between;align-items:space-between}.forge-color-picker__canvas{background-image:url(\\\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNnB4IiBoZWlnaHQ9IjZweCIgdmlld0JveD0iMCAwIDYgNiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTAgKDU0OTgzKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5Hcm91cCA5PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ikdyb3VwLTkiPgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLTExIiBmaWxsPSIjRTBFMEUwIiB4PSIwIiB5PSIwIiB3aWR0aD0iMyIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMTEtQ29weS0yIiBmaWxsPSIjRkZGRkZGIiB4PSIwIiB5PSIzIiB3aWR0aD0iMyIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMTEtQ29weSIgZmlsbD0iI0ZGRkZGRiIgeD0iMyIgeT0iMCIgd2lkdGg9IjMiIGhlaWdodD0iMyI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLTExLUNvcHktMyIgZmlsbD0iI0UwRTBFMCIgeD0iMyIgeT0iMyIgd2lkdGg9IjMiIGhlaWdodD0iMyI+PC9yZWN0PgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\\\")}.forge-color-picker__hue-slider{height:8px;background:-webkit-gradient(linear,left top,right top,color-stop(0,red),color-stop(16%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(84%,#f0f),to(#ff0004));background:linear-gradient(to right,red 0,#ff0 16%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 84%,#ff0004 100%)}.forge-color-picker__opacity-slider{height:8px;margin-top:16px;background:-webkit-gradient(linear,left top,right top,from(rgba(255,0,0,0)),to(red));background:linear-gradient(to right,rgba(255,0,0,0) 0,red 100%)}.forge-color-picker__color-hsva,.forge-color-picker__color-rgba{display:-webkit-box;display:flex}.forge-color-picker__color-hsva div,.forge-color-picker__color-rgba div{margin-right:4px}.forge-color-picker__color-hsva label,.forge-color-picker__color-rgba label{display:block;text-align:center}.forge-color-picker__color-hsva input,.forge-color-picker__color-rgba input{width:44px}:host{display:inline-block}:host([hidden]){display:none}';\nexport interface IColorPickerComponent extends IBaseComponent {\n value: string | null | undefined;\n rgba: IRGBA | null | undefined;\n hsva: IHSVA | null | undefined;\n opacity: number | null | undefined;\n allowOpacity: boolean;\n debounceChangeEvent: boolean;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-color-picker': IColorPickerComponent;\n }\n\n interface HTMLElementEventMap {\n 'forge-color-picker-change': CustomEvent<IColorPickerChangeEventData>;\n }\n}\n\n/**\n * The web component class behind the `<forge-color-picker>` custom element.\n * \n * @tag forge-color-picker\n */\n@CustomElement({\n name: COLOR_PICKER_CONSTANTS.elementName,\n dependencies: [\n IconButtonComponent,\n TooltipComponent,\n IconComponent\n ]\n})\nexport class ColorPickerComponent extends BaseComponent implements IColorPickerComponent {\n public static get observedAttributes(): string[] {\n return [\n COLOR_PICKER_CONSTANTS.attributes.VALUE,\n COLOR_PICKER_CONSTANTS.attributes.ALLOW_OPACITY,\n COLOR_PICKER_CONSTANTS.attributes.DEBOUNCE_CHANGE_EVENT\n ];\n }\n\n private _foundation: ColorPickerFoundation;\n\n constructor() {\n super();\n IconRegistry.define(tylIconUnfoldMore);\n attachShadowTemplate(this, template, styles);\n this._foundation = new ColorPickerFoundation(new ColorPickerAdapter(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 COLOR_PICKER_CONSTANTS.attributes.VALUE:\n this.value = newValue;\n break;\n case COLOR_PICKER_CONSTANTS.attributes.ALLOW_OPACITY:\n this.allowOpacity = coerceBoolean(newValue);\n break;\n case COLOR_PICKER_CONSTANTS.attributes.DEBOUNCE_CHANGE_EVENT:\n this.debounceChangeEvent = coerceBoolean(newValue);\n break;\n }\n }\n\n /** Gets/sets the value using hex format only. */\n @FoundationProperty()\n public declare value: string | null | undefined;\n\n /** Gets/sets the value using rgba format. */\n @FoundationProperty()\n public declare rgba: IRGBA | null | undefined;\n\n /** Gets/sets the value using hsva format. */\n @FoundationProperty()\n public declare hsva: IHSVA | null | undefined;\n\n /** Gets/sets the opacity value, if `allowOpacity` is true. */\n @FoundationProperty()\n public declare opacity: number | null | undefined;\n\n /** Gets/sets whether opacity is displayed and allowed be to changed. */\n @FoundationProperty()\n public declare allowOpacity: boolean;\n\n /** Gets/sets whether change event has a debounce applied to avoid successive updates. Defaults to `false`. */\n @FoundationProperty()\n public declare debounceChangeEvent: boolean;\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { ColorPickerComponent } from './color-picker';\n\nexport * from './color-picker-adapter';\nexport * from './color-picker-constants';\nexport * from './color-picker-foundation';\nexport * from './color-picker';\n\nexport function defineColorPickerComponent(): void {\n defineCustomElement(ColorPickerComponent);\n}\n"],
|
|
4
|
+
"sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}color-picker`;\n\nconst attributes = {\n VALUE: 'value',\n ALLOW_OPACITY: 'allow-opacity',\n DEBOUNCE_CHANGE_EVENT: 'debounce-change-event'\n};\n\nconst classes = {\n SLIDER_THUMB_ACTIVE: 'forge-color-picker__slider-thumb--active',\n GRADIENT_THUMB_ACTIVE: 'forge-color-picker__gradient-thumb--active'\n};\n\nconst selectors = {\n GRADIENT: '.forge-color-picker__gradient',\n GRADIENT_THUMB: '.forge-color-picker__gradient-thumb',\n PREVIEW_COLOR: '.forge-color-picker__color-preview',\n HEX_INPUT: '#forge-color-picker-hex-input',\n RGBA_INPUT: '#forge-color-picker-rgba-input',\n HSVA_INPUT: '#forge-color-picker-hsva-input',\n HUE_SLIDER: '.forge-color-picker__hue-slider',\n HUE_SLIDER_THUMB: '#forge-color-picker-hue-thumb',\n OPACITY_SLIDER: '.forge-color-picker__opacity-slider',\n OPACITY_SLIDER_THUMB: '#forge-color-picker-opacity-thumb',\n SLIDER: '.forge-color-picker__slider',\n SLIDER_THUMB: '.forge-color-picker__slider-thumb',\n COLOR_VALUE_HEX_CONTAINER: '.forge-color-picker__color-hex',\n COLOR_VALUE_RGBA_CONTAINER: '.forge-color-picker__color-rgba',\n COLOR_VALUE_HSVA_CONTAINER: '.forge-color-picker__color-hsva',\n TYPE_BUTTON: '#forge-color-picker-type-button',\n COLOR_VALUE_RGBA_R: '#forge-color-picker-rgba-r-input',\n COLOR_VALUE_RGBA_G: '#forge-color-picker-rgba-g-input',\n COLOR_VALUE_RGBA_B: '#forge-color-picker-rgba-b-input',\n COLOR_VALUE_RGBA_A: '#forge-color-picker-rgba-a-input',\n COLOR_VALUE_HSVA_H: '#forge-color-picker-hsva-h-input',\n COLOR_VALUE_HSVA_S: '#forge-color-picker-hsva-s-input',\n COLOR_VALUE_HSVA_V: '#forge-color-picker-hsva-v-input',\n COLOR_VALUE_HSVA_A: '#forge-color-picker-hsva-a-input'\n};\n\nconst events = {\n CHANGE: `${elementName}-change`\n};\n\nconst numbers = {\n CHANGE_EVENT_DEBOUNCE_THRESHOLD: 200\n};\n\nexport const COLOR_PICKER_CONSTANTS = {\n elementName,\n attributes,\n events,\n classes,\n selectors,\n numbers\n};\n\nexport const DEFAULT_COLOR = '000000';\n\nexport enum ColorPickerValueType {\n HEX = 'hex',\n RGB = 'rgb',\n RGBA = 'rgba',\n HSV = 'hsv',\n HSVA = 'hsva'\n}\n\nexport interface IRGBA {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface IHSVA {\n h: number;\n s: number;\n v: number;\n a: number;\n}\n\nexport type ColorPickerChangeEventType = 'slider' | 'input';\nexport type ColorPickerChangeEventSource = 'gradient' | 'hue' | 'opacity' | 'hex' | 'rgba' | 'hsva';\n\nexport interface IColorPickerChangeEventData {\n type: ColorPickerChangeEventType;\n source: ColorPickerChangeEventSource;\n hex: string;\n rgba: IRGBA;\n hsva: IHSVA;\n alpha?: number;\n}\n", "import { getShadowElement } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { IColorPickerComponent } from './color-picker';\nimport { ColorPickerValueType, COLOR_PICKER_CONSTANTS, IHSVA, IRGBA } from './color-picker-constants';\n\nexport interface IColorPickerAdapter extends IBaseAdapter {\n setPreviewColor(rgbaStyle: string): void;\n setHexInputValue(value: string): void;\n setRgbaInputValue(rgba: IRGBA): void;\n setHsvaInputValue(hsva: IHSVA): void;\n updateA11y(hueValue: number, opacityValue: number): void;\n setGradientColor(value: string): void;\n getHueSliderElement(): HTMLElement;\n getOpacitySliderElement(): HTMLElement;\n getGradientElement(): HTMLElement;\n setActiveValueType(type: ColorPickerValueType): void;\n focusValueInput(type: ColorPickerValueType): void;\n setTypeClickListener(listener: (evt: MouseEvent) => void): void;\n removeTypeClickListener(listener: (evt: MouseEvent) => void): void;\n setHexInputListener(type: string, listener: (evt: Event) => void): void;\n removeHexInputListener(type: string, listener: (evt: Event) => void): void;\n getHexInputValue(): string;\n setRgbaInputListener(type: string, listener: (evt: Event) => void): void;\n removeRgbaInputListener(type: string, listener: (evt: Event) => void): void;\n getRgbaInputValue(): IRGBA;\n setHsvaInputListener(type: string, listener: (evt: Event) => void): void;\n removeHsvaInputListener(type: string, listener: (evt: Event) => void): void;\n getHsvaInputValue(): IHSVA;\n toggleOpacityControls(visible: boolean): void;\n}\n\nexport class ColorPickerAdapter extends BaseAdapter<IColorPickerComponent> implements IColorPickerAdapter {\n private _gradientElement: HTMLElement;\n private _previewColorElement: HTMLElement;\n private _hexInputElement: HTMLInputElement;\n private _rgbaInputRElement: HTMLInputElement;\n private _rgbaInputGElement: HTMLInputElement;\n private _rgbaInputBElement: HTMLInputElement;\n private _rgbaInputAElement: HTMLInputElement;\n private _hsvaInputHElement: HTMLInputElement;\n private _hsvaInputSElement: HTMLInputElement;\n private _hsvaInputVElement: HTMLInputElement;\n private _hsvaInputAElement: HTMLInputElement;\n private _hueSliderElement: HTMLElement;\n private _hueSliderThumbElement: HTMLElement;\n private _opacitySliderElement: HTMLElement;\n private _opacitySliderThumbElement: HTMLElement;\n private _hexValueContainerElement: HTMLElement;\n private _rgbaValueContainerElement: HTMLElement;\n private _hsvaValueContainerElement: HTMLElement;\n private _typeButtonElement: HTMLButtonElement;\n\n constructor(component: IColorPickerComponent) {\n super(component);\n this._gradientElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.GRADIENT);\n this._previewColorElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.PREVIEW_COLOR);\n this._hexInputElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.HEX_INPUT) as HTMLInputElement;\n this._rgbaInputRElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_R) as HTMLInputElement;\n this._rgbaInputGElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_G) as HTMLInputElement;\n this._rgbaInputBElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_B) as HTMLInputElement;\n this._rgbaInputAElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_A) as HTMLInputElement;\n this._hsvaInputHElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_H) as HTMLInputElement;\n this._hsvaInputSElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_S) as HTMLInputElement;\n this._hsvaInputVElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_V) as HTMLInputElement;\n this._hsvaInputAElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_A) as HTMLInputElement;\n this._hueSliderElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.HUE_SLIDER);\n this._hueSliderThumbElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.HUE_SLIDER_THUMB);\n this._opacitySliderElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.OPACITY_SLIDER);\n this._opacitySliderThumbElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.OPACITY_SLIDER_THUMB);\n this._hexValueContainerElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HEX_CONTAINER);\n this._rgbaValueContainerElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_RGBA_CONTAINER);\n this._hsvaValueContainerElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.COLOR_VALUE_HSVA_CONTAINER);\n this._typeButtonElement = getShadowElement(component, COLOR_PICKER_CONSTANTS.selectors.TYPE_BUTTON) as HTMLButtonElement;\n }\n\n public setPreviewColor(rgbaStyle: string): void {\n this._previewColorElement.style.backgroundColor = rgbaStyle;\n }\n\n public setHexInputValue(value: string): void {\n this._hexInputElement.value = value;\n }\n\n public setRgbaInputValue(rgba: IRGBA): void {\n this._rgbaInputRElement.value = rgba.r.toString();\n this._rgbaInputGElement.value = rgba.g.toString();\n this._rgbaInputBElement.value = rgba.b.toString();\n this._rgbaInputAElement.value = rgba.a.toString();\n }\n\n public setHsvaInputValue(hsva: IHSVA): void {\n this._hsvaInputHElement.value = hsva.h.toString();\n this._hsvaInputSElement.value = hsva.s.toString();\n this._hsvaInputVElement.value = hsva.v.toString();\n this._hsvaInputAElement.value = hsva.a.toString();\n }\n\n public updateA11y(hueValue: number, opacityValue: number): void {\n this._hueSliderThumbElement.setAttribute('aria-valuenow', hueValue.toString());\n this._hueSliderThumbElement.setAttribute('aria-valuetext', hueValue.toString());\n\n this._opacitySliderThumbElement.setAttribute('aria-valuenow', opacityValue.toString());\n this._opacitySliderThumbElement.setAttribute('aria-valuetext', opacityValue.toString());\n }\n\n public setGradientColor(value: string): void {\n this._gradientElement.style.backgroundColor = value;\n }\n\n public getHueSliderElement(): HTMLElement {\n return this._hueSliderElement;\n }\n\n public getOpacitySliderElement(): HTMLElement {\n return this._opacitySliderElement;\n }\n\n public getGradientElement(): HTMLElement {\n return this._gradientElement;\n }\n\n public setActiveValueType(type: ColorPickerValueType): void {\n this._hexValueContainerElement.style.display = 'none';\n this._rgbaValueContainerElement.style.display = 'none';\n this._hsvaValueContainerElement.style.display = 'none';\n\n switch (type) {\n case ColorPickerValueType.HEX:\n this._hexValueContainerElement.style.removeProperty('display');\n break;\n case ColorPickerValueType.RGBA:\n this._rgbaValueContainerElement.style.removeProperty('display');\n break;\n case ColorPickerValueType.HSVA:\n this._hsvaValueContainerElement.style.removeProperty('display');\n break;\n }\n }\n\n public focusValueInput(type: ColorPickerValueType): void {\n switch (type) {\n case ColorPickerValueType.HEX:\n this._hexInputElement.focus();\n this._hexInputElement.select();\n break;\n case ColorPickerValueType.RGBA:\n this._rgbaInputRElement.focus();\n this._rgbaInputRElement.select();\n break;\n case ColorPickerValueType.HSVA:\n this._hsvaInputHElement.focus();\n this._hsvaInputHElement.select();\n break;\n }\n }\n\n public setTypeClickListener(listener: (evt: MouseEvent) => void): void {\n this._typeButtonElement.addEventListener('click', listener);\n }\n\n public removeTypeClickListener(listener: (evt: MouseEvent) => void): void {\n this._typeButtonElement.removeEventListener('click', listener);\n }\n\n public setHexInputListener(type: string, listener: (evt: Event) => void): void {\n this._hexInputElement.addEventListener(type, listener);\n }\n\n public removeHexInputListener(type: string, listener: (evt: Event) => void): void {\n this._hexInputElement.removeEventListener(type, listener);\n }\n\n public getHexInputValue(): string {\n return this._hexInputElement.value;\n }\n\n public setRgbaInputListener(type: string, listener: (evt: Event) => void): void {\n this._rgbaInputRElement.addEventListener(type, listener);\n this._rgbaInputGElement.addEventListener(type, listener);\n this._rgbaInputBElement.addEventListener(type, listener);\n this._rgbaInputAElement.addEventListener(type, listener);\n }\n\n public removeRgbaInputListener(type: string, listener: (evt: Event) => void): void {\n this._rgbaInputRElement.removeEventListener(type, listener);\n this._rgbaInputGElement.removeEventListener(type, listener);\n this._rgbaInputBElement.removeEventListener(type, listener);\n this._rgbaInputAElement.removeEventListener(type, listener);\n }\n\n public getRgbaInputValue(): IRGBA {\n return {\n r: parseInt(this._rgbaInputRElement.value, 10),\n g: parseInt(this._rgbaInputGElement.value, 10),\n b: parseInt(this._rgbaInputBElement.value, 10),\n a: parseFloat(this._rgbaInputAElement.value)\n };\n }\n\n public setHsvaInputListener(type: string, listener: (evt: Event) => void): void {\n this._hsvaInputHElement.addEventListener(type, listener);\n this._hsvaInputSElement.addEventListener(type, listener);\n this._hsvaInputVElement.addEventListener(type, listener);\n this._hsvaInputAElement.addEventListener(type, listener);\n }\n\n public removeHsvaInputListener(type: string, listener: (evt: Event) => void): void {\n this._hsvaInputHElement.removeEventListener(type, listener);\n this._hsvaInputSElement.removeEventListener(type, listener);\n this._hsvaInputVElement.removeEventListener(type, listener);\n this._hsvaInputAElement.removeEventListener(type, listener);\n }\n\n public getHsvaInputValue(): IHSVA {\n return {\n h: parseInt(this._hsvaInputHElement.value, 10),\n s: parseInt(this._hsvaInputSElement.value, 10),\n v: parseInt(this._hsvaInputVElement.value, 10),\n a: parseFloat(this._hsvaInputAElement.value)\n };\n }\n\n public toggleOpacityControls(visible: boolean): void {\n if (visible) {\n this._opacitySliderElement.style.removeProperty('display');\n if (this._rgbaInputAElement.parentElement) {\n this._rgbaInputAElement.parentElement.style.removeProperty('display');\n }\n if (this._hsvaInputAElement.parentElement) {\n this._hsvaInputAElement.parentElement.style.removeProperty('display');\n }\n } else {\n this._opacitySliderElement.style.display = 'none';\n if (this._rgbaInputAElement.parentElement) {\n this._rgbaInputAElement.parentElement.style.display = 'none';\n }\n if (this._hsvaInputAElement.parentElement) {\n this._hsvaInputAElement.parentElement.style.display = 'none';\n }\n }\n }\n}\n", "import { isNumber } from '@tylertech/forge-core';\n\nimport { IRGBA, IHSVA } from './color-picker-constants';\n\n/**\n * Calcuates coordinates relative to the provided element based on absolute coordinates.\n * @param absX The x coordinate in screen space.\n * @param absY The y coordinate in screen space.\n * @param element The element to calculate the relative coordinates from.\n */\nexport function relativeCoords(absX: number, absY: number, element: HTMLElement): { x: number; y: number; height: number; width: number } {\n const bounds = element.getBoundingClientRect();\n let x = absX - bounds.left;\n let y = absY - bounds.top;\n\n if (x > bounds.width) {\n x = bounds.width;\n } else if (x < 0) {\n x = 0;\n }\n\n if (y > bounds.height) {\n y = bounds.height;\n } else if (y < 0) {\n y = 0;\n }\n\n return { x, y, height: bounds.height, width: bounds.width };\n}\n\nexport function hsvaToRgba(hsva: IHSVA): IRGBA {\n let r: number;\n let g: number;\n let b: number;\n const h = hsva.h / 60;\n const s = hsva.s / 100;\n const v = hsva.v / 100;\n\n if (s === 0) {\n r = g = b = v;\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n a: hsva.a\n };\n }\n\n const i = Math.floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n default: r = v; g = p; b = q;\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n a: hsva.a\n };\n}\n\nexport function rgbaToHex(rgba: IRGBA): string {\n return toHex(rgba.r) + toHex(rgba.g) + toHex(rgba.b) + (Math.round(rgba.a * 255) + 0x10000).toString(16).substr(-2);\n}\n\nexport function toHex(x: number): string {\n return ('0' + x.toString(16)).slice(-2);\n}\n\nexport function hexToRgba(hex: string): IRGBA {\n const isShorthand = hex.length === 3 || hex.length === 4;\n const hexR = isShorthand ? `${hex.slice(0, 1)}${hex.slice(0, 1)}` : hex.slice(0, 2);\n const hexG = isShorthand ? `${hex.slice(1, 2)}${hex.slice(1, 2)}` : hex.slice(2, 4);\n const hexB = isShorthand ? `${hex.slice(2, 3)}${hex.slice(2, 3)}` : hex.slice(4, 6);\n const hexA = (isShorthand ? `${hex.slice(3, 4)}${hex.slice(3, 4)}` : hex.slice(6, 8)) || 'ff';\n\n return {\n r: parseInt(hexR, 16),\n g: parseInt(hexG, 16),\n b: parseInt(hexB, 16),\n a: parseFloat((parseInt(hexA, 16) / 255).toFixed(2))\n };\n}\n\nexport function formatRgba(rgba: IRGBA): string {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n}\n\nexport function formatHex(value: string, allowOpacity: boolean): string {\n let hex = value.replace(/^#/, '');\n\n if (!allowOpacity) {\n if (hex.length === 4) {\n hex = hex.substring(0, 3);\n } else if (hex.length === 8) {\n hex = hex.substring(0, 6);\n }\n }\n\n return `#${hex}`;\n}\n\nexport function rgbaToHsva(rgba: IRGBA): IHSVA {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = max;\n let s = max;\n const v = max;\n\n const d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n v: Math.round(v * 100),\n a: rgba.a\n };\n}\n\n/**\n * Determines if the provided hex color string is valid.\n * @param value The hex color string.\n */\nexport function isValidHex(value: string): boolean {\n if (!value || typeof value !== 'string') {\n return false;\n }\n\n if (value.substring(0, 1) === '#') {\n value = value.substring(1);\n }\n\n switch (value.length) {\n case 3: return /^[0-9A-F]{3}$/i.test(value);\n case 4: return /^[0-9A-F]{4}$/i.test(value);\n case 6: return /^[0-9A-F]{6}$/i.test(value);\n case 8: return /^[0-9A-F]{8}$/i.test(value);\n default: return false;\n }\n}\n\n/**\n * Determines if the provided RGBA values are valid.\n * @param value The RGBA color values.\n */\nexport function isValidRGBA(value: IRGBA): boolean {\n return isNumber(value.r) && value.r >= 0 && value.r <= 255 &&\n isNumber(value.g) && value.g >= 0 && value.g <= 255 &&\n isNumber(value.b) && value.b >= 0 && value.b <= 255 &&\n isNumber(value.a) && value.a >= 0 && value.a <= 1;\n}\n\n/**\n * Determines if the provided HSVA values are valid.\n * @param value The HSVA color values.\n */\nexport function isValidHSVA(value: IHSVA): boolean {\n return isNumber(value.h) && value.h >= 0 && value.h <= 360 &&\n isNumber(value.s) && value.s >= 0 && value.s <= 100 &&\n isNumber(value.v) && value.v >= 0 && value.v <= 100 &&\n isNumber(value.a) && value.a >= 0 && value.a <= 1;\n}\n", "import { COLOR_PICKER_CONSTANTS } from './color-picker-constants';\nimport { relativeCoords } from './color-picker-utils';\n\nexport class ColorPickerGradientSlider {\n private _xPercent: number;\n private _yPercent: number;\n private _thumbElement: HTMLElement;\n private _keydownListener: (evt: KeyboardEvent) => void;\n private _downListener: (evt: MouseEvent & TouchEvent) => void;\n private _moveListener: (evt: MouseEvent & TouchEvent) => void;\n private _upListener: (evt: MouseEvent & TouchEvent) => void;\n\n constructor(private _rootElement: HTMLElement, private _changeListener: (x: number, y: number) => void) {\n this._keydownListener = evt => this._onKeydown(evt);\n this._downListener = evt => this._onDown(evt);\n this._moveListener = evt => this._onMove(evt);\n this._upListener = evt => this._onUp(evt);\n this._initialize();\n }\n\n public destroy(): void {\n this._unlisten();\n }\n\n public setValue(saturation: number, value: number): void {\n window.requestAnimationFrame(() => {\n const bounds = this._rootElement.getBoundingClientRect();\n this._xPercent = Math.round(bounds.width * (saturation / 100));\n this._yPercent = bounds.height - Math.round(bounds.height * (value / 100));\n this._setThumbPosition(this._xPercent, this._yPercent);\n });\n }\n\n private _initialize(): void {\n this._thumbElement = this._rootElement.querySelector(COLOR_PICKER_CONSTANTS.selectors.GRADIENT_THUMB) as HTMLElement;\n this._listen();\n this._setThumbPosition(this._xPercent, this._yPercent);\n }\n\n private _listen(): void {\n this._rootElement.addEventListener('keydown', this._keydownListener);\n this._rootElement.addEventListener('mousedown', this._downListener);\n this._rootElement.addEventListener('touchstart', this._downListener);\n }\n\n private _unlisten(): void {\n this._rootElement.removeEventListener('keydown', this._keydownListener);\n this._rootElement.removeEventListener('mousedown', this._downListener);\n this._rootElement.removeEventListener('touchstart', this._downListener);\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n }\n\n private _onKeydown(evt: KeyboardEvent): void {\n const isEnterKey = evt.key === 'Enter' || evt.keyCode === 13;\n const isArrowLeftKey = evt.key === 'ArrowLeft' || evt.keyCode === 37;\n const isArrowUpKey = evt.key === 'ArrowUp' || evt.keyCode === 38;\n const isArrowRightKey = evt.key === 'ArrowRight' || evt.keyCode === 39;\n const isArrowDownKey = evt.key === 'ArrowDown' || evt.keyCode === 40;\n\n const bounds = this._rootElement.getBoundingClientRect();\n\n if (isArrowDownKey) {\n evt.preventDefault();\n this._yPercent++;\n } else if (isArrowUpKey) {\n evt.preventDefault();\n this._yPercent--;\n } else if (isArrowLeftKey) {\n evt.preventDefault();\n this._xPercent--;\n } else if (isArrowRightKey) {\n evt.preventDefault();\n this._xPercent++;\n } else if (isEnterKey) {\n evt.preventDefault();\n // TODO(kieran.nichols): Select the current color\n } else {\n return;\n }\n\n if (this._xPercent > bounds.width) {\n this._xPercent = bounds.width;\n } else if (this._xPercent < 0) {\n this._xPercent = 0;\n }\n\n if (this._yPercent > bounds.height) {\n this._yPercent = bounds.height;\n } else if (this._yPercent < 0) {\n this._yPercent = 0;\n }\n\n this._setThumbPosition(this._xPercent, this._yPercent);\n this._notify();\n }\n\n private _onDown(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n document.addEventListener('mousemove', this._moveListener);\n document.addEventListener('touchmove', this._moveListener);\n document.addEventListener('mouseup', this._upListener);\n document.addEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n }\n\n private _onMove(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n this._updateThumbPosition(evt);\n }\n\n private _onUp(evt: MouseEvent & TouchEvent): void {\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n this._thumbElement.focus();\n }\n\n private _updateThumbPosition(evt: MouseEvent & TouchEvent): void {\n const isMouseEvent = /^mouse/.test(evt.type);\n const x = isMouseEvent ? evt.clientX : evt.changedTouches[0].clientX;\n const y = isMouseEvent ? evt.clientY : evt.changedTouches[0].clientY;\n const coords = this._calculateSliderPercent(x, y);\n this._setThumbPosition(coords.x, coords.y);\n this._xPercent = parseInt(((coords.x / coords.width) * 100).toString(), 10);\n this._yPercent = Math.abs(parseInt(((coords.y / coords.height) * 100).toString(), 10) - 100);\n this._notify();\n }\n\n private _calculateSliderPercent(absX: number, absY: number): { x: number; y: number; width: number; height: number } {\n return relativeCoords(absX, absY, this._rootElement);\n }\n\n private _setThumbPosition(xPercent: number, yPercent: number): void {\n this._thumbElement.style.left = `${xPercent}px`;\n this._thumbElement.style.top = `${yPercent}px`;\n }\n\n private _notify(): void {\n if (typeof this._changeListener === 'function') {\n this._changeListener(this._xPercent, this._yPercent);\n }\n }\n}\n", "import { COLOR_PICKER_CONSTANTS } from './color-picker-constants';\nimport { relativeCoords } from './color-picker-utils';\n\nexport interface IColorPickerSliderOptions {\n min: number;\n max: number;\n step: number;\n change: (value: number) => void;\n}\n\nexport class ColorPickerSlider {\n private _percent = 1;\n private _min = 0;\n private _max = 1;\n private _step = 0.01;\n private _thumbElement: HTMLElement;\n private _keydownListener: (evt: KeyboardEvent) => void;\n private _downListener: (evt: MouseEvent & TouchEvent) => void;\n private _moveListener: (evt: MouseEvent & TouchEvent) => void;\n private _upListener: (evt: MouseEvent & TouchEvent) => void;\n \n constructor(private _rootElement: HTMLElement, private _changeListener: (value: number) => void) {\n this._keydownListener = evt => this._onKeydown(evt);\n this._downListener = evt => this._onDown(evt);\n this._moveListener = evt => this._onMove(evt);\n this._upListener = evt => this._onUp(evt);\n this._initialize();\n }\n\n public destroy(): void {\n this._unlisten();\n }\n\n public setValue(value: number): void {\n this._percent = value;\n this._setThumbPosition(this._percent);\n }\n\n private _initialize(): void {\n this._thumbElement = this._rootElement.querySelector(COLOR_PICKER_CONSTANTS.selectors.SLIDER_THUMB) as HTMLElement;\n this._listen();\n this._setThumbPosition(this._percent);\n }\n\n private _listen(): void {\n this._thumbElement.addEventListener('keydown', this._keydownListener);\n this._rootElement.addEventListener('mousedown', this._downListener);\n this._rootElement.addEventListener('touchstart', this._downListener);\n }\n\n private _unlisten(): void {\n this._thumbElement.removeEventListener('keydown', this._keydownListener);\n this._rootElement.removeEventListener('mousedown', this._downListener);\n this._rootElement.removeEventListener('touchstart', this._downListener);\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n }\n\n private _onKeydown(evt: KeyboardEvent): void {\n const isArrowLeftKey = evt.key === 'ArrowLeft' || evt.keyCode === 37;\n const isArrowRightKey = evt.key === 'ArrowRight' || evt.keyCode === 39;\n const isHomeKey = evt.key === 'Home' || evt.keyCode === 36;\n const isEndKey = evt.key === 'End' || evt.keyCode === 35;\n\n if (isArrowLeftKey) {\n evt.preventDefault();\n this._percent -= this._step;\n } else if (isArrowRightKey) {\n evt.preventDefault();\n this._percent += this._step;\n } else if (isHomeKey) {\n evt.preventDefault();\n this._percent = this._min;\n } else if (isEndKey) {\n evt.preventDefault();\n this._percent = this._max;\n }\n\n if (this._percent < this._min) {\n this._percent = this._min;\n } else if (this._percent > this._max) {\n this._percent = this._max;\n }\n\n this._setThumbPosition(this._percent);\n this._notify();\n }\n\n private _onDown(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n document.addEventListener('mousemove', this._moveListener);\n document.addEventListener('touchmove', this._moveListener);\n document.addEventListener('mouseup', this._upListener);\n document.addEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n }\n\n private _onMove(evt: MouseEvent & TouchEvent): void {\n evt.preventDefault();\n this._thumbElement.classList.add(COLOR_PICKER_CONSTANTS.classes.SLIDER_THUMB_ACTIVE);\n this._updateThumbPosition(evt);\n }\n\n private _onUp(evt: MouseEvent & TouchEvent): void {\n this._thumbElement.classList.remove(COLOR_PICKER_CONSTANTS.classes.SLIDER_THUMB_ACTIVE);\n document.removeEventListener('mousemove', this._moveListener);\n document.removeEventListener('touchmove', this._moveListener);\n document.removeEventListener('mouseup', this._upListener);\n document.removeEventListener('touchend', this._upListener);\n this._updateThumbPosition(evt);\n this._thumbElement.focus();\n }\n\n private _updateThumbPosition(evt: MouseEvent & TouchEvent): void {\n const x = /^mouse/.test(evt.type) ? evt.clientX : evt.changedTouches[0].clientX;\n this._percent = this._calculateSliderPercent(x);\n this._setThumbPosition(this._percent);\n this._notify();\n }\n\n private _calculateSliderPercent(absX: number): number {\n const coords = relativeCoords(absX, 0, this._rootElement);\n return parseFloat((coords.x / coords.width).toFixed(2));\n }\n\n private _setThumbPosition(percent: number): void {\n this._thumbElement.style.left = `${percent * 100}%`;\n }\n\n private _notify(): void {\n if (typeof this._changeListener === 'function') {\n this._changeListener(this._percent);\n }\n }\n}\n", "import { ICustomElementFoundation, debounce } from '@tylertech/forge-core';\nimport { IColorPickerAdapter } from './color-picker-adapter';\nimport { ColorPickerValueType, COLOR_PICKER_CONSTANTS, DEFAULT_COLOR, IColorPickerChangeEventData, IHSVA, IRGBA, ColorPickerChangeEventType, ColorPickerChangeEventSource } from './color-picker-constants';\nimport { ColorPickerGradientSlider } from './color-picker-gradient-slider';\nimport { ColorPickerSlider } from './color-picker-slider';\nimport { formatHex, formatRgba, hexToRgba, hsvaToRgba, isValidHex, isValidHSVA, isValidRGBA, rgbaToHex, rgbaToHsva } from './color-picker-utils';\n\nexport interface IColorPickerFoundation extends ICustomElementFoundation {\n value: string | null | undefined;\n rgba: IRGBA | null | undefined;\n hsva: IHSVA | null | undefined;\n opacity: number | null | undefined;\n allowOpacity: boolean;\n debounceChangeEvent: boolean;\n}\n\nexport class ColorPickerFoundation implements IColorPickerFoundation {\n private _value: string | null | undefined = null;\n private _allowOpacity = true;\n private _hex = DEFAULT_COLOR;\n private _hsva: IHSVA = { h: 0, s: 0, v: 0, a: 1 };\n private _rgba: IRGBA = { r: 0, g: 0, b: 0, a: 1 };\n private _debounceChangeEvent = false;\n private _valueType = ColorPickerValueType.HEX;\n private _gradientSlider: ColorPickerGradientSlider;\n private _hueSlider: ColorPickerSlider;\n private _opacitySlider: ColorPickerSlider;\n private _initialized = false;\n private _gradientSliderChangedListener: (x: number, y: number) => void;\n private _hueSliderChangedListener: (percent: number) => void;\n private _opacitySliderChangedListener: (percent: number) => void;\n private _typeClickListener: (evt: MouseEvent) => void;\n private _hexInputChangedListener: (evt: KeyboardEvent) => void;\n private _rgbaInputChangedListener: (evt: KeyboardEvent) => void;\n private _hsvaInputChangedListener: (evt: KeyboardEvent) => void;\n private _triggerChangeEvent: (type: ColorPickerChangeEventType, source: ColorPickerChangeEventSource) => void;\n\n constructor(private _adapter: IColorPickerAdapter) {\n this._gradientSliderChangedListener = (x, y) => this._onGradientSliderChanged(x, y);\n this._hueSliderChangedListener = value => this._onHueSliderChanged(value);\n this._opacitySliderChangedListener = value => this._onOpacitySliderChanged(value);\n this._typeClickListener = evt => this._onTypeClicked(evt);\n this._hexInputChangedListener = evt => this._onHexInputChanged();\n this._rgbaInputChangedListener = evt => this._onRgbaInputChanged();\n this._hsvaInputChangedListener = evt => this._onHsvaInputChanged();\n }\n \n public initialize(): void {\n this._initialized = true;\n this._applyChangeEventTrigger();\n this._adapter.setTypeClickListener(this._typeClickListener);\n this._adapter.setHexInputListener('input', this._hexInputChangedListener);\n this._adapter.setRgbaInputListener('input', this._rgbaInputChangedListener);\n this._adapter.setHsvaInputListener('input', this._hsvaInputChangedListener);\n this._gradientSlider = new ColorPickerGradientSlider(this._adapter.getGradientElement(), this._gradientSliderChangedListener);\n this._hueSlider = new ColorPickerSlider(this._adapter.getHueSliderElement(), this._hueSliderChangedListener);\n this._opacitySlider = new ColorPickerSlider(this._adapter.getOpacitySliderElement(), this._opacitySliderChangedListener);\n\n this._initializeOpacity();\n this._setColorFromHex();\n this._adapter.setActiveValueType(this._valueType);\n }\n\n public disconnect(): void {\n this._adapter.removeTypeClickListener(this._typeClickListener);\n this._adapter.removeHexInputListener('input', this._hexInputChangedListener);\n this._adapter.removeRgbaInputListener('input', this._hexInputChangedListener);\n this._adapter.removeHsvaInputListener('input', this._hexInputChangedListener);\n\n this._gradientSlider.destroy();\n this._hueSlider.destroy();\n this._opacitySlider.destroy();\n this._initialized = false;\n }\n\n private _applyChangeEventTrigger(): void {\n if (this._debounceChangeEvent) {\n this._triggerChangeEvent = debounce((type: ColorPickerChangeEventType, source: ColorPickerChangeEventSource) => {\n this._emitChangeEvent(type, source);\n }, COLOR_PICKER_CONSTANTS.numbers.CHANGE_EVENT_DEBOUNCE_THRESHOLD, false);\n } else {\n this._triggerChangeEvent = (type, source) => this._emitChangeEvent(type, source);\n }\n }\n\n private _initializeOpacity(): void {\n this._hsva.a = 1;\n this._adapter.toggleOpacityControls(this._allowOpacity);\n this._render();\n }\n\n private _onTypeClicked(evt: MouseEvent): void {\n if (this._valueType === ColorPickerValueType.HEX) {\n this._valueType = ColorPickerValueType.RGBA;\n } else if (this._valueType === ColorPickerValueType.RGBA) {\n this._valueType = ColorPickerValueType.HSVA;\n } else if (this._valueType === ColorPickerValueType.HSVA) {\n this._valueType = ColorPickerValueType.HEX;\n }\n\n this._adapter.setActiveValueType(this._valueType);\n this._adapter.focusValueInput(this._valueType);\n }\n\n private _onHexInputChanged(): void {\n const value = this._adapter.getHexInputValue();\n if (isValidHex(value)) {\n this.value = value;\n this._triggerChangeEvent('input', 'hex');\n }\n }\n\n private _onRgbaInputChanged(): void {\n const value = this._adapter.getRgbaInputValue();\n if (isValidRGBA(value)) {\n this.value = rgbaToHex(value);\n this._triggerChangeEvent('input', 'rgba');\n }\n }\n\n private _onHsvaInputChanged(): void {\n const value = this._adapter.getHsvaInputValue();\n if (isValidHSVA(value)) {\n this.value = rgbaToHex(hsvaToRgba(value));\n this._triggerChangeEvent('input', 'hsva');\n }\n }\n\n private _setColorFromHex(): void {\n this._rgba = hexToRgba(this._hex);\n this._hsva = rgbaToHsva(this._rgba);\n\n if (this._initialized) {\n this._gradientSlider.setValue(this._hsva.s, this._hsva.v);\n this._hueSlider.setValue(parseFloat((this._hsva.h / 360).toFixed(2)));\n this._opacitySlider.setValue(this._hsva.a);\n this._render();\n }\n }\n\n private _onGradientSliderChanged(x: number, y: number): void {\n this._hsva.s = x;\n this._hsva.v = y;\n this._syncColors();\n this._render();\n this._triggerChangeEvent('slider', 'gradient');\n }\n\n private _onHueSliderChanged(value: number): void {\n this._hsva.h = parseInt((360 * value).toString(), 10);\n this._syncColors();\n this._setGradientColor();\n this._render();\n this._triggerChangeEvent('slider', 'hue');\n }\n\n private _onOpacitySliderChanged(value: number): void {\n this._hsva.a = value;\n this._syncColors();\n this._render();\n this._triggerChangeEvent('slider', 'opacity');\n }\n\n private _setGradientColor(): void {\n const rgba = hsvaToRgba({ h: this._hsva.h, s: 100, v: 100, a: 1 });\n this._adapter.setGradientColor(`rgb(${rgba.r}, ${rgba.g}, ${rgba.b})`);\n }\n\n private _syncColors(): void {\n this._rgba = hsvaToRgba(this._hsva);\n this._hex = rgbaToHex(this._rgba);\n this._value = this._hex || null;\n }\n\n private _render(): void {\n this._setGradientColor();\n this._adapter.setPreviewColor(formatRgba(this._rgba));\n this._adapter.setHexInputValue(this._getFormattedHex());\n this._adapter.setRgbaInputValue(this._rgba);\n this._adapter.setHsvaInputValue(this._hsva);\n this._adapter.updateA11y(this._hsva.h, Math.round(this._hsva.a * 100));\n }\n\n private _getFormattedHex(): string {\n return formatHex(this._hex, false);\n }\n\n private _emitChangeEvent(type: ColorPickerChangeEventType, source: ColorPickerChangeEventSource): void {\n const data: IColorPickerChangeEventData = {\n type,\n source,\n hex: formatHex(this._hex, false).replace(/^#/, ''),\n rgba: this._rgba,\n hsva: this._hsva\n };\n if (this._allowOpacity) {\n data.alpha = this._hsva.a;\n }\n this._adapter.emitHostEvent(COLOR_PICKER_CONSTANTS.events.CHANGE, data);\n }\n\n public get value(): string | null | undefined {\n return this._getFormattedHex();\n }\n public set value(value: string | null | undefined) {\n if (this._value !== value) {\n this._value = value || DEFAULT_COLOR;\n\n if (!isValidHex(this._value)) {\n throw new Error('Invalid hex value provided.');\n }\n\n this._hex = this._value.replace(/^#/, '');\n this._setColorFromHex();\n this._adapter.setHostAttribute(COLOR_PICKER_CONSTANTS.attributes.VALUE, this._value);\n }\n }\n\n public get rgba(): IRGBA | null | undefined {\n return !!this._rgba ? { ...this._rgba } : null;\n }\n public set rgba(value: IRGBA | null | undefined) {\n if (value) {\n if (isValidRGBA(value)) {\n this.value = rgbaToHex(value);\n }\n } else {\n this.value = null;\n }\n }\n\n public get hsva(): IHSVA | null | undefined {\n return !!this._hsva ? { ...this._hsva } : null;\n }\n public set hsva(value: IHSVA | null | undefined) {\n if (value) {\n if (isValidHSVA(value)) {\n this.value = rgbaToHex(hsvaToRgba(value));\n }\n } else {\n this.value = null;\n }\n }\n\n public get opacity(): number | null | undefined {\n return this._hsva ? this._hsva.a : null;\n }\n public set opacity(value: number | null | undefined) {\n if (this._hsva.a !== value) {\n if (value != null && this._allowOpacity) {\n if (value >= 0 && value <= 1) {\n this._hsva.a = value;\n this._syncColors();\n\n if (this._initialized) {\n this._opacitySlider.setValue(this._hsva.a);\n this._render();\n }\n } else {\n console.warn(`The provided opacity value (${value}) must be between 0 and 1.`);\n }\n }\n }\n }\n\n public get allowOpacity(): boolean {\n return this._allowOpacity;\n }\n public set allowOpacity(value: boolean) {\n this._allowOpacity = value;\n if (this._initialized) {\n this._initializeOpacity();\n }\n }\n\n public get debounceChangeEvent(): boolean {\n return this._debounceChangeEvent;\n }\n public set debounceChangeEvent(value: boolean) {\n if (this._debounceChangeEvent !== value) {\n this._debounceChangeEvent = value;\n if (this._initialized) {\n this._applyChangeEventTrigger();\n }\n }\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, FoundationProperty } from '@tylertech/forge-core';\nimport { tylIconUnfoldMore } from '@tylertech/tyler-icons/standard';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\nimport { IconComponent, IconRegistry } from '../icon';\nimport { IconButtonComponent } from '../icon-button';\nimport { TooltipComponent } from '../tooltip';\nimport { ColorPickerAdapter } from './color-picker-adapter';\nimport { COLOR_PICKER_CONSTANTS, IColorPickerChangeEventData, IHSVA, IRGBA } from './color-picker-constants';\nimport { ColorPickerFoundation } from './color-picker-foundation';\n\nconst template = '<template><div class=\\\"forge-color-picker\\\" part=\\\"root\\\"><input type=\\\"color\\\" tabindex=\\\"-1\\\" class=\\\"forge-color-picker__input\\\" spellcheck=\\\"false\\\" autocomplete=\\\"off\\\" aria-label=\\\"Color picker value\\\" part=\\\"input\\\"><div class=\\\"forge-color-picker__container\\\" part=\\\"container\\\"><div class=\\\"forge-color-picker__gradient\\\" tabindex=\\\"0\\\" part=\\\"gradient\\\"><div class=\\\"forge-color-picker__gradient-color\\\" part=\\\"gradient-color\\\"></div><div class=\\\"forge-color-picker__gradient-thumb\\\" part=\\\"gradient-thumb\\\"></div></div><div class=\\\"forge-color-picker__control-preview\\\" part=\\\"controls-preview-container\\\"><div class=\\\"forge-color-picker__controls\\\" part=\\\"controls-container\\\"><div class=\\\"forge-color-picker__slider-control\\\" part=\\\"hue-control-container\\\"><div class=\\\"forge-color-picker__slider forge-color-picker__hue-slider\\\" part=\\\"hue-control-slider\\\"><div class=\\\"forge-color-picker__slider-thumb\\\" id=\\\"forge-color-picker-hue-thumb\\\" part=\\\"hue-control-slider-thumb\\\" tabindex=\\\"0\\\" role=\\\"slider\\\" aria-label=\\\"Change hue\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"360\\\" aria-valuenow=\\\"0\\\" aria-orientation=\\\"horizontal\\\" aria-valuetext=\\\"0\\\"></div></div></div><div class=\\\"forge-color-picker__slider-control\\\" part=\\\"opacity-control-container\\\"><div class=\\\"forge-color-picker__canvas\\\" part=\\\"opacity-control-canvas\\\"><div class=\\\"forge-color-picker__slider forge-color-picker__opacity-slider\\\" part=\\\"opacity-control-slider\\\"><div class=\\\"forge-color-picker__slider-thumb\\\" id=\\\"forge-color-picker-opacity-thumb\\\" part=\\\"opacity-control-slider-thumb\\\" tabindex=\\\"0\\\" role=\\\"slider\\\" aria-label=\\\"Change opacity\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" aria-valuenow=\\\"0\\\" aria-orientation=\\\"horizontal\\\" aria-valuetext=\\\"0\\\"></div></div></div></div></div><div class=\\\"forge-color-picker__color-preview-container forge-color-picker__canvas\\\" part=\\\"color-preview-container\\\"><div class=\\\"forge-color-picker__color-preview\\\" part=\\\"color-preview\\\"></div></div></div><div class=\\\"forge-color-picker__value\\\" part=\\\"value-container\\\"><div class=\\\"forge-color-picker__color-types\\\" part=\\\"types-container\\\"><div class=\\\"forge-color-picker__color-hex\\\" part=\\\"hex-type-container\\\"><div part=\\\"hex-type-label-wrapper\\\"><label for=\\\"forge-color-picker-hex-input\\\" part=\\\"hex-label\\\">HEX</label></div><input type=\\\"text\\\" id=\\\"forge-color-picker-hex-input\\\" part=\\\"hex-input\\\" style=\\\"width: 88px;\\\" maxlength=\\\"9\\\" spellcheck=\\\"false\\\" autocomplete=\\\"off\\\" aria-label=\\\"HEX value\\\"></div><div class=\\\"forge-color-picker__color-rgba\\\" part=\\\"rgba-type-container\\\"><div part=\\\"rgba-type-wrapper-r\\\"><label for=\\\"forge-color-picker-rgba-r-input\\\" part=\\\"rgba-type-label-r\\\">R</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-r-input\\\" part=\\\"rgba-type-input-r\\\" min=\\\"0\\\" max=\\\"255\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Red\\\"></div><div part=\\\"rgba-type-wrapper-g\\\"><label for=\\\"forge-color-picker-rgba-g-input\\\" part=\\\"rgba-type-label-g\\\">G</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-g-input\\\" part=\\\"rgba-type-input-g\\\" min=\\\"0\\\" max=\\\"255\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Green\\\"></div><div part=\\\"rgba-type-wrapper-b\\\"><label for=\\\"forge-color-picker-rgba-b-input\\\" part=\\\"rgba-type-label-b\\\">B</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-b-input\\\" part=\\\"rgba-type-input-b\\\" min=\\\"0\\\" max=\\\"255\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Blue\\\"></div><div part=\\\"rgba-type-wrapper-a\\\"><label for=\\\"forge-color-picker-rgba-a-input\\\" part=\\\"rgba-type-label-a\\\">A</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-rgba-a-input\\\" part=\\\"rgba-type-input-a\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Alpha\\\"></div></div><div class=\\\"forge-color-picker__color-hsva\\\" part=\\\"hsva-type-container\\\"><div part=\\\"hsva-type-wrapper-h\\\"><label for=\\\"forge-color-picker-hsva-h-input\\\" part=\\\"hsva-type-label-h\\\">H</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-h-input\\\" part=\\\"hsva-type-input-h\\\" min=\\\"0\\\" max=\\\"360\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Hue\\\"></div><div part=\\\"hsva-type-wrapper-s\\\"><label for=\\\"forge-color-picker-hsva-s-input\\\" part=\\\"hsva-type-label-s\\\">S</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-s-input\\\" part=\\\"hsva-type-input-s\\\" min=\\\"0\\\" max=\\\"100\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Saturation\\\"></div><div part=\\\"hsva-type-wrapper-v\\\"><label for=\\\"forge-color-picker-hsva-v-input\\\" part=\\\"hsva-type-label-v\\\">V</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-v-input\\\" part=\\\"hsva-type-input-v\\\" min=\\\"0\\\" max=\\\"100\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Value\\\"></div><div part=\\\"hsva-type-wrapper-a\\\"><label for=\\\"forge-color-picker-hsva-a-input\\\" part=\\\"hsva-type-label-a\\\">A</label> <input type=\\\"number\\\" id=\\\"forge-color-picker-hsva-a-input\\\" part=\\\"hsva-type-input-a\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" maxlength=\\\"3\\\" autocomplete=\\\"off\\\" aria-label=\\\"Alpha\\\"></div></div></div><div class=\\\"forge-color-picker__type-button\\\" part=\\\"type-container\\\"><forge-icon-button part=\\\"type-button\\\"><button type=\\\"button\\\" id=\\\"forge-color-picker-type-button\\\" aria-labelledby=\\\"type-button-tooltip\\\" part=\\\"type-button-element\\\"><forge-icon name=\\\"unfold_more\\\" part=\\\"type-button-icon\\\"></forge-icon></button><forge-tooltip delay=\\\"500\\\" position=\\\"bottom\\\" id=\\\"type-button-tooltip\\\">Change color format</forge-tooltip></forge-icon-button></div></div></div></div></template>';\nconst styles = '.forge-icon-button{display:-webkit-inline-box;display:inline-flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border:none;outline:0;background-color:transparent;fill:currentColor;color:inherit;font-size:24px;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:48px;height:48px;padding:12px}.forge-icon-button forge-icon,.forge-icon-button img,.forge-icon-button svg{width:24px;height:24px}.forge-icon-button:disabled{color:rgba(0,0,0,.38);color:var(--mdc-theme-text-disabled-on-light,rgba(0,0,0,.38))}.forge-icon-button:disabled{cursor:default;pointer-events:none}.forge-icon-button__icon{display:inline-block}.forge-icon-button__icon.forge-icon-button__icon--on{display:none}.forge-icon-button--on .forge-icon-button__icon{display:none}.forge-icon-button--on .forge-icon-button__icon.forge-icon-button__icon--on{display:inline-block}@-webkit-keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4,0,0.2,1);animation-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4,0,0.2,1);animation-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start,0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.forge-icon-button{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:transparent;will-change:transform,opacity}.forge-icon-button::after,.forge-icon-button::before{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\\\"\\\"}.forge-icon-button::before{-webkit-transition:opacity 15ms linear,background-color 15ms linear;transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index,1)}.forge-icon-button::after{z-index:0;z-index:var(--mdc-ripple-z-index,0)}.forge-icon-button.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale,1));transform:scale(var(--mdc-ripple-fg-scale,1))}.forge-icon-button.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.forge-icon-button.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0)}.forge-icon-button.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.forge-icon-button.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1))}.forge-icon-button::after,.forge-icon-button::before{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.forge-icon-button.mdc-ripple-upgraded::after,.forge-icon-button.mdc-ripple-upgraded::before{top:var(--mdc-ripple-top,calc(50% - 50%));left:var(--mdc-ripple-left,calc(50% - 50%));width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.forge-icon-button.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%)}.forge-icon-button::after,.forge-icon-button::before{background-color:#000;background-color:var(--mdc-ripple-color,var(--mdc-theme-on-surface,#000))}.forge-icon-button.mdc-ripple-surface--hover::before,.forge-icon-button:hover::before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity, .04)}.forge-icon-button.mdc-ripple-upgraded--background-focused::before,.forge-icon-button:not(.mdc-ripple-upgraded):focus::before{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity, .12)}.forge-icon-button:not(.mdc-ripple-upgraded)::after{-webkit-transition:opacity 150ms linear;transition:opacity 150ms linear}.forge-icon-button:not(.mdc-ripple-upgraded):active::after{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity, .12)}.forge-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}forge-icon-button{position:relative;display:inline-block;overflow:visible}.forge-icon-button--on{color:#6200ee;color:var(--mdc-theme-primary,#6200ee)}.forge-icon-button--on::after,.forge-icon-button--on::before{background-color:#6200ee;background-color:var(--mdc-ripple-color,var(--mdc-theme-primary,#6200ee))}.forge-icon-button--on.mdc-ripple-surface--hover::before,.forge-icon-button--on:hover::before{opacity:.04;opacity:var(--mdc-ripple-hover-opacity, .04)}.forge-icon-button--on.mdc-ripple-upgraded--background-focused::before,.forge-icon-button--on:not(.mdc-ripple-upgraded):focus::before{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-focus-opacity, .12)}.forge-icon-button--on:not(.mdc-ripple-upgraded)::after{-webkit-transition:opacity 150ms linear;transition:opacity 150ms linear}.forge-icon-button--on:not(.mdc-ripple-upgraded):active::after{-webkit-transition-duration:75ms;transition-duration:75ms;opacity:.12;opacity:var(--mdc-ripple-press-opacity, .12)}.forge-icon-button--on.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.forge-icon-button--on::before{background-color:#6200ee;background-color:var(--mdc-theme-primary,#6200ee);opacity:.08}.forge-icon-button--dense{width:28px;height:28px;padding:2px;padding:0}.forge-icon-button--dense-1{width:44px;height:44px;padding:10px}.forge-icon-button--dense-2{width:40px;height:40px;padding:8px}.forge-icon-button--dense-3{width:36px;height:36px;padding:6px}.forge-icon-button--dense-4{width:32px;height:32px;padding:4px}.forge-icon-button--dense-5{width:28px;height:28px;padding:2px}.forge-icon-button--dense-6{width:24px;height:24px;padding:0}.forge-icon-button--with-badge forge-badge{z-index:1;z-index:var(--forge-z-index-surface,1);pointer-events:none;--forge-badge-max-width:32px;--forge-badge-border:1px solid transparent}.forge-icon-button--with-badge forge-badge[app-bar-context]{--forge-badge-border:2px solid var(--forge-app-bar-theme-background)}*{-webkit-box-sizing:border-box;box-sizing:border-box}.forge-color-picker{width:272px;width:var(--forge-color-picker-width,272px);position:relative;display:inline-block;overflow:hidden}.forge-color-picker__input{height:1px;opacity:0;position:absolute;width:1px}.forge-color-picker__gradient{position:relative;outline:0}.forge-color-picker__gradient-color{background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(0,0,0,0)),to(#000)),-webkit-gradient(linear,left top,right top,color-stop(0,#fff),to(rgba(255,255,255,0)));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,#000 100%),linear-gradient(to right,#fff 0,rgba(255,255,255,0) 100%);height:152px}.forge-color-picker__gradient-thumb{border:1px solid #fff;border-radius:50%;cursor:pointer;display:inline-block;height:10px;width:10px;margin-left:-5px;margin-top:-5px;position:absolute;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:left .2s cubic-bezier(.25, .8, .25, 1) 0s,top .2s cubic-bezier(.25, .8, .25, 1) 0s;transition:left .2s cubic-bezier(.25, .8, .25, 1) 0s,top .2s cubic-bezier(.25, .8, .25, 1) 0s}.forge-color-picker__control-preview{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;width:100%;padding:16px}.forge-color-picker__controls{-webkit-box-flex:1;flex:1;margin-right:16px}.forge-color-picker__slider{position:relative}.forge-color-picker__slider-thumb{outline:0;height:16px;width:16px;background-color:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3);position:absolute;border-radius:50%;top:calc(50% - 8px);margin-left:-8px;-webkit-transition:left .4s cubic-bezier(.25, .8, .25, 1);transition:left .4s cubic-bezier(.25, .8, .25, 1)}.forge-color-picker__slider-thumb--active{-webkit-transition:none;transition:none}.forge-color-picker__slider-thumb:hover{cursor:pointer}.forge-color-picker__color-preview-container{border-radius:50%;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.54) inset,0 0 2px 0 rgba(0,0,0,.54);box-shadow:0 0 2px 0 rgba(0,0,0,.54) inset,0 0 2px 0 rgba(0,0,0,.54);overflow:hidden}.forge-color-picker__color-preview{height:32px;width:32px;-webkit-transition:background-color .2s cubic-bezier(.25, .8, .25, 1);transition:background-color .2s cubic-bezier(.25, .8, .25, 1)}.forge-color-picker__value{display:-webkit-box;display:flex;width:100%;-webkit-box-align:center;align-items:center;padding:0 8px 16px 16px;font-size:12px}.forge-color-picker__color-types{-webkit-box-flex:1;flex:1}.forge-color-picker__color-types label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, .75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);color:rgba(0,0,0,.54);color:var(--mdc-theme-text-secondary-on-light,rgba(0,0,0,.54))}.forge-color-picker__color-types input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, .75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit)}.forge-color-picker__color-types input[type=number],.forge-color-picker__color-types input[type=text]{color:#000;color:var(--mdc-theme-on-surface,#000);border-color:#e0e0e0;border-color:var(--forge-theme-border-color,#e0e0e0);background-color:transparent;padding:4px 8px;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;-webkit-transition:border-color .2s 0s cubic-bezier(0, 0, .2, 1),-webkit-box-shadow .2s 0s cubic-bezier(0, 0, .2, 1);transition:border-color .2s 0s cubic-bezier(0, 0, .2, 1),-webkit-box-shadow .2s 0s cubic-bezier(0, 0, .2, 1);transition:box-shadow .2s 0s cubic-bezier(0, 0, .2, 1),border-color .2s 0s cubic-bezier(0, 0, .2, 1);transition:box-shadow .2s 0s cubic-bezier(0, 0, .2, 1),border-color .2s 0s cubic-bezier(0, 0, .2, 1),-webkit-box-shadow .2s 0s cubic-bezier(0, 0, .2, 1)}.forge-color-picker__color-types input[type=number]:hover,.forge-color-picker__color-types input[type=text]:hover{border-color:rgba(0,0,0,.87);border-color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87))}.forge-color-picker__color-types input[type=number]:focus,.forge-color-picker__color-types input[type=text]:focus{border-color:#6200ee;border-color:var(--mdc-theme-primary,#6200ee);-webkit-box-shadow:0 0 0 1px inset #3f51b5;box-shadow:0 0 0 1px inset #3f51b5;-webkit-box-shadow:0 0 0 1px inset var(--mdc-theme-primary,#3f51b5);box-shadow:0 0 0 1px inset var(--mdc-theme-primary,#3f51b5)}.forge-color-picker__color-types input[type=number]{text-align:center;-moz-appearance:textfield}.forge-color-picker__color-types input[type=number]::-webkit-inner-spin-button,.forge-color-picker__color-types input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.forge-color-picker__color-hex{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:center;justify-content:center;-webkit-box-align:space-between;align-items:space-between}.forge-color-picker__canvas{background-image:url(\\\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNnB4IiBoZWlnaHQ9IjZweCIgdmlld0JveD0iMCAwIDYgNiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTAgKDU0OTgzKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5Hcm91cCA5PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ikdyb3VwLTkiPgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLTExIiBmaWxsPSIjRTBFMEUwIiB4PSIwIiB5PSIwIiB3aWR0aD0iMyIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMTEtQ29weS0yIiBmaWxsPSIjRkZGRkZGIiB4PSIwIiB5PSIzIiB3aWR0aD0iMyIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMTEtQ29weSIgZmlsbD0iI0ZGRkZGRiIgeD0iMyIgeT0iMCIgd2lkdGg9IjMiIGhlaWdodD0iMyI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLTExLUNvcHktMyIgZmlsbD0iI0UwRTBFMCIgeD0iMyIgeT0iMyIgd2lkdGg9IjMiIGhlaWdodD0iMyI+PC9yZWN0PgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\\\")}.forge-color-picker__hue-slider{height:8px;background:-webkit-gradient(linear,left top,right top,color-stop(0,red),color-stop(16%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(84%,#f0f),to(#ff0004));background:linear-gradient(to right,red 0,#ff0 16%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 84%,#ff0004 100%)}.forge-color-picker__opacity-slider{height:8px;margin-top:16px;background:-webkit-gradient(linear,left top,right top,from(rgba(255,0,0,0)),to(red));background:linear-gradient(to right,rgba(255,0,0,0) 0,red 100%)}.forge-color-picker__color-hsva,.forge-color-picker__color-rgba{display:-webkit-box;display:flex}.forge-color-picker__color-hsva div,.forge-color-picker__color-rgba div{margin-right:4px}.forge-color-picker__color-hsva label,.forge-color-picker__color-rgba label{display:block;text-align:center}.forge-color-picker__color-hsva input,.forge-color-picker__color-rgba input{width:44px}:host{display:inline-block}:host([hidden]){display:none}';\nexport interface IColorPickerComponent extends IBaseComponent {\n value: string | null | undefined;\n rgba: IRGBA | null | undefined;\n hsva: IHSVA | null | undefined;\n opacity: number | null | undefined;\n allowOpacity: boolean;\n debounceChangeEvent: boolean;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-color-picker': IColorPickerComponent;\n }\n\n interface HTMLElementEventMap {\n 'forge-color-picker-change': CustomEvent<IColorPickerChangeEventData>;\n }\n}\n\n/**\n * The web component class behind the `<forge-color-picker>` custom element.\n * \n * @tag forge-color-picker\n */\n@CustomElement({\n name: COLOR_PICKER_CONSTANTS.elementName,\n dependencies: [\n IconButtonComponent,\n TooltipComponent,\n IconComponent\n ]\n})\nexport class ColorPickerComponent extends BaseComponent implements IColorPickerComponent {\n public static get observedAttributes(): string[] {\n return [\n COLOR_PICKER_CONSTANTS.attributes.VALUE,\n COLOR_PICKER_CONSTANTS.attributes.ALLOW_OPACITY,\n COLOR_PICKER_CONSTANTS.attributes.DEBOUNCE_CHANGE_EVENT\n ];\n }\n\n private _foundation: ColorPickerFoundation;\n\n constructor() {\n super();\n IconRegistry.define(tylIconUnfoldMore);\n attachShadowTemplate(this, template, styles);\n this._foundation = new ColorPickerFoundation(new ColorPickerAdapter(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 COLOR_PICKER_CONSTANTS.attributes.VALUE:\n this.value = newValue;\n break;\n case COLOR_PICKER_CONSTANTS.attributes.ALLOW_OPACITY:\n this.allowOpacity = coerceBoolean(newValue);\n break;\n case COLOR_PICKER_CONSTANTS.attributes.DEBOUNCE_CHANGE_EVENT:\n this.debounceChangeEvent = coerceBoolean(newValue);\n break;\n }\n }\n\n /** Gets/sets the value using hex format only. */\n @FoundationProperty()\n public declare value: string | null | undefined;\n\n /** Gets/sets the value using rgba format. */\n @FoundationProperty()\n public declare rgba: IRGBA | null | undefined;\n\n /** Gets/sets the value using hsva format. */\n @FoundationProperty()\n public declare hsva: IHSVA | null | undefined;\n\n /** Gets/sets the opacity value, if `allowOpacity` is true. */\n @FoundationProperty()\n public declare opacity: number | null | undefined;\n\n /** Gets/sets whether opacity is displayed and allowed be to changed. */\n @FoundationProperty()\n public declare allowOpacity: boolean;\n\n /** Gets/sets whether change event has a debounce applied to avoid successive updates. Defaults to `false`. */\n @FoundationProperty()\n public declare debounceChangeEvent: boolean;\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { ColorPickerComponent } from './color-picker';\n\nexport * from './color-picker-adapter';\nexport * from './color-picker-constants';\nexport * from './color-picker-foundation';\nexport * from './color-picker';\n\nexport function defineColorPickerComponent(): void {\n defineCustomElement(ColorPickerComponent);\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["elementName", "COMPONENT_NAME_PREFIX", "attributes", "classes", "selectors", "events", "numbers", "COLOR_PICKER_CONSTANTS", "DEFAULT_COLOR", "ColorPickerValueType", "ColorPickerAdapter", "BaseAdapter", "component", "getShadowElement", "COLOR_PICKER_CONSTANTS", "rgbaStyle", "value", "rgba", "hsva", "hueValue", "opacityValue", "type", "listener", "visible", "relativeCoords", "absX", "absY", "element", "bounds", "x", "y", "hsvaToRgba", "hsva", "r", "g", "b", "h", "s", "v", "i", "f", "p", "q", "t", "rgbaToHex", "rgba", "toHex", "hexToRgba", "hex", "isShorthand", "hexR", "hexG", "hexB", "hexA", "formatRgba", "formatHex", "value", "allowOpacity", "rgbaToHsva", "max", "min", "d", "isValidHex", "isValidRGBA", "isNumber", "isValidHSVA", "ColorPickerGradientSlider", "_rootElement", "_changeListener", "evt", "saturation", "value", "bounds", "COLOR_PICKER_CONSTANTS", "isEnterKey", "isArrowLeftKey", "isArrowUpKey", "isArrowRightKey", "isArrowDownKey", "isMouseEvent", "x", "y", "coords", "absX", "absY", "relativeCoords", "xPercent", "yPercent", "ColorPickerSlider", "_rootElement", "_changeListener", "evt", "value", "COLOR_PICKER_CONSTANTS", "isArrowLeftKey", "isArrowRightKey", "isHomeKey", "isEndKey", "x", "absX", "coords", "relativeCoords", "percent", "ColorPickerFoundation", "_adapter", "DEFAULT_COLOR", "x", "y", "value", "evt", "ColorPickerGradientSlider", "ColorPickerSlider", "debounce", "type", "source", "COLOR_PICKER_CONSTANTS", "isValidHex", "isValidRGBA", "rgbaToHex", "isValidHSVA", "hsvaToRgba", "hexToRgba", "rgbaToHsva", "rgba", "formatRgba", "formatHex", "data", "__spreadValues", "template", "styles", "ColorPickerComponent", "BaseComponent", "IconRegistry", "tylIconUnfoldMore", "attachShadowTemplate", "ColorPickerFoundation", "ColorPickerAdapter", "COLOR_PICKER_CONSTANTS", "name", "oldValue", "newValue", "coerceBoolean", "__decorateClass", "FoundationProperty", "CustomElement", "IconButtonComponent", "TooltipComponent", "IconComponent", "defineColorPickerComponent", "defineCustomElement", "ColorPickerComponent"]
|
|
7
7
|
}
|