From 3e87499ac731e35fe3b77be41cb45571bac5a946 Mon Sep 17 00:00:00 2001 From: Bagus <25834188+contactjavas@users.noreply.github.com> Date: Thu, 30 Dec 2021 21:40:50 +0700 Subject: [PATCH] add back control-react-colorful (with uppercase CSS folder) --- packages/composer/installed.php | 4 +- .../.github/FUNDING.yml | 0 .../control-react-colorful/.prettierignore | 1 + .../control-react-colorful/dist/control.css | 2 + .../dist/control.css.map | 1 + .../control-react-colorful/dist/control.js | 2 + .../dist/control.js.map | 1 + .../control-react-colorful/dist/preview.js | 2 + .../dist/preview.js.map | 1 + .../src/Control/ReactColorful.php | 192 +++++++++++ .../src/Field/CSS/ReactColorful.php | 83 +++++ .../src/Field/ReactColorful.php | 283 ++++++++++++++++ .../control-react-colorful/src/control.scss | 304 ++++++++++++++++++ .../js/components/KirkiReactColorfulCIrcle.js | 50 +++ .../js/components/KirkiReactColorfulInput.js | 93 ++++++ .../components/KirkiReactColorfulSwatches.js | 22 ++ .../src/js/hooks/useClickOutside.js | 45 +++ .../src/js/hooks/useFocusOutside.js | 23 ++ .../src/js/hooks/useWindowResize.js | 17 + .../src/js/utils/convertColorForCustomizer.js | 138 ++++++++ .../src/js/utils/convertColorForInput.js | 182 +++++++++++ .../src/js/utils/convertColorForPicker.js | 97 ++++++ .../src/js/utils/util.js | 0 23 files changed, 1541 insertions(+), 2 deletions(-) create mode 100644 packages/kirki-framework/control-react-colorful/.github/FUNDING.yml create mode 100644 packages/kirki-framework/control-react-colorful/.prettierignore create mode 100644 packages/kirki-framework/control-react-colorful/dist/control.css create mode 100644 packages/kirki-framework/control-react-colorful/dist/control.css.map create mode 100644 packages/kirki-framework/control-react-colorful/dist/control.js create mode 100644 packages/kirki-framework/control-react-colorful/dist/control.js.map create mode 100644 packages/kirki-framework/control-react-colorful/dist/preview.js create mode 100644 packages/kirki-framework/control-react-colorful/dist/preview.js.map create mode 100644 packages/kirki-framework/control-react-colorful/src/Control/ReactColorful.php create mode 100644 packages/kirki-framework/control-react-colorful/src/Field/CSS/ReactColorful.php create mode 100644 packages/kirki-framework/control-react-colorful/src/Field/ReactColorful.php create mode 100644 packages/kirki-framework/control-react-colorful/src/control.scss create mode 100644 packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulCIrcle.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulInput.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulSwatches.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/hooks/useClickOutside.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/hooks/useFocusOutside.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/hooks/useWindowResize.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForCustomizer.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForInput.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForPicker.js create mode 100644 packages/kirki-framework/control-react-colorful/src/js/utils/util.js diff --git a/packages/composer/installed.php b/packages/composer/installed.php index d46777009..46246656b 100644 --- a/packages/composer/installed.php +++ b/packages/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'b1f7ed2f138bd3661329605a9b4b1fc4cc11a842', + 'reference' => '2d83d8cfd686f414acc98e927ad51c0662de7bb9', 'name' => 'kirki-framework/kirki', 'dev' => true, ), @@ -313,7 +313,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'b1f7ed2f138bd3661329605a9b4b1fc4cc11a842', + 'reference' => '2d83d8cfd686f414acc98e927ad51c0662de7bb9', 'dev_requirement' => false, ), 'kirki-framework/l10n' => array( diff --git a/packages/kirki-framework/control-react-colorful/.github/FUNDING.yml b/packages/kirki-framework/control-react-colorful/.github/FUNDING.yml new file mode 100644 index 000000000..e69de29bb diff --git a/packages/kirki-framework/control-react-colorful/.prettierignore b/packages/kirki-framework/control-react-colorful/.prettierignore new file mode 100644 index 000000000..dd449725e --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/.prettierignore @@ -0,0 +1 @@ +*.md diff --git a/packages/kirki-framework/control-react-colorful/dist/control.css b/packages/kirki-framework/control-react-colorful/dist/control.css new file mode 100644 index 000000000..97e741ddf --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/dist/control.css @@ -0,0 +1,2 @@ +.customize-control-kirki-react-colorful .kirki-control-form{box-sizing:border-box;position:relative}.customize-control-kirki-react-colorful .kirki-control-form *{box-sizing:border-box}.customize-control-kirki-react-colorful .kirki-control-cols{align-items:flex-start;display:flex}.customize-control-kirki-react-colorful .kirki-control-left-col{padding-right:30px;width:90%;width:calc(100% - 35px)}.customize-control-kirki-react-colorful .kirki-control-right-col{display:flex;justify-content:flex-end;width:35px}.customize-control-kirki-react-colorful .use-hue-mode .react-colorful{height:auto}.customize-control-kirki-react-colorful .use-hue-mode .react-colorful__saturation{display:none}.customize-control-kirki-react-colorful .use-hue-mode .react-colorful__last-control{border-radius:4px}.customize-control-kirki-react-colorful .use-hue-mode input.kirki-color-input{padding-left:8px}.customize-control-kirki-react-colorful .kirki-trigger-circle-wrapper{align-items:center;border:1px solid #ccc;border-radius:50%;display:flex;height:33px;justify-content:center;padding:3px;position:relative;width:33px}.customize-control-kirki-react-colorful .kirki-trigger-circle{background-size:10px;border:none;border-radius:50%;cursor:pointer;display:block;height:25px;padding:0;position:relative;width:25px}.customize-control-kirki-react-colorful .kirki-trigger-circle .kirki-color-preview{height:100%;left:0;position:absolute;top:0;width:100%}.customize-control-kirki-react-colorful .colorPickerContainer{background-color:#fff;border-radius:6px;box-shadow:0 12px 15px 0 rgba(0,0,0,.09);margin-top:5px;opacity:0;padding:15px;position:absolute;right:0;top:35px;transition:all .2s;transition-property:opacity,visibility;visibility:hidden;width:100%;z-index:9999}.customize-control-kirki-react-colorful .colorPickerContainer.is-open{opacity:1;transition:all .2s ease 10ms;transition-property:opacity,visibility;visibility:visible}.customize-control-kirki-react-colorful .react-colorful{border-radius:4px;width:100%}.customize-control-kirki-react-colorful .react-colorful__saturation{border-radius:4px 4px 0 0}.customize-control-kirki-react-colorful .react-colorful__last-control{border-radius:0 0 4px 4px}.customize-control-kirki-react-colorful .react-colorful__pointer{height:20px;width:20px}.customize-control-kirki-react-colorful .kirki-color-input-wrapper{margin-top:15px}.customize-control-kirki-react-colorful .kirki-color-input-control{align-items:center;display:flex;position:relative;width:100%}.customize-control-kirki-react-colorful input.kirki-color-input{border:1px solid #ccc;border-radius:4px;color:#333;display:block;height:30px;line-height:30px;padding-left:32px;padding-right:8px;position:relative;width:100%;z-index:1}.customize-control-kirki-react-colorful .kirki-color-input:active,.customize-control-kirki-react-colorful .kirki-color-input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.customize-control-kirki-react-colorful .kirki-color-preview-wrapper{background-repeat:repeat;background-size:8px;border:2px solid #fff;border-radius:50%;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd;height:22px;left:6px;position:absolute;width:22px;z-index:2}.customize-control-kirki-react-colorful .kirki-color-preview,.customize-control-kirki-react-colorful .kirki-control-reset{background-color:transparent;cursor:pointer;padding:0;position:absolute}.customize-control-kirki-react-colorful .kirki-color-preview{border-radius:50%;border-width:0;display:block;height:100%;width:100%}.customize-control-kirki-react-colorful .kirki-control-reset{align-items:center;border-radius:50%;border-width:0;display:flex;height:17px;justify-content:center;right:35px;top:8px;width:17px;z-index:3}.customize-control-kirki-react-colorful .kirki-control-reset:hover i{color:red;transform:rotate(-45deg)}.customize-control-kirki-react-colorful .kirki-control-reset i{font-size:12px;height:auto;transform:rotate(45deg);transition:transform .2s;width:auto}.customize-control-kirki-react-colorful .kirki-color-swatches{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.customize-control-kirki-react-colorful .kirki-color-swatch{border:2px solid #fff;border-radius:50%;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd;cursor:pointer;display:block;height:25px;padding:0;position:relative;transform:scale(1);transition:transform .2s;width:25px}.customize-control-kirki-react-colorful .kirki-color-swatch:active,.customize-control-kirki-react-colorful .kirki-color-swatch:focus{outline:none}.customize-control-kirki-react-colorful .kirki-color-swatch:focus,.customize-control-kirki-react-colorful .kirki-color-swatch:hover{transform:scale(1.1)}.customize-control-kirki-react-colorful .kirki-label-tooltip{background-color:rgba(0,0,0,.7);border-radius:4px;bottom:45px;color:#fff;left:-8px;max-width:100px;opacity:0;padding:7px 10px 3px;position:absolute;transition:all .2s;visibility:hidden;width:auto;width:max-content}.customize-control-kirki-react-colorful .kirki-label-tooltip:before{border-color:rgba(0,0,0,.7) transparent transparent;border-style:solid;border-width:8px 7px 0;bottom:-8px;content:"";left:19px;position:absolute}.customize-control-kirki-react-colorful .kirki-label-tooltip .customize-control-title{line-height:1.2}.customize-control-kirki-react-colorful .kirki-trigger-circle-wrapper:hover~.kirki-label-tooltip{opacity:1;visibility:visible}.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-multicolor]{margin-bottom:20px;margin-right:8px;padding-right:0;width:35px}.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-multicolor] .kirki-control-reset{right:8px;top:-16px}.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-typography] .colorPickerContainer{top:55px}.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-typography] .kirki-control-reset{left:35px;right:auto;top:30px} +/*# sourceMappingURL=control.css.map */ diff --git a/packages/kirki-framework/control-react-colorful/dist/control.css.map b/packages/kirki-framework/control-react-colorful/dist/control.css.map new file mode 100644 index 000000000..1917fe3da --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/dist/control.css.map @@ -0,0 +1 @@ +{"mappings":"AAEE,4DAEE,qBAAA,CADA,iBCAJ,CDIE,8DACE,qBCFJ,CDKE,4DAEE,sBAAA,CADA,YCFJ,CDME,gEACE,kBAAA,CACA,SAAA,CACA,uBCJJ,CDOE,iEACE,YAAA,CACA,wBAAA,CACA,UCLJ,CDSI,sEACE,WCPN,CDUI,kFACE,YCRN,CDWI,oFACE,iBCTN,CDYI,8EAEE,gBCVN,CDcE,sEAGE,kBAAA,CAMA,qBAAA,CADA,iBAAA,CANA,YAAA,CAKA,WAAA,CAHA,sBAAA,CACA,WAAA,CAJA,iBAAA,CAKA,UCTJ,CDeE,8DAME,oBAAA,CACA,WAAA,CACA,iBAAA,CACA,cAAA,CANA,aAAA,CAEA,WAAA,CAHA,SAAA,CADA,iBAAA,CAGA,UCRJ,CDeI,mFAKE,WAAA,CAFA,MAAA,CAFA,iBAAA,CACA,KAAA,CAEA,UCZN,CDiBE,8DAOE,qBAAA,CACA,iBAAA,CACA,wCAAA,CALA,cAAA,CAQA,SAAA,CANA,YAAA,CALA,iBAAA,CAEA,OAAA,CADA,QAAA,CAYA,kBAAA,CACA,sCAAA,CAFA,iBAAA,CARA,UAAA,CAKA,YCXJ,CDkBI,sEACE,SAAA,CAEA,4BAAA,CACA,sCAAA,CAFA,kBCdN,CDoBE,wDAEE,iBAAA,CADA,UCjBJ,CDqBE,oEACE,yBCnBJ,CDsBE,sEACE,yBCpBJ,CDuBE,iEAEE,WAAA,CADA,UCpBJ,CDwBE,mEACE,eCtBJ,CDyBE,mEAGE,kBAAA,CADA,YAAA,CADA,iBAAA,CAGA,UCvBJ,CD0BE,gEASE,qBAAA,CACA,iBAAA,CAFA,UAAA,CAPA,aAAA,CAKA,WAAA,CACA,gBAAA,CAJA,iBAAA,CACA,iBAAA,CAFA,iBAAA,CAGA,UAAA,CAMA,SCxBJ,CD2BE,mIAIE,oBAAA,CAFA,4BAAA,CACA,YCxBJ,CD4BE,qEAKE,wBAAA,CACA,mBAAA,CAGA,qBAAA,CAFA,iBAAA,CAGA,iCAAA,CACA,yBAAA,CAPA,WAAA,CAFA,QAAA,CADA,iBAAA,CAEA,UAAA,CASA,SC1BJ,CD6BE,0HAIE,4BAAA,CACA,cAAA,CAFA,SAAA,CADA,iBCxBJ,CD8BE,6DAIE,iBAAA,CACA,cAAA,CAJA,aAAA,CAEA,WAAA,CADA,UCzBJ,CD+BE,6DAEE,kBAAA,CAMA,iBAAA,CACA,cAAA,CARA,YAAA,CAMA,WAAA,CAJA,sBAAA,CAEA,UAAA,CADA,OAAA,CAEA,UAAA,CAIA,SC7BJ,CDgCE,qEACE,SAAA,CACA,wBC9BJ,CDiCE,+DACE,cAAA,CAEA,WAAA,CACA,uBAAA,CACA,wBAAA,CAHA,UC5BJ,CDkCE,8DAEE,kBAAA,CADA,YAAA,CAEA,6BAAA,CACA,kBChCJ,CDmCE,4DAOE,qBAAA,CADA,iBAAA,CAKA,iCAAA,CACA,yBAAA,CAJA,cAAA,CANA,aAAA,CAGA,WAAA,CAFA,SAAA,CAFA,iBAAA,CAQA,kBAAA,CACA,wBAAA,CANA,UCzBJ,CDoCE,qIAEE,YClCJ,CDqCE,oIAEE,oBCnCJ,CDsCE,6DASE,+BAAA,CACA,iBAAA,CARA,WAAA,CAMA,UAAA,CALA,SAAA,CAIA,eAAA,CAIA,SAAA,CAPA,oBAAA,CAHA,iBAAA,CAYA,kBAAA,CADA,iBAAA,CAPA,UAAA,CACA,iBC7BJ,CDsCI,oEAOE,mDAAA,CAAA,kBAAA,CAAA,sBAAA,CAJA,WAAA,CAFA,UAAA,CAGA,SAAA,CAFA,iBC/BN,CDuCI,sFACE,eCrCN,CD0CI,iGACE,SAAA,CACA,kBCxCN,CD4CE,yFAEE,kBAAA,CADA,gBAAA,CAEA,eAAA,CACA,UC1CJ,CD4CI,8GAEE,SAAA,CADA,SCzCN,CD+CI,+GACE,QC7CN,CDgDI,8GAGE,SAAA,CADA,UAAA,CADA,QC5CN","sources":["src/control.scss","%3Cinput%20css%204NFlsc%3E"],"sourcesContent":["// React colorful control.\n.customize-control-kirki-react-colorful {\n .kirki-control-form {\n position: relative;\n box-sizing: border-box;\n }\n\n .kirki-control-form * {\n box-sizing: border-box;\n }\n\n .kirki-control-cols {\n display: flex;\n align-items: flex-start;\n }\n\n .kirki-control-left-col {\n padding-right: 30px;\n width: 90%;\n width: calc(100% - 35px);\n }\n\n .kirki-control-right-col {\n display: flex;\n justify-content: flex-end;\n width: 35px;\n }\n\n .use-hue-mode {\n .react-colorful {\n height: auto;\n }\n\n .react-colorful__saturation {\n display: none;\n }\n\n .react-colorful__last-control {\n border-radius: 4px;\n }\n\n input.kirki-color-input {\n padding-left: 8px;\n padding-left: 8px;\n }\n }\n\n .kirki-trigger-circle-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 3px;\n width: 33px;\n height: 33px;\n border-radius: 50%;\n border: 1px solid #ccc;\n }\n\n .kirki-trigger-circle {\n position: relative;\n padding: 0;\n display: block;\n width: 25px;\n height: 25px;\n background-size: 10px;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n\n .kirki-color-preview {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n }\n\n .colorPickerContainer {\n position: absolute;\n top: 35px;\n right: 0;\n margin-top: 5px;\n width: 100%;\n padding: 15px;\n background-color: #fff;\n border-radius: 6px;\n box-shadow: rgba(0, 0, 0, 0.09) 0 12px 15px 0;\n z-index: 9999;\n\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s;\n transition-property: opacity, visibility; // Yes, only opacity and visibility please.\n\n &.is-open {\n opacity: 1;\n visibility: visible;\n transition: all 0.2s ease 10ms; // When we open the picker popup, the top offset is changed, so we need to wait a bit.\n transition-property: opacity, visibility; // Yes, only opacity and visibility please.\n }\n }\n\n .react-colorful {\n width: 100%;\n border-radius: 4px;\n }\n\n .react-colorful__saturation {\n border-radius: 4px 4px 0 0;\n }\n\n .react-colorful__last-control {\n border-radius: 0 0 4px 4px;\n }\n\n .react-colorful__pointer {\n width: 20px;\n height: 20px;\n }\n\n .kirki-color-input-wrapper {\n margin-top: 15px;\n }\n\n .kirki-color-input-control {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n input.kirki-color-input {\n display: block;\n position: relative;\n padding-left: 32px;\n padding-right: 8px;\n width: 100%;\n height: 30px;\n line-height: 30px;\n color: #333;\n border: 1px solid #ccc;\n border-radius: 4px;\n z-index: 1;\n }\n\n .kirki-color-input:focus,\n .kirki-color-input:active {\n box-shadow: 0 0 0 1px #2271b1;\n outline: none;\n border-color: #2271b1;\n }\n\n .kirki-color-preview-wrapper {\n position: absolute;\n left: 6px;\n width: 22px;\n height: 22px;\n background-repeat: repeat;\n background-size: 8px;\n border-radius: 50%;\n border: 1px solid #ddd;\n border: 2px solid #fff;\n -webkit-box-shadow: 0px 0px 0px 1px #ddd;\n box-shadow: 0px 0px 0px 1px #ddd;\n z-index: 2;\n }\n\n .kirki-color-preview,\n .kirki-control-reset {\n position: absolute;\n padding: 0;\n background-color: transparent;\n cursor: pointer;\n }\n\n .kirki-color-preview {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border-width: 0;\n }\n\n .kirki-control-reset {\n display: flex;\n align-items: center;\n justify-content: center;\n top: 8px;\n right: 35px;\n width: 17px;\n height: 17px;\n border-radius: 50%;\n border-width: 0;\n z-index: 3;\n }\n\n .kirki-control-reset:hover i {\n color: #f00;\n transform: rotate(-45deg);\n }\n\n .kirki-control-reset i {\n font-size: 12px;\n width: auto;\n height: auto;\n transform: rotate(45deg);\n transition: transform 0.2s;\n }\n\n .kirki-color-swatches {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n }\n\n .kirki-color-swatch {\n position: relative;\n display: block;\n padding: 0;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n border: 2px solid #fff;\n cursor: pointer;\n transform: scale(1, 1);\n transition: transform 0.2s;\n -webkit-box-shadow: 0px 0px 0px 1px #ddd;\n box-shadow: 0px 0px 0px 1px #ddd;\n }\n\n .kirki-color-swatch:active,\n .kirki-color-swatch:focus {\n outline: none;\n }\n\n .kirki-color-swatch:hover,\n .kirki-color-swatch:focus {\n transform: scale(1.1, 1.1);\n }\n\n .kirki-label-tooltip {\n position: absolute;\n bottom: 45px;\n left: -8px;\n padding: 7px 10px 3px; // The 4px of bottom side is handled by label / description's margin-bottom.\n width: auto; // just for fallback for max-content.\n width: max-content;\n max-width: 100px;\n color: #fff;\n background-color: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s;\n\n &::before {\n content: \"\";\n position: absolute;\n bottom: -8px;\n left: 19px;\n border-width: 8px 7px 0 7px;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.7) transparent transparent transparent;\n }\n\n .customize-control-title {\n line-height: 1.2;\n }\n }\n\n .kirki-trigger-circle-wrapper {\n &:hover ~ .kirki-label-tooltip {\n opacity: 1;\n visibility: visible;\n }\n }\n\n &[data-kirki-parent-control-type=\"kirki-multicolor\"] {\n margin-right: 8px;\n margin-bottom: 20px;\n padding-right: 0;\n width: 35px;\n\n .kirki-control-reset {\n top: -16px;\n right: 8px;\n }\n }\n\n &[data-kirki-parent-control-type=\"kirki-typography\"] {\n .colorPickerContainer {\n top: 55px;\n }\n\n .kirki-control-reset {\n top: 30px;\n right: auto;\n left: 35px;\n }\n }\n}\n",".customize-control-kirki-react-colorful .kirki-control-form {\n position: relative;\n box-sizing: border-box;\n}\n.customize-control-kirki-react-colorful .kirki-control-form * {\n box-sizing: border-box;\n}\n.customize-control-kirki-react-colorful .kirki-control-cols {\n display: flex;\n align-items: flex-start;\n}\n.customize-control-kirki-react-colorful .kirki-control-left-col {\n padding-right: 30px;\n width: 90%;\n width: calc(100% - 35px);\n}\n.customize-control-kirki-react-colorful .kirki-control-right-col {\n display: flex;\n justify-content: flex-end;\n width: 35px;\n}\n.customize-control-kirki-react-colorful .use-hue-mode .react-colorful {\n height: auto;\n}\n.customize-control-kirki-react-colorful .use-hue-mode .react-colorful__saturation {\n display: none;\n}\n.customize-control-kirki-react-colorful .use-hue-mode .react-colorful__last-control {\n border-radius: 4px;\n}\n.customize-control-kirki-react-colorful .use-hue-mode input.kirki-color-input {\n padding-left: 8px;\n padding-left: 8px;\n}\n.customize-control-kirki-react-colorful .kirki-trigger-circle-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 3px;\n width: 33px;\n height: 33px;\n border-radius: 50%;\n border: 1px solid #ccc;\n}\n.customize-control-kirki-react-colorful .kirki-trigger-circle {\n position: relative;\n padding: 0;\n display: block;\n width: 25px;\n height: 25px;\n background-size: 10px;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n}\n.customize-control-kirki-react-colorful .kirki-trigger-circle .kirki-color-preview {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.customize-control-kirki-react-colorful .colorPickerContainer {\n position: absolute;\n top: 35px;\n right: 0;\n margin-top: 5px;\n width: 100%;\n padding: 15px;\n background-color: #fff;\n border-radius: 6px;\n box-shadow: rgba(0, 0, 0, 0.09) 0 12px 15px 0;\n z-index: 9999;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s;\n transition-property: opacity, visibility;\n}\n.customize-control-kirki-react-colorful .colorPickerContainer.is-open {\n opacity: 1;\n visibility: visible;\n transition: all 0.2s ease 10ms;\n transition-property: opacity, visibility;\n}\n.customize-control-kirki-react-colorful .react-colorful {\n width: 100%;\n border-radius: 4px;\n}\n.customize-control-kirki-react-colorful .react-colorful__saturation {\n border-radius: 4px 4px 0 0;\n}\n.customize-control-kirki-react-colorful .react-colorful__last-control {\n border-radius: 0 0 4px 4px;\n}\n.customize-control-kirki-react-colorful .react-colorful__pointer {\n width: 20px;\n height: 20px;\n}\n.customize-control-kirki-react-colorful .kirki-color-input-wrapper {\n margin-top: 15px;\n}\n.customize-control-kirki-react-colorful .kirki-color-input-control {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n}\n.customize-control-kirki-react-colorful input.kirki-color-input {\n display: block;\n position: relative;\n padding-left: 32px;\n padding-right: 8px;\n width: 100%;\n height: 30px;\n line-height: 30px;\n color: #333;\n border: 1px solid #ccc;\n border-radius: 4px;\n z-index: 1;\n}\n.customize-control-kirki-react-colorful .kirki-color-input:focus,\n.customize-control-kirki-react-colorful .kirki-color-input:active {\n box-shadow: 0 0 0 1px #2271b1;\n outline: none;\n border-color: #2271b1;\n}\n.customize-control-kirki-react-colorful .kirki-color-preview-wrapper {\n position: absolute;\n left: 6px;\n width: 22px;\n height: 22px;\n background-repeat: repeat;\n background-size: 8px;\n border-radius: 50%;\n border: 1px solid #ddd;\n border: 2px solid #fff;\n -webkit-box-shadow: 0px 0px 0px 1px #ddd;\n box-shadow: 0px 0px 0px 1px #ddd;\n z-index: 2;\n}\n.customize-control-kirki-react-colorful .kirki-color-preview,\n.customize-control-kirki-react-colorful .kirki-control-reset {\n position: absolute;\n padding: 0;\n background-color: transparent;\n cursor: pointer;\n}\n.customize-control-kirki-react-colorful .kirki-color-preview {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border-width: 0;\n}\n.customize-control-kirki-react-colorful .kirki-control-reset {\n display: flex;\n align-items: center;\n justify-content: center;\n top: 8px;\n right: 35px;\n width: 17px;\n height: 17px;\n border-radius: 50%;\n border-width: 0;\n z-index: 3;\n}\n.customize-control-kirki-react-colorful .kirki-control-reset:hover i {\n color: #f00;\n transform: rotate(-45deg);\n}\n.customize-control-kirki-react-colorful .kirki-control-reset i {\n font-size: 12px;\n width: auto;\n height: auto;\n transform: rotate(45deg);\n transition: transform 0.2s;\n}\n.customize-control-kirki-react-colorful .kirki-color-swatches {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n.customize-control-kirki-react-colorful .kirki-color-swatch {\n position: relative;\n display: block;\n padding: 0;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n border: 2px solid #fff;\n cursor: pointer;\n transform: scale(1, 1);\n transition: transform 0.2s;\n -webkit-box-shadow: 0px 0px 0px 1px #ddd;\n box-shadow: 0px 0px 0px 1px #ddd;\n}\n.customize-control-kirki-react-colorful .kirki-color-swatch:active,\n.customize-control-kirki-react-colorful .kirki-color-swatch:focus {\n outline: none;\n}\n.customize-control-kirki-react-colorful .kirki-color-swatch:hover,\n.customize-control-kirki-react-colorful .kirki-color-swatch:focus {\n transform: scale(1.1, 1.1);\n}\n.customize-control-kirki-react-colorful .kirki-label-tooltip {\n position: absolute;\n bottom: 45px;\n left: -8px;\n padding: 7px 10px 3px;\n width: auto;\n width: max-content;\n max-width: 100px;\n color: #fff;\n background-color: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s;\n}\n.customize-control-kirki-react-colorful .kirki-label-tooltip::before {\n content: \"\";\n position: absolute;\n bottom: -8px;\n left: 19px;\n border-width: 8px 7px 0 7px;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.7) transparent transparent transparent;\n}\n.customize-control-kirki-react-colorful .kirki-label-tooltip .customize-control-title {\n line-height: 1.2;\n}\n.customize-control-kirki-react-colorful .kirki-trigger-circle-wrapper:hover ~ .kirki-label-tooltip {\n opacity: 1;\n visibility: visible;\n}\n.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-multicolor] {\n margin-right: 8px;\n margin-bottom: 20px;\n padding-right: 0;\n width: 35px;\n}\n.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-multicolor] .kirki-control-reset {\n top: -16px;\n right: 8px;\n}\n.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-typography] .colorPickerContainer {\n top: 55px;\n}\n.customize-control-kirki-react-colorful[data-kirki-parent-control-type=kirki-typography] .kirki-control-reset {\n top: 30px;\n right: auto;\n left: 35px;\n}\n/*# sourceMappingURL=control.css.map */\n"],"names":[],"version":3,"file":"control.css.map"} \ No newline at end of file diff --git a/packages/kirki-framework/control-react-colorful/dist/control.js b/packages/kirki-framework/control-react-colorful/dist/control.js new file mode 100644 index 000000000..ed211f346 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/dist/control.js @@ -0,0 +1,2 @@ +!function(){function e(e){return e&&e.__esModule?e.default:e}var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},r={},n={},o=t.parcelRequire4303;null==o&&((o=function(e){if(e in r)return r[e].exports;if(e in n){var t=n[e];delete n[e];var o={id:e,exports:{}};return r[e]=o,t.call(o.exports,o,o.exports),o.exports}var a=new Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}).register=function(e,t){n[e]=t},t.parcelRequire4303=o);var a;function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}a=ReactDOM;var i={};function u(){return(u=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}function s(e){var t=i.useRef(e),r=i.useRef((function(e){t.current&&t.current(e)}));return t.current=e,r.current}i=React;var f=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=1),e>r?r:e0:e.buttons>0)&&a.current?c(d(a.current,e)):r(!1)},t=function(){return r(!1)};function r(r){var n=b.current,o=r?self.addEventListener:self.removeEventListener;o(n?"touchmove":"mousemove",e),o(n?"touchend":"mouseup",t)}return[function(e){var t,n=e.nativeEvent,o=a.current;o&&(p(n),t=n,(!b.current||v(t))&&o&&(b.current=v(n),o.focus(),c(d(o,n)),r(!0)))},function(e){var t=e.which||e.keyCode;t<37||t>40||(e.preventDefault(),f({left:39===t?.05:37===t?-.05:0,top:40===t?.05:38===t?-.05:0}))},r]}),[f,c]),g=h[0],y=h[1],m=h[2];return i.useEffect((function(){return m}),[m]),e(i).createElement("div",u({},o,{onTouchStart:g,onMouseDown:g,className:"react-colorful__interactive",ref:a,onKeyDown:y,tabIndex:0,role:"slider"}))})),h=function(e){return e.filter(Boolean).join(" ")},g=function(t){var r=t.color,n=t.left,o=t.top,a=void 0===o?.5:o,c=h(["react-colorful__pointer",t.className]);return e(i).createElement("div",{className:c,style:{top:100*a+"%",left:100*n+"%"}},e(i).createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:r}}))},y=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=Math.pow(10,t)),Math.round(r*e)/r},m={grad:.9,turn:360,rad:360/(2*Math.PI)},_=function(e){return"#"===e[0]&&(e=e.substr(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:1}:{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:1}},k=function(e,t){return void 0===t&&(t="deg"),Number(e)*(m[t]||1)},j=function(e){var t=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?w({h:k(t[1],t[2]),s:Number(t[3]),l:Number(t[4]),a:void 0===t[5]?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}},C=j,w=function(e){var t=e.s,r=e.l;return{h:e.h,s:(t*=(r<50?r:100-r)/100)>0?2*t/(r+t)*100:0,v:r+t,a:e.a}},A=function(e){var t=e.s,r=e.v,n=e.a,o=(200-t)*r/100;return{h:y(e.h),s:y(o>0&&o<200?t*r/100/(o<=100?o:200-o)*100:0),l:y(o/2),a:y(n,2)}},O=function(e){var t=A(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},S=function(e){var t=A(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},E=function(e){var t=e.h,r=e.s,n=e.v,o=e.a;t=t/360*6,r/=100,n/=100;var a=Math.floor(t),c=n*(1-r),i=n*(1-(t-a)*r),u=n*(1-(1-t+a)*r),l=a%6;return{r:y(255*[n,i,c,c,u,n][l]),g:y(255*[u,n,n,i,c,c][l]),b:y(255*[c,c,u,n,n,i][l]),a:y(o,2)}},H=function(e){var t=/hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?B({h:k(t[1],t[2]),s:Number(t[3]),v:Number(t[4]),a:void 0===t[5]?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}},R=H,P=function(e){var t=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?M({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}},x=P,N=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},M=function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=Math.max(t,r,n),c=a-Math.min(t,r,n),i=c?a===t?(r-n)/c:a===r?2+(n-t)/c:4+(t-r)/c:0;return{h:y(60*(i<0?i+6:i)),s:y(a?c/a*100:0),v:y(a/255*100),a:o}},B=function(e){return{h:y(e.h),s:y(e.s),v:y(e.v),a:y(e.a,2)}},z=e(i).memo((function(t){var r=t.hue,n=t.onChange,o=h(["react-colorful__hue",t.className]);return e(i).createElement("div",{className:o},e(i).createElement(b,{onMove:function(e){n({h:360*e.left})},onKey:function(e){n({h:f(r+360*e.left,0,360)})},"aria-label":"Hue","aria-valuetext":y(r)},e(i).createElement(g,{className:"react-colorful__hue-pointer",left:r/360,color:O({h:r,s:100,v:100,a:1})})))})),I=e(i).memo((function(t){var r=t.hsva,n=t.onChange,o={backgroundColor:O({h:r.h,s:100,v:100,a:1})};return e(i).createElement("div",{className:"react-colorful__saturation",style:o},e(i).createElement(b,{onMove:function(e){n({s:100*e.left,v:100-100*e.top})},onKey:function(e){n({s:f(r.s+100*e.left,0,100),v:f(r.v-100*e.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+y(r.s)+"%, Brightness "+y(r.v)+"%"},e(i).createElement(g,{className:"react-colorful__saturation-pointer",top:1-r.v/100,left:r.s/100,color:O(r)})))})),F=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},T=function(e,t){return e.replace(/\s/g,"")===t.replace(/\s/g,"")};function U(e,t,r){var n=s(r),o=i.useState((function(){return e.toHsva(t)})),a=o[0],c=o[1],u=i.useRef({color:t,hsva:a});i.useEffect((function(){if(!e.equal(t,u.current.color)){var r=e.toHsva(t);u.current={hsva:r,color:t},c(r)}}),[t,e]),i.useEffect((function(){var t;F(a,u.current.hsva)||e.equal(t=e.fromHsva(a),u.current.color)||(u.current={hsva:a,color:t},n(t))}),[a,e,n]);var l=i.useCallback((function(e){c((function(t){return Object.assign({},t,e)}))}),[]);return[a,l]}var L,D,W="undefined"!=typeof window?i.useLayoutEffect:i.useEffect,J=function(){W((function(){if("undefined"!=typeof document&&!D){(D=document.createElement("style")).innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\'data:image/svg+xml;charset=utf-8,\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}';var e=L||("undefined"!=typeof __webpack_nonce__?__webpack_nonce__:void 0);e&&D.setAttribute("nonce",e),document.head.appendChild(D)}}),[])},q=function(t){var r=t.className,n=t.colorModel,o=t.color,a=void 0===o?n.defaultColor:o,c=t.onChange,s=l(t,["className","colorModel","color","onChange"]);J();var f=U(n,a,c),v=f[0],d=f[1],p=h(["react-colorful",r]);return e(i).createElement("div",u({},s,{className:p}),e(i).createElement(I,{hsva:v,onChange:d}),e(i).createElement(z,{hue:v.h,onChange:d,className:"react-colorful__last-control"}))},V={defaultColor:"000",toHsva:function(e){return M(_(e))},fromHsva:function(e){var t,r,n;return r=(t=E(e)).g,n=t.b,"#"+N(t.r)+N(r)+N(n)},equal:function(e,t){return e.toLowerCase()===t.toLowerCase()||F(_(e),_(t))}},G=function(t){return e(i).createElement(q,u({},t,{colorModel:V}))},Z=function(t){var r=t.className,n=t.hsva,o=t.onChange,a={backgroundImage:"linear-gradient(90deg, "+S(Object.assign({},n,{a:0}))+", "+S(Object.assign({},n,{a:1}))+")"},c=h(["react-colorful__alpha",r]);return e(i).createElement("div",{className:c},e(i).createElement("div",{className:"react-colorful__alpha-gradient",style:a}),e(i).createElement(b,{onMove:function(e){o({a:e.left})},onKey:function(e){o({a:f(n.a+e.left)})},"aria-label":"Alpha","aria-valuetext":y(100*n.a)+"%"},e(i).createElement(g,{className:"react-colorful__alpha-pointer",left:n.a,color:S(n)})))},$=function(t){var r=t.className,n=t.colorModel,o=t.color,a=void 0===o?n.defaultColor:o,c=t.onChange,s=l(t,["className","colorModel","color","onChange"]);J();var f=U(n,a,c),v=f[0],d=f[1],p=h(["react-colorful",r]);return e(i).createElement("div",u({},s,{className:p}),e(i).createElement(I,{hsva:v,onChange:d}),e(i).createElement(z,{hue:v.h,onChange:d}),e(i).createElement(Z,{hsva:v,onChange:d,className:"react-colorful__last-control"}))},K={defaultColor:{h:0,s:0,l:0,a:1},toHsva:w,fromHsva:A,equal:F},Q=function(t){return e(i).createElement($,u({},t,{colorModel:K}))},Y={defaultColor:"hsla(0, 0%, 0%, 1)",toHsva:j,fromHsva:S,equal:T},X=function(t){return e(i).createElement($,u({},t,{colorModel:Y}))},ee={defaultColor:{h:0,s:0,l:0},toHsva:function(e){return w({h:e.h,s:e.s,l:e.l,a:1})},fromHsva:function(e){var t;return{h:(t=A(e)).h,s:t.s,l:t.l}},equal:F},te=function(t){return e(i).createElement(q,u({},t,{colorModel:ee}))},re={defaultColor:"hsl(0, 0%, 0%)",toHsva:C,fromHsva:O,equal:T},ne=function(t){return e(i).createElement(q,u({},t,{colorModel:re}))},oe={defaultColor:{h:0,s:0,v:0,a:1},toHsva:function(e){return e},fromHsva:B,equal:F},ae=function(t){return e(i).createElement($,u({},t,{colorModel:oe}))},ce={defaultColor:"hsva(0, 0%, 0%, 1)",toHsva:H,fromHsva:function(e){var t=B(e);return"hsva("+t.h+", "+t.s+"%, "+t.v+"%, "+t.a+")"},equal:T},ie=function(t){return e(i).createElement($,u({},t,{colorModel:ce}))},ue={defaultColor:{h:0,s:0,v:0},toHsva:function(e){return{h:e.h,s:e.s,v:e.v,a:1}},fromHsva:function(e){var t=B(e);return{h:t.h,s:t.s,v:t.v}},equal:F},le=function(t){return e(i).createElement(q,u({},t,{colorModel:ue}))},se={defaultColor:"hsv(0, 0%, 0%)",toHsva:R,fromHsva:function(e){var t=B(e);return"hsv("+t.h+", "+t.s+"%, "+t.v+"%)"},equal:T},fe=function(t){return e(i).createElement(q,u({},t,{colorModel:se}))},ve={defaultColor:{r:0,g:0,b:0,a:1},toHsva:M,fromHsva:E,equal:F},de=function(t){return e(i).createElement($,u({},t,{colorModel:ve}))},pe={defaultColor:"rgba(0, 0, 0, 1)",toHsva:P,fromHsva:function(e){var t=E(e);return"rgba("+t.r+", "+t.g+", "+t.b+", "+t.a+")"},equal:T},be=function(t){return e(i).createElement($,u({},t,{colorModel:pe}))},he={defaultColor:{r:0,g:0,b:0},toHsva:function(e){return M({r:e.r,g:e.g,b:e.b,a:1})},fromHsva:function(e){var t;return{r:(t=E(e)).r,g:t.g,b:t.b}},equal:F},ge=function(t){return e(i).createElement(q,u({},t,{colorModel:he}))},ye={defaultColor:"rgb(0, 0, 0)",toHsva:x,fromHsva:function(e){var t=E(e);return"rgb("+t.r+", "+t.g+", "+t.b+")"},equal:T},me=function(t){return e(i).createElement(q,u({},t,{colorModel:ye}))},_e={};Object.defineProperty(_e,"__esModule",{value:!0}),_e.ReactCSS=_e.loop=_e.handleActive=_e.handleHover=_e.hover=void 0;var ke={};Object.defineProperty(ke,"__esModule",{value:!0}),ke.flattenNames=void 0;var je,Ce,we,Ae={},Oe="object"==typeof t&&t&&t.Object===Object&&t;we=Oe;var Se="object"==typeof self&&self&&self.Object===Object&&self,Ee=we||Se||Function("return this")();je=(Ce=Ee).Symbol;var He={},Re=Object.prototype,Pe=Re.hasOwnProperty,xe=Re.toString,Ne=je?je.toStringTag:void 0;He=function(e){var t=Pe.call(e,Ne),r=e[Ne];try{e[Ne]=void 0;var n=!0}catch(e){}var o=xe.call(e);return n&&(t?e[Ne]=r:delete e[Ne]),o};var Me={},Be=Object.prototype.toString;Me=function(e){return Be.call(e)};var ze=je?je.toStringTag:void 0;Ae=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":ze&&ze in Object(e)?He(e):Me(e)};var Ie={},Fe=Array.isArray;Ie=Fe;var Te={};Te=function(e){return null!=e&&"object"==typeof e};var Ue,Le=uo((function(e){return"string"==typeof e||!Ie(e)&&Te(e)&&"[object String]"==Ae(e)})),De={},We={};var Je=function(e){return function(t,r,n){for(var o=-1,a=Object(t),c=n(t),i=c.length;i--;){var u=c[e?i:++o];if(!1===r(a[u],u,a))break}return t}}();We=Je;var qe={},Ve={},Ge={};Ge=function(e,t){for(var r=-1,n=Array(e);++r-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991};var ct={};ct["[object Float32Array]"]=ct["[object Float64Array]"]=ct["[object Int8Array]"]=ct["[object Int16Array]"]=ct["[object Int32Array]"]=ct["[object Uint8Array]"]=ct["[object Uint8ClampedArray]"]=ct["[object Uint16Array]"]=ct["[object Uint32Array]"]=!0,ct["[object Arguments]"]=ct["[object Array]"]=ct["[object ArrayBuffer]"]=ct["[object Boolean]"]=ct["[object DataView]"]=ct["[object Date]"]=ct["[object Error]"]=ct["[object Function]"]=ct["[object Map]"]=ct["[object Number]"]=ct["[object Object]"]=ct["[object RegExp]"]=ct["[object Set]"]=ct["[object String]"]=ct["[object WeakMap]"]=!1,nt=function(e){return Te(e)&&at(e.length)&&!!ct[Ae(e)]};var it={};it=function(e){return function(t){return e(t)}},o.register("RNMn2",(function(e,t){var r="object"==typeof t&&t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&we.process,a=function(){try{var e=n&&n.require&&n.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=a}));var ut=(ra=o("RNMn2"))&&ra.isTypedArray,lt=ut?it(ut):nt;ot=lt;var st=Object.prototype.hasOwnProperty;Ve=function(e,t){var r=Ie(e),n=!r&&Ze(e),o=!r&&!n&&et(e),a=!r&&!n&&!o&&ot(e),c=r||n||o||a,i=c?Ge(e.length,String):[],u=i.length;for(var l in e)!t&&!st.call(e,l)||c&&("length"==l||o&&("offset"==l||"parent"==l)||a&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||tt(l,u))||i.push(l);return i};var ft={},vt={},dt=Object.prototype;vt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||dt)};var pt={},bt={};var ht=(bt=function(e,t){return function(r){return e(t(r))}})(Object.keys,Object);pt=ht;var gt=Object.prototype.hasOwnProperty;ft=function(e){if(!vt(e))return pt(e);var t=[];for(var r in Object(e))gt.call(e,r)&&"constructor"!=r&&t.push(r);return t};var yt={},mt={},_t={};_t=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};mt=function(e){if(!_t(e))return!1;var t=Ae(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},yt=function(e){return null!=e&&at(e.length)&&!mt(e)},qe=function(e){return yt(e)?Ve(e):ft(e)},De=function(e,t){return e&&We(e,t,qe)};var kt,jt={};kt=function(e){return e},jt=function(e){return"function"==typeof e?e:kt};var Ct=uo(Ue=function(e,t){return e&&De(e,jt(t))}),wt={},At=bt(Object.getPrototypeOf,Object);wt=At;var Ot=Function.prototype,St=Object.prototype,Et=Ot.toString,Ht=St.hasOwnProperty,Rt=Et.call(Object);var Pt=uo((function(e){if(!Te(e)||"[object Object]"!=Ae(e))return!1;var t=wt(e);if(null===t)return!0;var r=Ht.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Et.call(r)==Rt})),xt={};xt=function(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++r-1};var qt;function Vt(e){var t=-1,r=null==e?0:e.length;for(this.clear();++ti))return!1;var l=a.get(e),s=a.get(t);if(l&&s)return l==t&&s==e;var f=-1,v=!0,d=2&r?new Lr:void 0;for(a.set(e,t),a.set(t,e);++f0&&void 0!==arguments[0]?arguments[0]:[],r=[];return io.default(t,(function(t){Array.isArray(t)?e(t).map((function(e){return r.push(e)})):Pt.default(t)?Ct.default(t,(function(e,t){!0===e&&r.push(t),r.push(t+"-"+e)})):Le.default(t)&&r.push(t)})),r};ke.default=lo;var so=Ta(ke),fo={};Object.defineProperty(fo,"__esModule",{value:!0}),fo.mergeClasses=void 0;var vo=fa(Ue),po={},bo={};bo=function(e,t){for(var r=-1,n=null==e?0:e.length;++r1&&void 0!==arguments[1]?arguments[1]:[],r=e.default&&la.default(e.default)||{};return t.map((function(t){var n=e[t];return n&&vo.default(n,(function(e,t){r[t]||(r[t]={}),r[t]=sa({},r[t],n[t])})),t})),r};fo.default=va;var da=Ta(fo),pa={};Object.defineProperty(pa,"__esModule",{value:!0}),pa.autoprefix=void 0;var ba,ha=(ba=Ue)&&ba.__esModule?ba:{default:ba},ga=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"span";return function(r){function n(){var r,o,a;wa(this,n);for(var c=arguments.length,i=Array(c),u=0;u1&&void 0!==arguments[1]?arguments[1]:"span";return function(r){function n(){var r,o,a;xa(this,n);for(var c=arguments.length,i=Array(c),u=0;u1&&void 0!==arguments[1])||arguments[1];r[e]=t};return 0===e&&n("first-child"),e===t-1&&n("last-child"),(0===e||e%2==0)&&n("even"),1===Math.abs(e%2)&&n("odd"),n("nth-child",e),r};var Fa=Ta(Ia);function Ta(e){return e&&e.__esModule?e:{default:e}}_e.hover=Ea.default,_e.handleHover=Ea.default,_e.handleActive=za.default,_e.loop=Fa.default;var Ua=_e.ReactCSS=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n0:"number"==typeof e},qa=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=Math.pow(10,t)),Math.round(r*e)/r+0},Va=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=1),e>r?r:e>t?e:t},Ga=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},Za=function(e){return{r:Va(e.r,0,255),g:Va(e.g,0,255),b:Va(e.b,0,255),a:Va(e.a)}},$a=function(e){return{r:qa(e.r),g:qa(e.g),b:qa(e.b),a:qa(e.a,3)}},Ka=/^#([0-9a-f]{3,8})$/i,Qa=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},Ya=function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=Math.max(t,r,n),c=a-Math.min(t,r,n),i=c?a===t?(r-n)/c:a===r?2+(n-t)/c:4+(t-r)/c:0;return{h:60*(i<0?i+6:i),s:a?c/a*100:0,v:a/255*100,a:o}},Xa=function(e){var t=e.h,r=e.s,n=e.v,o=e.a;t=t/360*6,r/=100,n/=100;var a=Math.floor(t),c=n*(1-r),i=n*(1-(t-a)*r),u=n*(1-(1-t+a)*r),l=a%6;return{r:255*[n,i,c,c,u,n][l],g:255*[u,n,n,i,c,c][l],b:255*[c,c,u,n,n,i][l],a:o}},ec=function(e){return{h:Ga(e.h),s:Va(e.s,0,100),l:Va(e.l,0,100),a:Va(e.a)}},tc=function(e){return{h:qa(e.h),s:qa(e.s),l:qa(e.l),a:qa(e.a,3)}},rc=function(e){var t,r,n;return Xa((r=(t=e).s,{h:t.h,s:(r*=((n=t.l)<50?n:100-n)/100)>0?2*r/(n+r)*100:0,v:n+r,a:t.a}))},nc=function(e){var t,r,n,o;return{h:(t=Ya(e)).h,s:(o=(200-(r=t.s))*(n=t.v)/100)>0&&o<200?r*n/100/(o<=100?o:200-o)*100:0,l:o/2,a:t.a}},oc=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ac=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,cc=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ic=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,uc={string:[[function(e){var t=Ka.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?qa(parseInt(e[3]+e[3],16)/255,2):1}:6===e.length||8===e.length?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:8===e.length?qa(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var t=cc.exec(e)||ic.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:Za({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=oc.exec(e)||ac.exec(e);if(!t)return null;var r,n,o=ec({h:(r=t[1],n=t[2],void 0===n&&(n="deg"),Number(r)*(Wa[n]||1)),s:Number(t[3]),l:Number(t[4]),a:void 0===t[5]?1:Number(t[5])/(t[6]?100:1)});return rc(o)},"hsl"]],object:[[function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=void 0===o?1:o;return Ja(t)&&Ja(r)&&Ja(n)?Za({r:Number(t),g:Number(r),b:Number(n),a:Number(a)}):null},"rgb"],[function(e){var t=e.h,r=e.s,n=e.l,o=e.a,a=void 0===o?1:o;if(!Ja(t)||!Ja(r)||!Ja(n))return null;var c=ec({h:Number(t),s:Number(r),l:Number(n),a:Number(a)});return rc(c)},"hsl"],[function(e){var t=e.h,r=e.s,n=e.v,o=e.a,a=void 0===o?1:o;if(!Ja(t)||!Ja(r)||!Ja(n))return null;var c,i=(c={h:Number(t),s:Number(r),v:Number(n),a:Number(a)},{h:Ga(c.h),s:Va(c.s,0,100),v:Va(c.v,0,100),a:Va(c.a)});return Xa(i)},"hsv"]]},lc=function(e,t){for(var r=0;r=.5},e.prototype.toHex=function(){var e,t,r,n,o,a;return t=(e=$a(this.rgba)).r,r=e.g,n=e.b,a=(o=e.a)<1?Qa(qa(255*o)):"","#"+Qa(t)+Qa(r)+Qa(n)+a},e.prototype.toRgb=function(){return $a(this.rgba)},e.prototype.toRgbString=function(){var e,t,r,n,o;return t=(e=$a(this.rgba)).r,r=e.g,n=e.b,(o=e.a)<1?"rgba("+t+", "+r+", "+n+", "+o+")":"rgb("+t+", "+r+", "+n+")"},e.prototype.toHsl=function(){return tc(nc(this.rgba))},e.prototype.toHslString=function(){var e,t,r,n,o;return t=(e=tc(nc(this.rgba))).h,r=e.s,n=e.l,(o=e.a)<1?"hsla("+t+", "+r+"%, "+n+"%, "+o+")":"hsl("+t+", "+r+"%, "+n+"%)"},e.prototype.toHsv=function(){var e;return e=Ya(this.rgba),{h:qa(e.h),s:qa(e.s),v:qa(e.v),a:qa(e.a,3)}},e.prototype.invert=function(){var e;return bc({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a})},e.prototype.saturate=function(e){return void 0===e&&(e=.1),bc(fc(this.rgba,e))},e.prototype.desaturate=function(e){return void 0===e&&(e=.1),bc(fc(this.rgba,-e))},e.prototype.grayscale=function(){return bc(fc(this.rgba,-1))},e.prototype.lighten=function(e){return void 0===e&&(e=.1),bc(dc(this.rgba,e))},e.prototype.darken=function(e){return void 0===e&&(e=.1),bc(dc(this.rgba,-e))},e.prototype.rotate=function(e){return void 0===e&&(e=15),this.hue(this.hue()+e)},e.prototype.alpha=function(e){var t;return"number"==typeof e?bc({r:(t=this.rgba).r,g:t.g,b:t.b,a:e}):qa(this.rgba.a,3)},e.prototype.hue=function(e){var t=nc(this.rgba);return"number"==typeof e?bc({h:e,s:t.s,l:t.l,a:t.a}):qa(t.h)},e.prototype.isEqual=function(e){return this.toHex()===bc(e).toHex()},e}(),bc=function(e){return e instanceof pc?e:new pc(e)},hc=function(e,t){var r;switch(t){case"HexColorPicker":r=bc(e).toHex();break;case"RgbColorPicker":delete(r=bc(e).toRgb()).a;break;case"RgbStringColorPicker":r=bc(e).toRgbString();break;case"RgbaColorPicker":r=bc(e).toRgb();break;case"RgbaStringColorPicker":(r=bc(e).toRgbString()).includes("rgb")&&!r.includes("rgba")&&(r=(r=r.replace("rgb","rgba")).replace(")",", 1)"));break;case"HslColorPicker":delete(r=bc(e).toHsl()).a;break;case"HslStringColorPicker":r=bc(e).toHslString();break;case"HslaColorPicker":r=bc(e).toHsl();break;case"HslaStringColorPicker":(r=bc(e).toHslString()).includes("hsl")&&!r.includes("hsla")&&(r=(r=r.replace("hsl","hsla")).replace(")",", 1)"));break;case"HsvColorPicker":delete(r=bc(e).toHsv()).a;break;case"HsvStringColorPicker":var n=bc(e).toHsv();r="hsv("+n.h+", "+n.s+"%, "+n.v+"%)";break;case"HsvaColorPicker":r=bc(e).toHsv();break;case"HsvaStringColorPicker":var o=bc(e).toHsv();r="hsva("+o.h+", "+o.s+"%, "+o.v+"%, "+o.a+")";break;default:r=bc(e).toHex()}return r},gc=function(e,t,r){var n,o,a;switch(t){case"HexColorPicker":a="string"==typeof e&&e.includes("#")?e:bc(e).toHex();break;case"RgbColorPicker":delete(a=bc(e).toRgb()).a;break;case"RgbStringColorPicker":a="string"==typeof e&&e.includes("rgb(")?e:bc(e).toRgbString();break;case"RgbaColorPicker":a=bc(e).toRgb();break;case"RgbaStringColorPicker":bc(e).toRgb().a<1?a="string"==typeof e&&e.includes("rgba")?e:bc(e).toRgbString():r?(a=bc(e).toRgbString()).includes("rgb")&&!a.includes("rgba")&&(a=(a=a.replace("rgb","rgba")).replace(")",", 1)")):a="string"==typeof e&&e.includes("#")?e:bc(e).toHex();break;case"HslColorPicker":delete(a=bc(e).toHsl()).a;break;case"HslStringColorPicker":a="string"==typeof e&&e.includes("hsl(")?e:bc(e).toHslString();break;case"HslaColorPicker":a=bc(e).toHsl();break;case"HslaStringColorPicker":(a=bc(e).toHslString()).includes("hsl")&&!a.includes("hsla")&&(a=(a=a.replace("hsl","hsla")).replace(")",", 1)"));break;case"HsvColorPicker":delete(a=bc(e).toHsv()).a;break;case"HsvStringColorPicker":a="hsv("+(n=bc(e).toHsv()).h+", "+n.s+"%, "+n.v+"%)";break;case"HsvaColorPicker":a=bc(e).toHsv();break;case"HsvaStringColorPicker":a="hsva("+(o=bc(e).toHsv()).h+", "+o.s+"%, "+o.v+"%, "+o.a+")";break;default:a="string"==typeof e&&e.includes("#")?e:bc(e).toHex()}return a},yc=function(e,t,r){var n,o,a;switch(t){case"HexColorPicker":a="string"==typeof e&&e.includes("#")?e:bc(e).toHex();break;case"RgbColorPicker":a="string"==typeof e&&e.includes("rgb(")?e:bc(e).toRgbString();break;case"RgbStringColorPicker":a="string"==typeof e&&e.includes("rgba")?e:bc(e).toRgbString();break;case"RgbaColorPicker":bc(e).toRgb().a<1?a="string"==typeof e&&e.includes("rgba")?e:bc(e).toRgbString():(a=bc(e).toRgbString()).includes("rgb")&&!a.includes("rgba")&&(a=(a=a.replace("rgb","rgba")).replace(")",", 1)"));break;case"RgbaStringColorPicker":1!=bc(e).toRgb().a||r?(a=bc(e).toRgbString()).includes("rgb")&&!a.includes("rgba")&&(a=(a=a.replace("rgb","rgba")).replace(")",", 1)")):a="string"==typeof e&&e.includes("#")?e:bc(e).toHex();break;case"HslColorPicker":case"HslStringColorPicker":a="string"==typeof e&&e.includes("hsl(")?e:bc(e).toHslString();break;case"HslaColorPicker":case"HslaStringColorPicker":(a=bc(e).toHslString()).includes("hsl")&&!a.includes("hsla")&&(a=(a=a.replace("hsl","hsla")).replace(")",", 1)"));break;case"HsvColorPicker":case"HsvStringColorPicker":a="hsv("+(n=bc(e).toHsv()).h+", "+n.s+"%, "+n.v+"%)";break;case"HsvaColorPicker":case"HsvaStringColorPicker":a="hsva("+(o=bc(e).toHsv()).h+", "+o.s+"%, "+o.v+"%, "+o.a+")";break;default:a=bc(e).toHex()}return a},mc=function(e,t,r){i.useEffect((function(){var n=!1,o=!1,a=function(a){n&&!o&&t.current&&!t.current.contains(a.target)&&e.current&&!e.current.contains(a.target)&&r()},c=function(r){n=t.current&&e.current,o=t.current&&t.current.contains(r.target)||e.current&&e.current.contains(r.target)};return document.addEventListener("mousedown",c),document.addEventListener("touchstart",c),document.addEventListener("click",a),function(){document.removeEventListener("mousedown",c),document.removeEventListener("touchstart",c),document.removeEventListener("click",a)}}),[t,e,r])},_c=function(e,t){i.useEffect((function(){var r=function(r){e.current&&(e.current.contains(r.target)||t())};return document.addEventListener("focus",r,!0),function(){document.removeEventListener("focus",r,!0)}}),[e,t])},kc=function(e){i.useEffect((function(){var t=function(t){e()};return window.addEventListener("resize",t,!0),function(){window.removeEventListener("resize",t,!0)}}),[e])},jc=function(t){var r=t.color,n=void 0===r?"":r,o=c(i.useState((function(){return n}))),a=o[0],u=o[1];i.useEffect((function(){u(n)}),[n]);var l=e(_e)({default:{triggerButton:{backgroundImage:["RgbaColorPicker","RgbaStringColorPicker","HslaColorPicker","HslaStringColorPicker","HsvaColorPicker","HsvaStringColorPicker"].includes(t.pickerComponent)?'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==")':"none"},colorPreview:{backgroundColor:a||"transparent"}}});return React.createElement("div",{className:"kirki-trigger-circle-wrapper"},React.createElement("button",{type:"button",className:"kirki-trigger-circle",onClick:t.togglePickerHandler,style:l.triggerButton},React.createElement("div",{className:"kirki-color-preview",style:l.colorPreview})))},Cc=function(e){var t=e.control,r=e.customizerSetting,n=e.useHueMode,o=e.pickerComponent,a=e.choices,u=function(){return n?0:"#000000"},l=function(e){return(e=(e=e||u())<0?0:e)>360?360:e},s=function(e){return""===e?"":n?l(e):yc(e,o,a.formComponent).replace(";","")},f=function(e){return e=e||u(),n?{h:e,s:100,l:50}:hc(e,o)},v=c(i.useState((function(){return s(e.value)}))),d=v[0],p=v[1],b=c(i.useState((function(){return f(e.value)}))),h=b[0],g=b[1],y=d,m=h;t.updateComponentState=function(e){var t=s(e);("string"==typeof t||n?t!==d:JSON.stringify(t)!==JSON.stringify(y))&&p(t);var r=f(e);("string"==typeof r||n?r!==h:JSON.stringify(r)!==JSON.stringify(m))&&g(r)};var _=function(e){n?(e=e.h||0===e.h?e.h:e,e=l(e)):e=function(e){return""===e?"":gc(e,o,a.formComponent)}(e),r.set(e)},k=""!==e.default&&void 0!==e.default?e.default:e.value,j=React.createElement("span",{className:"customize-control-title",dangerouslySetInnerHTML:{__html:e.label}}),C=React.createElement("span",{className:"description customize-control-description",dangerouslySetInnerHTML:{__html:e.description}});j=React.createElement("label",{className:"kirki-control-label"},e.label?j:"",e.description?C:""),j=e.label||e.description?j:"";var w,A=i.useRef(null),O=i.useRef(null),S=i.useRef(null),E=c(i.useState(!1)),H=E[0],R=E[1],P="default"!==a.labelStyle,x=c(i.useState({})),N=x[0],M=x[1],B=function(){var e={};if(!P)return e;var r=window.getComputedStyle(t.container[0].parentNode).paddingLeft;r=2*parseInt(r,10),e.width=t.container[0].parentNode.getBoundingClientRect().width-r;var n=-1*(t.container[0].offsetLeft-9);return e.left=n+"px",e},z=function(){4===d.length&&d.includes("#")&&p(bc(d).toHex())},I=function(){H||(M(B()),z(),R(!0))},F=function(){H&&(R(!1),setTimeout(z,200))};switch(o){case"HexColorPicker":w=G;break;case"RgbColorPicker":w=ge;break;case"RgbStringColorPicker":w=me;break;case"RgbaColorPicker":w=de;break;case"RgbaStringColorPicker":w=be;break;case"HueColorPicker":case"HslColorPicker":w=te;break;case"HslStringColorPicker":w=ne;break;case"HslaColorPicker":w=Q;break;case"HslaStringColorPicker":w=X;break;case"HsvColorPicker":w=le;break;case"HsvStringColorPicker":w=fe;break;case"HsvaColorPicker":w=ae;break;case"HsvaStringColorPicker":w=ie;break;default:w=G}if(kc((function(){M(B())})),_c(A,F),mc(O,S,F),jQuery.wp&&jQuery.wp.wpColorPicker){var T=jQuery.wp.wpColorPicker.prototype.options.palettes;if(Array.isArray(T)){if(T.length<8)for(var U=T.length;U<=8;U++)T.push(a.swatches[U]);a.swatches=T}}var L=React.createElement(React.Fragment,null,j,React.createElement("div",{className:"customize-control-notifications-container",ref:e.setNotificationContainer})),D=n?"kirki-control-form use-hue-mode":"kirki-control-form";D+=" has-"+a.labelStyle+"-label-style";var W=H?o+" colorPickerContainer is-open":o+" colorPickerContainer",J=React.createElement(React.Fragment,null,React.createElement("button",{type:"button",ref:S,className:"kirki-control-reset",onClick:function(){k||(y="",m=""),_(k)},style:{display:H?"flex":"none"}},React.createElement("i",{className:"dashicons dashicons-image-rotate"})),React.createElement(jc,{pickerComponent:o,useHueMode:n,color:n?bc({h:d,s:100,l:50}).toHex():d,isPickerOpen:H,togglePickerHandler:function(){H?F():I()}})),q=void 0;switch(a.labelStyle){case"tooltip":q=React.createElement(React.Fragment,null,J,!H&&React.createElement("div",{className:"kirki-label-tooltip"},L));break;case"top":q=React.createElement(React.Fragment,null,L,J);break;default:q=React.createElement(React.Fragment,null,React.createElement("div",{className:"kirki-control-cols"},React.createElement("div",{className:"kirki-control-left-col"},L),React.createElement("div",{className:"kirki-control-right-col"},J)))}return React.createElement(React.Fragment,null,React.createElement("div",{className:D,ref:A,tabIndex:"1"},q,React.createElement("div",{ref:O,className:W,style:N},!n&&React.createElement(Da,{colors:a.swatches,onClick:function(e){_(e)}}),React.createElement(w,{color:h,onChange:function(t){e.onChange&&e.onChange(t),m=t,_(t)}}),React.createElement(La,{pickerComponent:o,useHueMode:n,color:d,onChange:function(e){y=e,_(e)}}))))};function wc(){return(wc=Object.assign||function(e){for(var t=1;t(handler?: (value: T) => void): (value: T) => void {\n const callbackRef = useRef(handler);\n const fn = useRef((value: T) => {\n callbackRef.current && callbackRef.current(value);\n });\n callbackRef.current = handler;\n\n return fn.current;\n}\n","module.exports=React;","// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport const clamp = (number: number, min = 0, max = 1): number => {\n return number > max ? max : number < min ? min : number;\n};\n","import React, { useRef, useMemo, useEffect } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { clamp } from \"../../utils/clamp\";\nexport interface Interaction {\n left: number;\n top: number;\n}\n\n// Check if an event was triggered by touch\nconst isTouch = (event: MouseEvent | TouchEvent): event is TouchEvent => \"touches\" in event;\n\n// Returns a relative position of the pointer inside the node's bounding box\nconst getRelativePosition = (node: HTMLDivElement, event: MouseEvent | TouchEvent): Interaction => {\n const rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n const pointer = isTouch(event) ? event.touches[0] : (event as MouseEvent);\n\n return {\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\n };\n};\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nconst preventDefaultMove = (event: MouseEvent | TouchEvent): void => {\n !isTouch(event) && event.preventDefault();\n};\n\n// Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n// If we detected a touch interaction before, we prefer reacting to touch events only.\nconst isInvalid = (event: MouseEvent | TouchEvent, hasTouch: boolean): boolean => {\n return hasTouch && !isTouch(event);\n};\n\ninterface Props {\n onMove: (interaction: Interaction) => void;\n onKey: (offset: Interaction) => void;\n children: React.ReactNode;\n}\n\nconst InteractiveBase = ({ onMove, onKey, ...rest }: Props) => {\n const container = useRef(null);\n const onMoveCallback = useEventCallback(onMove);\n const onKeyCallback = useEventCallback(onKey);\n const hasTouch = useRef(false);\n\n const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = useMemo(() => {\n const handleMoveStart = ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\n const el = container.current;\n if (!el) return;\n\n // Prevent text selection\n preventDefaultMove(nativeEvent);\n\n if (isInvalid(nativeEvent, hasTouch.current) || !el) return;\n hasTouch.current = isTouch(nativeEvent);\n\n // The node/ref must actually exist when user start an interaction.\n // We won't suppress the ESLint warning though, as it should probably be something to be aware of.\n el.focus();\n onMoveCallback(getRelativePosition(el, nativeEvent));\n toggleDocumentEvents(true);\n };\n\n const handleMove = (event: MouseEvent | TouchEvent) => {\n // Prevent text selection\n preventDefaultMove(event);\n\n // If user moves the pointer outside of the window or iframe bounds and release it there,\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\n // without pressing it down\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n\n if (isDown && container.current) {\n onMoveCallback(getRelativePosition(container.current, event));\n } else {\n toggleDocumentEvents(false);\n }\n };\n\n const handleMoveEnd = () => toggleDocumentEvents(false);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const keyCode = event.which || event.keyCode;\n\n // Ignore all keys except arrow ones\n if (keyCode < 37 || keyCode > 40) return;\n // Do not scroll page by arrow keys when document is focused on the element\n event.preventDefault();\n // Send relative offset to the parent component.\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\n // to reduce the size of the library\n onKeyCallback({\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\n });\n };\n\n function toggleDocumentEvents(state?: boolean) {\n const touch = hasTouch.current;\n // add or remove additional pointer event listeners\n const toggleEvent = state ? self.addEventListener : self.removeEventListener;\n toggleEvent(touch ? \"touchmove\" : \"mousemove\", handleMove);\n toggleEvent(touch ? \"touchend\" : \"mouseup\", handleMoveEnd);\n }\n\n return [handleMoveStart, handleKeyDown, toggleDocumentEvents];\n }, [onKeyCallback, onMoveCallback]);\n\n // Remove window event listeners before unmounting\n useEffect(() => toggleDocumentEvents, [toggleDocumentEvents]);\n\n return (\n \n );\n};\n\nexport const Interactive = React.memo(InteractiveBase);\n","export const formatClassName = (names: unknown[]): string => names.filter(Boolean).join(\" \");\n","import React from \"react\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props {\n className?: string;\n top?: number;\n left: number;\n color: string;\n}\n\nexport const Pointer = ({ className, color, left, top = 0.5 }: Props): JSX.Element => {\n const nodeClassName = formatClassName([\"react-colorful__pointer\", className]);\n\n const style = {\n top: `${top * 100}%`,\n left: `${left * 100}%`,\n };\n\n return (\n
\n
\n
\n );\n};\n","export const round = (number: number, digits = 0, base = Math.pow(10, digits)): number => {\n return Math.round(base * number) / base;\n};\n","import { round } from \"./round\";\nimport { RgbaColor, RgbColor, HslaColor, HslColor, HsvaColor, HsvColor } from \"../types\";\n\n/**\n * Valid CSS units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nconst angleUnits: Record = {\n grad: 360 / 400,\n turn: 360,\n rad: 360 / (Math.PI * 2),\n};\n\nexport const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex));\n\nexport const hexToRgba = (hex: string): RgbaColor => {\n if (hex[0] === \"#\") hex = hex.substr(1);\n\n if (hex.length < 6) {\n return {\n r: parseInt(hex[0] + hex[0], 16),\n g: parseInt(hex[1] + hex[1], 16),\n b: parseInt(hex[2] + hex[2], 16),\n a: 1,\n };\n }\n\n return {\n r: parseInt(hex.substr(0, 2), 16),\n g: parseInt(hex.substr(2, 2), 16),\n b: parseInt(hex.substr(4, 2), 16),\n a: 1,\n };\n};\n\nexport const parseHue = (value: string, unit = \"deg\"): number => {\n return Number(value) * (angleUnits[unit] || 1);\n};\n\nexport const hslaStringToHsva = (hslString: string): HsvaColor => {\n const matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hslString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hslStringToHsva = hslaStringToHsva;\n\nexport const hslaToHsva = ({ h, s, l, a }: HslaColor): HsvaColor => {\n s *= (l < 50 ? l : 100 - l) / 100;\n\n return {\n h: h,\n s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,\n v: l + s,\n a,\n };\n};\n\nexport const hsvaToHex = (hsva: HsvaColor): string => rgbaToHex(hsvaToRgba(hsva));\n\nexport const hsvaToHsla = ({ h, s, v, a }: HsvaColor): HslaColor => {\n const hh = ((200 - s) * v) / 100;\n\n return {\n h: round(h),\n s: round(hh > 0 && hh < 200 ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100 : 0),\n l: round(hh / 2),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToHslString = (hsva: HsvaColor): string => {\n const { h, s, l } = hsvaToHsla(hsva);\n return `hsl(${h}, ${s}%, ${l}%)`;\n};\n\nexport const hsvaToHsvString = (hsva: HsvaColor): string => {\n const { h, s, v } = roundHsva(hsva);\n return `hsv(${h}, ${s}%, ${v}%)`;\n};\n\nexport const hsvaToHsvaString = (hsva: HsvaColor): string => {\n const { h, s, v, a } = roundHsva(hsva);\n return `hsva(${h}, ${s}%, ${v}%, ${a})`;\n};\n\nexport const hsvaToHslaString = (hsva: HsvaColor): string => {\n const { h, s, l, a } = hsvaToHsla(hsva);\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n};\n\nexport const hsvaToRgba = ({ h, s, v, a }: HsvaColor): RgbaColor => {\n h = (h / 360) * 6;\n s = s / 100;\n v = v / 100;\n\n const hh = Math.floor(h),\n b = v * (1 - s),\n c = v * (1 - (h - hh) * s),\n d = v * (1 - (1 - h + hh) * s),\n module = hh % 6;\n\n return {\n r: round([v, c, b, b, d, v][module] * 255),\n g: round([d, v, v, c, b, b][module] * 255),\n b: round([b, b, d, v, v, c][module] * 255),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToRgbString = (hsva: HsvaColor): string => {\n const { r, g, b } = hsvaToRgba(hsva);\n return `rgb(${r}, ${g}, ${b})`;\n};\n\nexport const hsvaToRgbaString = (hsva: HsvaColor): string => {\n const { r, g, b, a } = hsvaToRgba(hsva);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n\nexport const hsvaStringToHsva = (hsvString: string): HsvaColor => {\n const matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hsvString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return roundHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hsvStringToHsva = hsvaStringToHsva;\n\nexport const rgbaStringToHsva = (rgbaString: string): HsvaColor => {\n const matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(rgbaString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? 100 / 255 : 1),\n g: Number(match[3]) / (match[4] ? 100 / 255 : 1),\n b: Number(match[5]) / (match[6] ? 100 / 255 : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1),\n });\n};\n\nexport const rgbStringToHsva = rgbaStringToHsva;\n\nconst format = (number: number) => {\n const hex = number.toString(16);\n return hex.length < 2 ? \"0\" + hex : hex;\n};\n\nexport const rgbaToHex = ({ r, g, b }: RgbaColor): string => {\n return \"#\" + format(r) + format(g) + format(b);\n};\n\nexport const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => {\n const max = Math.max(r, g, b);\n const delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n const hh = delta\n ? max === r\n ? (g - b) / delta\n : max === g\n ? 2 + (b - r) / delta\n : 4 + (r - g) / delta\n : 0;\n\n return {\n h: round(60 * (hh < 0 ? hh + 6 : hh)),\n s: round(max ? (delta / max) * 100 : 0),\n v: round((max / 255) * 100),\n a,\n };\n};\n\nexport const roundHsva = (hsva: HsvaColor): HsvaColor => ({\n h: round(hsva.h),\n s: round(hsva.s),\n v: round(hsva.v),\n a: round(hsva.a, 2),\n});\n\nexport const rgbaToRgb = ({ r, g, b }: RgbaColor): RgbColor => ({ r, g, b });\n\nexport const hslaToHsl = ({ h, s, l }: HslaColor): HslColor => ({ h, s, l });\n\nexport const hsvaToHsv = (hsva: HsvaColor): HsvColor => {\n const { h, s, v } = roundHsva(hsva);\n return { h, s, v };\n};\n","import React from \"react\";\n\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\n\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { formatClassName } from \"../../utils/format\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n className?: string;\n hue: number;\n onChange: (newHue: { h: number }) => void;\n}\n\nconst HueBase = ({ className, hue, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({ h: 360 * interaction.left });\n };\n\n const handleKey = (offset: Interaction) => {\n // Hue measured in degrees of the color circle ranging from 0 to 360\n onChange({\n h: clamp(hue + offset.left * 360, 0, 360),\n });\n };\n\n const nodeClassName = formatClassName([\"react-colorful__hue\", className]);\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport const Hue = React.memo(HueBase);\n","import React from \"react\";\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\nimport { HsvaColor } from \"../../types\";\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n hsva: HsvaColor;\n onChange: (newColor: { s: number; v: number }) => void;\n}\n\nconst SaturationBase = ({ hsva, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({\n s: interaction.left * 100,\n v: 100 - interaction.top * 100,\n });\n };\n\n const handleKey = (offset: Interaction) => {\n // Saturation and brightness always fit into [0, 100] range\n onChange({\n s: clamp(hsva.s + offset.left * 100, 0, 100),\n v: clamp(hsva.v - offset.top * 100, 0, 100),\n });\n };\n\n const containerStyle = {\n backgroundColor: hsvaToHslString({ h: hsva.h, s: 100, v: 100, a: 1 }),\n };\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport const Saturation = React.memo(SaturationBase);\n","import { hexToRgba } from \"./convert\";\nimport { ObjectColor } from \"../types\";\n\nexport const equalColorObjects = (first: ObjectColor, second: ObjectColor): boolean => {\n if (first === second) return true;\n\n for (const prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (\n ((first as unknown) as Record)[prop] !==\n ((second as unknown) as Record)[prop]\n )\n return false;\n }\n\n return true;\n};\n\nexport const equalColorString = (first: string, second: string): boolean => {\n return first.replace(/\\s/g, \"\") === second.replace(/\\s/g, \"\");\n};\n\nexport const equalHex = (first: string, second: string): boolean => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { ColorModel, AnyColor, HsvaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { useEventCallback } from \"./useEventCallback\";\n\nexport function useColorManipulation(\n colorModel: ColorModel,\n color: T,\n onChange?: (color: T) => void\n): [HsvaColor, (color: Partial) => void] {\n // Save onChange callback in the ref for avoiding \"useCallback hell\"\n const onChangeCallback = useEventCallback(onChange);\n\n // No matter which color model is used (HEX, RGB(A) or HSL(A)),\n // all internal calculations are based on HSVA model\n const [hsva, updateHsva] = useState(() => colorModel.toHsva(color));\n\n // By using this ref we're able to prevent extra updates\n // and the effects recursion during the color conversion\n const cache = useRef({ color, hsva });\n\n // Update local HSVA-value if `color` property value is changed,\n // but only if that's not the same color that we just sent to the parent\n useEffect(() => {\n if (!colorModel.equal(color, cache.current.color)) {\n const newHsva = colorModel.toHsva(color);\n cache.current = { hsva: newHsva, color };\n updateHsva(newHsva);\n }\n }, [color, colorModel]);\n\n // Trigger `onChange` callback only if an updated color is different from cached one;\n // save the new color to the ref to prevent unnecessary updates\n useEffect(() => {\n let newColor;\n if (\n !equalColorObjects(hsva, cache.current.hsva) &&\n !colorModel.equal((newColor = colorModel.fromHsva(hsva)), cache.current.color)\n ) {\n cache.current = { hsva, color: newColor };\n onChangeCallback(newColor);\n }\n }, [hsva, colorModel, onChangeCallback]);\n\n // Merge the current HSVA color object with updated params.\n // For example, when a child component sends `h` or `s` only\n const handleChange = useCallback((params: Partial) => {\n updateHsva((current) => Object.assign({}, current, params));\n }, []);\n\n return [hsva, handleChange];\n}\n","declare const __webpack_nonce__: string | undefined;\nlet nonce: string | undefined;\n\n/**\n * Returns a nonce hash included by Webpack or the one defined manually by developer.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce\n * https://webpack.js.org/guides/csp/\n */\nexport const getNonce = (): string | undefined => {\n if (nonce) return nonce;\n if (typeof __webpack_nonce__ !== \"undefined\") return __webpack_nonce__;\n return undefined;\n};\n\n/**\n * Signs the style tag with a base64-encoded string (nonce) to conforms to Content Security Policies.\n * This function has to be invoked before any picker is rendered if you aren't using Webpack for CSP.\n */\nexport const setNonce = (hash: string): void => {\n nonce = hash;\n};\n","import { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { getNonce } from \"../utils/nonce\";\n\n// Bundler is configured to load this as a processed minified CSS-string\nimport styles from \"../css/styles.css\";\n\nlet styleElement: HTMLStyleElement | undefined;\n\n/**\n * Injects CSS code into the document's \n */\nexport const useStyleSheet = (): void => {\n useIsomorphicLayoutEffect(() => {\n if (typeof document !== \"undefined\" && !styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.innerHTML = styles;\n\n // Conform to CSP rules by setting `nonce` attribute to the inline styles\n const nonce = getNonce();\n if (nonce) styleElement.setAttribute(\"nonce\", nonce);\n\n document.head.appendChild(styleElement);\n }\n }, []);\n};\n","import { useLayoutEffect, useEffect } from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import React from \"react\";\n\nimport { Hue } from \"./Hue\";\nimport { Saturation } from \"./Saturation\";\n\nimport { ColorModel, ColorPickerBaseProps, AnyColor } from \"../../types\";\nimport { useColorManipulation } from \"../../hooks/useColorManipulation\";\nimport { useStyleSheet } from \"../../hooks/useStyleSheet\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props extends Partial> {\n colorModel: ColorModel;\n}\n\nexport const ColorPicker = ({\n className,\n colorModel,\n color = colorModel.defaultColor,\n onChange,\n ...rest\n}: Props): JSX.Element => {\n useStyleSheet();\n\n const [hsva, updateHsva] = useColorManipulation(colorModel, color, onChange);\n\n const nodeClassName = formatClassName([\"react-colorful\", className]);\n\n return (\n
\n \n \n
\n );\n};\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalHex } from \"../utils/compare\";\nimport { hexToHsva, hsvaToHex } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"000\",\n toHsva: hexToHsva,\n fromHsva: hsvaToHex,\n equal: equalHex,\n};\n\nexport const HexColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\n\nimport { hsvaToHslaString } from \"../../utils/convert\";\nimport { formatClassName } from \"../../utils/format\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\nimport { HsvaColor } from \"../../types\";\n\ninterface Props {\n className?: string;\n hsva: HsvaColor;\n onChange: (newAlpha: { a: number }) => void;\n}\n\nexport const Alpha = ({ className, hsva, onChange }: Props): JSX.Element => {\n const handleMove = (interaction: Interaction) => {\n onChange({ a: interaction.left });\n };\n\n const handleKey = (offset: Interaction) => {\n // Alpha always fit into [0, 1] range\n onChange({ a: clamp(hsva.a + offset.left) });\n };\n\n // We use `Object.assign` instead of the spread operator\n // to prevent adding the polyfill (about 150 bytes gzipped)\n const colorFrom = hsvaToHslaString(Object.assign({}, hsva, { a: 0 }));\n const colorTo = hsvaToHslaString(Object.assign({}, hsva, { a: 1 }));\n\n const gradientStyle = {\n backgroundImage: `linear-gradient(90deg, ${colorFrom}, ${colorTo})`,\n };\n\n const nodeClassName = formatClassName([\"react-colorful__alpha\", className]);\n\n return (\n
\n
\n \n \n \n
\n );\n};\n","import React from \"react\";\n\nimport { Hue } from \"./Hue\";\nimport { Saturation } from \"./Saturation\";\nimport { Alpha } from \"./Alpha\";\n\nimport { ColorModel, ColorPickerBaseProps, AnyColor } from \"../../types\";\nimport { useColorManipulation } from \"../../hooks/useColorManipulation\";\nimport { useStyleSheet } from \"../../hooks/useStyleSheet\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props extends Partial> {\n colorModel: ColorModel;\n}\n\nexport const AlphaColorPicker = ({\n className,\n colorModel,\n color = colorModel.defaultColor,\n onChange,\n ...rest\n}: Props): JSX.Element => {\n useStyleSheet();\n\n const [hsva, updateHsva] = useColorManipulation(colorModel, color, onChange);\n\n const nodeClassName = formatClassName([\"react-colorful\", className]);\n\n return (\n
\n \n \n \n
\n );\n};\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HslaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { hslaToHsva, hsvaToHsla } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: { h: 0, s: 0, l: 0, a: 1 },\n toHsva: hslaToHsva,\n fromHsva: hsvaToHsla,\n equal: equalColorObjects,\n};\n\nexport const HslaColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hslaStringToHsva, hsvaToHslaString } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"hsla(0, 0%, 0%, 1)\",\n toHsva: hslaStringToHsva,\n fromHsva: hsvaToHslaString,\n equal: equalColorString,\n};\n\nexport const HslaStringColorPicker = (\n props: Partial>\n): JSX.Element => ;\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HslColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { hslaToHsva, hsvaToHsla, hslaToHsl } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: { h: 0, s: 0, l: 0 },\n toHsva: ({ h, s, l }) => hslaToHsva({ h, s, l, a: 1 }),\n fromHsva: (hsva) => hslaToHsl(hsvaToHsla(hsva)),\n equal: equalColorObjects,\n};\n\nexport const HslColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hslStringToHsva, hsvaToHslString } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"hsl(0, 0%, 0%)\",\n toHsva: hslStringToHsva,\n fromHsva: hsvaToHslString,\n equal: equalColorString,\n};\n\nexport const HslStringColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HsvaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { roundHsva } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: { h: 0, s: 0, v: 0, a: 1 },\n toHsva: (hsva) => hsva,\n fromHsva: roundHsva,\n equal: equalColorObjects,\n};\n\nexport const HsvaColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hsvaStringToHsva, hsvaToHsvaString } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"hsva(0, 0%, 0%, 1)\",\n toHsva: hsvaStringToHsva,\n fromHsva: hsvaToHsvaString,\n equal: equalColorString,\n};\n\nexport const HsvaStringColorPicker = (\n props: Partial>\n): JSX.Element => ;\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, HsvColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { hsvaToHsv } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: { h: 0, s: 0, v: 0 },\n toHsva: ({ h, s, v }) => ({ h, s, v, a: 1 }),\n fromHsva: hsvaToHsv,\n equal: equalColorObjects,\n};\n\nexport const HsvColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { hsvStringToHsva, hsvaToHsvString } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"hsv(0, 0%, 0%)\",\n toHsva: hsvStringToHsva,\n fromHsva: hsvaToHsvString,\n equal: equalColorString,\n};\n\nexport const HsvStringColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, RgbaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { rgbaToHsva, hsvaToRgba } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: { r: 0, g: 0, b: 0, a: 1 },\n toHsva: rgbaToHsva,\n fromHsva: hsvaToRgba,\n equal: equalColorObjects,\n};\n\nexport const RgbaColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { AlphaColorPicker } from \"./common/AlphaColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { rgbaStringToHsva, hsvaToRgbaString } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"rgba(0, 0, 0, 1)\",\n toHsva: rgbaStringToHsva,\n fromHsva: hsvaToRgbaString,\n equal: equalColorString,\n};\n\nexport const RgbaStringColorPicker = (\n props: Partial>\n): JSX.Element => ;\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps, RgbColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { rgbaToHsva, hsvaToRgba, rgbaToRgb } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: { r: 0, g: 0, b: 0 },\n toHsva: ({ r, g, b }) => rgbaToHsva({ r, g, b, a: 1 }),\n fromHsva: (hsva) => rgbaToRgb(hsvaToRgba(hsva)),\n equal: equalColorObjects,\n};\n\nexport const RgbColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalColorString } from \"../utils/compare\";\nimport { rgbStringToHsva, hsvaToRgbString } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"rgb(0, 0, 0)\",\n toHsva: rgbStringToHsva,\n fromHsva: hsvaToRgbString,\n equal: equalColorString,\n};\n\nexport const RgbStringColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ReactCSS = exports.loop = exports.handleActive = exports.handleHover = exports.hover = undefined;\n\nvar _flattenNames = require('./flattenNames');\n\nvar _flattenNames2 = _interopRequireDefault(_flattenNames);\n\nvar _mergeClasses = require('./mergeClasses');\n\nvar _mergeClasses2 = _interopRequireDefault(_mergeClasses);\n\nvar _autoprefix = require('./autoprefix');\n\nvar _autoprefix2 = _interopRequireDefault(_autoprefix);\n\nvar _hover2 = require('./components/hover');\n\nvar _hover3 = _interopRequireDefault(_hover2);\n\nvar _active = require('./components/active');\n\nvar _active2 = _interopRequireDefault(_active);\n\nvar _loop2 = require('./loop');\n\nvar _loop3 = _interopRequireDefault(_loop2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.hover = _hover3.default;\nexports.handleHover = _hover3.default;\nexports.handleActive = _active2.default;\nexports.loop = _loop3.default;\nvar ReactCSS = exports.ReactCSS = function ReactCSS(classes) {\n for (var _len = arguments.length, activations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n activations[_key - 1] = arguments[_key];\n }\n\n var activeNames = (0, _flattenNames2.default)(activations);\n var merged = (0, _mergeClasses2.default)(classes, activeNames);\n return (0, _autoprefix2.default)(merged);\n};\n\nexports.default = ReactCSS;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.flattenNames = undefined;\n\nvar _isString2 = require('lodash/isString');\n\nvar _isString3 = _interopRequireDefault(_isString2);\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _isPlainObject2 = require('lodash/isPlainObject');\n\nvar _isPlainObject3 = _interopRequireDefault(_isPlainObject2);\n\nvar _map2 = require('lodash/map');\n\nvar _map3 = _interopRequireDefault(_map2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar flattenNames = exports.flattenNames = function flattenNames() {\n var things = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var names = [];\n\n (0, _map3.default)(things, function (thing) {\n if (Array.isArray(thing)) {\n flattenNames(thing).map(function (name) {\n return names.push(name);\n });\n } else if ((0, _isPlainObject3.default)(thing)) {\n (0, _forOwn3.default)(thing, function (value, key) {\n value === true && names.push(key);\n names.push(key + '-' + value);\n });\n } else if ((0, _isString3.default)(thing)) {\n names.push(thing);\n }\n });\n\n return names;\n};\n\nexports.default = flattenNames;","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var baseForOwn = require('./_baseForOwn'),\n castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.mergeClasses = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _cloneDeep2 = require('lodash/cloneDeep');\n\nvar _cloneDeep3 = _interopRequireDefault(_cloneDeep2);\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mergeClasses = exports.mergeClasses = function mergeClasses(classes) {\n var activeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var styles = classes.default && (0, _cloneDeep3.default)(classes.default) || {};\n activeNames.map(function (name) {\n var toMerge = classes[name];\n if (toMerge) {\n (0, _forOwn3.default)(toMerge, function (value, key) {\n if (!styles[key]) {\n styles[key] = {};\n }\n\n styles[key] = _extends({}, styles[key], toMerge[key]);\n });\n }\n\n return name;\n });\n return styles;\n};\n\nexports.default = mergeClasses;","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.autoprefix = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar transforms = {\n borderRadius: function borderRadius(value) {\n return {\n msBorderRadius: value,\n MozBorderRadius: value,\n OBorderRadius: value,\n WebkitBorderRadius: value,\n borderRadius: value\n };\n },\n boxShadow: function boxShadow(value) {\n return {\n msBoxShadow: value,\n MozBoxShadow: value,\n OBoxShadow: value,\n WebkitBoxShadow: value,\n boxShadow: value\n };\n },\n userSelect: function userSelect(value) {\n return {\n WebkitTouchCallout: value,\n KhtmlUserSelect: value,\n MozUserSelect: value,\n msUserSelect: value,\n WebkitUserSelect: value,\n userSelect: value\n };\n },\n\n flex: function flex(value) {\n return {\n WebkitBoxFlex: value,\n MozBoxFlex: value,\n WebkitFlex: value,\n msFlex: value,\n flex: value\n };\n },\n flexBasis: function flexBasis(value) {\n return {\n WebkitFlexBasis: value,\n flexBasis: value\n };\n },\n justifyContent: function justifyContent(value) {\n return {\n WebkitJustifyContent: value,\n justifyContent: value\n };\n },\n\n transition: function transition(value) {\n return {\n msTransition: value,\n MozTransition: value,\n OTransition: value,\n WebkitTransition: value,\n transition: value\n };\n },\n\n transform: function transform(value) {\n return {\n msTransform: value,\n MozTransform: value,\n OTransform: value,\n WebkitTransform: value,\n transform: value\n };\n },\n absolute: function absolute(value) {\n var direction = value && value.split(' ');\n return {\n position: 'absolute',\n top: direction && direction[0],\n right: direction && direction[1],\n bottom: direction && direction[2],\n left: direction && direction[3]\n };\n },\n extend: function extend(name, otherElementStyles) {\n var otherStyle = otherElementStyles[name];\n if (otherStyle) {\n return otherStyle;\n }\n return {\n 'extend': name\n };\n }\n};\n\nvar autoprefix = exports.autoprefix = function autoprefix(elements) {\n var prefixed = {};\n (0, _forOwn3.default)(elements, function (styles, element) {\n var expanded = {};\n (0, _forOwn3.default)(styles, function (value, key) {\n var transform = transforms[key];\n if (transform) {\n expanded = _extends({}, expanded, transform(value));\n } else {\n expanded[key] = value;\n }\n });\n prefixed[element] = expanded;\n });\n return prefixed;\n};\n\nexports.default = autoprefix;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hover = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar hover = exports.hover = function hover(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n return function (_React$Component) {\n _inherits(Hover, _React$Component);\n\n function Hover() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Hover);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Hover.__proto__ || Object.getPrototypeOf(Hover)).call.apply(_ref, [this].concat(args))), _this), _this.state = { hover: false }, _this.handleMouseOver = function () {\n return _this.setState({ hover: true });\n }, _this.handleMouseOut = function () {\n return _this.setState({ hover: false });\n }, _this.render = function () {\n return _react2.default.createElement(\n Span,\n { onMouseOver: _this.handleMouseOver, onMouseOut: _this.handleMouseOut },\n _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return Hover;\n }(_react2.default.Component);\n};\n\nexports.default = hover;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.active = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar active = exports.active = function active(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n return function (_React$Component) {\n _inherits(Active, _React$Component);\n\n function Active() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Active);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Active.__proto__ || Object.getPrototypeOf(Active)).call.apply(_ref, [this].concat(args))), _this), _this.state = { active: false }, _this.handleMouseDown = function () {\n return _this.setState({ active: true });\n }, _this.handleMouseUp = function () {\n return _this.setState({ active: false });\n }, _this.render = function () {\n return _react2.default.createElement(\n Span,\n { onMouseDown: _this.handleMouseDown, onMouseUp: _this.handleMouseUp },\n _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return Active;\n }(_react2.default.Component);\n};\n\nexports.default = active;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar loopable = function loopable(i, length) {\n var props = {};\n var setProp = function setProp(name) {\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n props[name] = value;\n };\n\n i === 0 && setProp('first-child');\n i === length - 1 && setProp('last-child');\n (i === 0 || i % 2 === 0) && setProp('even');\n Math.abs(i % 2) === 1 && setProp('odd');\n setProp('nth-child', i);\n\n return props;\n};\n\nexports.default = loopable;","import { useState, useEffect, useCallback } from \"react\";\nimport reactCSS from \"reactcss\";\n\nconst KirkiReactColorfulInput = (props) => {\n const { onChange, color = \"\" } = props;\n const [value, setValue] = useState(() => color);\n\n const handleChange = useCallback(\n (e) => {\n let val = e.target.value;\n\n if (2 === val.length) {\n if (!val.includes(\"#\") && !val.includes(\"rg\") && !val.includes(\"hs\")) {\n val = \"#\" + val;\n }\n } else if (3 === val.length || 6 === val.length) {\n if (!val.includes(\"#\") && !val.includes(\"rg\") && !val.includes(\"hs\")) {\n val = \"#\" + val;\n }\n }\n\n\t\t\tval = val.toLowerCase();\n\n // Thank you: https://regexr.com/39cgj\n const pattern = new RegExp(\n /(?:#|0x)(?:[a-f0-9]{3}|[a-f0-9]{6}|[a-f0-9]{8})\\b|(?:rgb|hsl)a?\\([^\\)]*\\)/\n );\n\n if (pattern.test(val)) {\n onChange(val); // Run onChange handler passed by `KirkiReactColorfulForm` component.\n }\n\n setValue(val);\n },\n [onChange]\n );\n\n // Update the local state when `color` property value is changed.\n useEffect(() => {\n // We don't need to convert the color since it's already handled in parent component.\n setValue(color);\n }, [color]);\n\n const pickersWithAlpha = [\n \"RgbaColorPicker\",\n \"RgbaStringColorPicker\",\n \"HslaColorPicker\",\n \"HslaStringColorPicker\",\n \"HsvaColorPicker\",\n \"HsvaStringColorPicker\",\n ];\n\n const styles = reactCSS({\n default: {\n colorPreviewWrapper: {\n backgroundImage: pickersWithAlpha.includes(props.pickerComponent)\n ? 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==\")'\n : \"none\",\n },\n colorPreview: {\n backgroundColor: value,\n },\n },\n });\n\n return (\n
\n
\n {!props.useHueMode && (\n \n \n
\n )}\n \n
\n
\n );\n};\n\nexport default KirkiReactColorfulInput;\n","const KirkiReactColorfulSwatches = ({ colors, onClick }) => {\n return (\n
\n {colors.map((clr, index) => {\n\t\t\t\tconst color = clr && clr.color ? clr.color : clr;\n\n return (\n onClick(color)}\n >\n );\n })}\n
\n );\n};\n\nexport default KirkiReactColorfulSwatches;\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","import { colord } from \"colord\";\n\n/**\n * Convert the value for the color picker.\n *\n * @param {string|Object} value The value to be converted.\n * @param {string} pickerComponent The picker component name.\n *\n * @returns {string|Object} The converted value.\n */\nconst convertColorForPicker = (value, pickerComponent) => {\n\tlet convertedValue;\n\n\tswitch (pickerComponent) {\n\t\tcase 'HexColorPicker':\n\t\t\tconvertedValue = colord(value).toHex();\n\t\t\tbreak;\n\n\t\tcase 'RgbColorPicker':\n\t\t\tconvertedValue = colord(value).toRgb();\n\t\t\tdelete convertedValue.a;\n\t\t\tbreak;\n\n\t\tcase 'RgbStringColorPicker':\n\t\t\tconvertedValue = colord(value).toRgbString();\n\t\t\tbreak;\n\n\t\tcase 'RgbaColorPicker':\n\t\t\tconvertedValue = colord(value).toRgb();\n\t\t\tbreak;\n\n\t\tcase 'RgbaStringColorPicker':\n\t\t\tconvertedValue = colord(value).toRgbString();\n\n\t\t\t// Force to set the alpha channel value.\n\t\t\tif (convertedValue.includes('rgb') && !convertedValue.includes('rgba')) {\n\t\t\t\tconvertedValue = convertedValue.replace('rgb', 'rgba');\n\t\t\t\tconvertedValue = convertedValue.replace(')', ', 1)');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'HslColorPicker':\n\t\t\tconvertedValue = colord(value).toHsl();\n\t\t\tdelete convertedValue.a;\n\t\t\tbreak;\n\n\t\tcase 'HslStringColorPicker':\n\t\t\tconvertedValue = colord(value).toHslString();\n\t\t\tbreak;\n\n\t\tcase 'HslaColorPicker':\n\t\t\tconvertedValue = colord(value).toHsl();\n\t\t\tbreak;\n\n\t\tcase 'HslaStringColorPicker':\n\t\t\tconvertedValue = colord(value).toHslString();\n\n\t\t\t// Force to set the alpha channel value.\n\t\t\tif (convertedValue.includes('hsl') && !convertedValue.includes('hsla')) {\n\t\t\t\tconvertedValue = convertedValue.replace('hsl', 'hsla');\n\t\t\t\tconvertedValue = convertedValue.replace(')', ', 1)');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'HsvColorPicker':\n\t\t\tconvertedValue = colord(value).toHsv();\n\t\t\tdelete convertedValue.a;\n\t\t\tbreak;\n\n\t\tcase 'HsvStringColorPicker':\n\t\t\tconst hsv = colord(value).toHsv();\n\t\t\tconvertedValue = 'hsv(' + hsv.h + ', ' + hsv.s + '%, ' + hsv.v + '%)';\n\n\t\t\tbreak;\n\n\t\tcase 'HsvaColorPicker':\n\t\t\tconvertedValue = colord(value).toHsv();\n\t\t\tbreak;\n\n\t\tcase 'HsvaStringColorPicker':\n\t\t\t// colord library doesn't provide .toHsvString() method yet.\n\t\t\tconst hsva = colord(value).toHsv();\n\t\t\tconvertedValue = 'hsva(' + hsva.h + ', ' + hsva.s + '%, ' + hsva.v + '%, ' + hsva.a + ')';\n\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconvertedValue = colord(value).toHex();\n\t\t\tbreak;\n\t}\n\n\treturn convertedValue;\n};\n\nexport default convertColorForPicker;\n","import { colord } from \"colord\";\n\n/**\n * Convert the value for the customizer.\n *\n * @param {string|Object} value The value to be converted.\n * @param {string} pickerComponent The picker component name.\n *\n * @returns {string} The converted value.\n */\nconst convertColorForCustomizer = (value, pickerComponent, formComponent) => {\n\tlet rgba;\n\tlet hsv;\n\tlet hsva;\n\tlet convertedValue;\n\n\tswitch (pickerComponent) {\n\t\t/**\n\t\t * The HexColorPicker is used by these condition:\n\t\t * 1. When formComponent is defined with HexColorPicker as the value.\n\t\t * 2. When formComponent is not defined but the \"alpha\" choice is not set or set to false (the old way).\n\t\t */\n\t\tcase 'HexColorPicker':\n\t\t\tconvertedValue = 'string' === typeof value && value.includes('#') ? value : colord(value).toHex();\n\t\t\tbreak;\n\n\t\tcase 'RgbColorPicker':\n\t\t\tconvertedValue = colord(value).toRgb();\n\t\t\tdelete convertedValue.a;\n\t\t\tbreak;\n\n\t\tcase 'RgbStringColorPicker':\n\t\t\tconvertedValue =\n \"string\" === typeof value && value.includes(\"rgb(\")\n ? value\n : colord(value).toRgbString();\n\t\t\tbreak;\n\n\t\tcase 'RgbaColorPicker':\n\t\t\trgba = colord(value).toRgb();\n\t\t\tconvertedValue = rgba;\n\t\t\tbreak;\n\n\t\t/**\n\t\t * The RgbaStringColorPicker is used by these condition:\n\t\t * 1. When formComponent is defined with RgbaColorPicker as the value.\n\t\t * 2. When formComponent is not defined but the \"alpha\" choice is set to true.\n\t\t */\n\t\tcase 'RgbaStringColorPicker':\n\t\t\trgba = colord(value).toRgb();\n\n\t\t\tif (rgba.a < 1) {\n\t\t\t\tconvertedValue =\n \"string\" === typeof value && value.includes(\"rgba\")\n ? value\n : colord(value).toRgbString();\n\t\t\t} else {\n\t\t\t\t// When it uses the 2nd condition above, then the expected value is \"hex\".\n\t\t\t\tif (!formComponent) {\n\t\t\t\t\tconvertedValue =\n \"string\" === typeof value && value.includes(\"#\")\n ? value\n : colord(value).toHex();\n\t\t\t\t} else {\n\t\t\t\t\tconvertedValue = colord(value).toRgbString();\n\n\t\t\t\t\t// Force to set the alpha channel value.\n\t\t\t\t\tif (convertedValue.includes('rgb') && !convertedValue.includes('rgba')) {\n\t\t\t\t\t\tconvertedValue = convertedValue.replace('rgb', 'rgba');\n\t\t\t\t\t\tconvertedValue = convertedValue.replace(')', ', 1)');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'HslColorPicker':\n\t\t\tconvertedValue = colord(value).toHsl();\n\t\t\tdelete convertedValue.a;\n\t\t\tbreak;\n\n\t\tcase 'HslStringColorPicker':\n\t\t\tconvertedValue =\n \"string\" === typeof value && value.includes(\"hsl(\")\n ? value\n : colord(value).toHslString();\n\t\t\tbreak;\n\n\t\tcase 'HslaColorPicker':\n\t\t\tconvertedValue = colord(value).toHsl();\n\t\t\tbreak;\n\n\t\tcase 'HslaStringColorPicker':\n\t\t\tconvertedValue = colord(value).toHslString();\n\n\t\t\t// Force to set the alpha channel value.\n\t\t\tif (convertedValue.includes('hsl') && !convertedValue.includes('hsla')) {\n\t\t\t\tconvertedValue = convertedValue.replace('hsl', 'hsla');\n\t\t\t\tconvertedValue = convertedValue.replace(')', ', 1)');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'HsvColorPicker':\n\t\t\tconvertedValue = colord(value).toHsv();\n\t\t\tdelete convertedValue.a;\n\t\t\tbreak;\n\n\t\t/**\n\t\t * The colord library doesn't provide .toHsvString() method yet.\n\t\t * This manual value-building will apply to \"HsvStringColorPicker\" and \"HsvaStringColorPicker\" stuff below.\n\t\t */\n\t\tcase 'HsvStringColorPicker':\n\t\t\thsv = colord(value).toHsv();\n\t\t\tconvertedValue = 'hsv(' + hsv.h + ', ' + hsv.s + '%, ' + hsv.v + '%)';\n\t\t\tbreak;\n\n\t\tcase 'HsvaColorPicker':\n\t\t\tconvertedValue = colord(value).toHsv();\n\t\t\tbreak;\n\n\t\tcase 'HsvaStringColorPicker':\n\t\t\thsva = colord(value).toHsv();\n\t\t\tconvertedValue = 'hsva(' + hsva.h + ', ' + hsva.s + '%, ' + hsva.v + '%, ' + hsva.a + ')';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconvertedValue =\n \"string\" === typeof value && value.includes(\"#\")\n ? value\n : colord(value).toHex();\n\t\t\tbreak;\n\t}\n\n\treturn convertedValue;\n};\n\nexport default convertColorForCustomizer;\n","import { colord } from \"colord\";\n\n/**\n * Convert the value for the color input.\n *\n * @param {string|Object} value The value to be converted.\n * @param {string} pickerComponent The picker component name.\n *\n * @returns {string} The converted value.\n */\nconst convertColorForInput = (value, pickerComponent, formComponent) => {\n let rgba;\n let hsv;\n let hsva;\n let convertedValue;\n\n switch (pickerComponent) {\n /**\n * The HexColorPicker is used by these condition:\n * 1. When formComponent is defined with HexColorPicker as the value.\n * 2. When formComponent is not defined but the \"alpha\" choice is not set or set to false (the old way).\n */\n case \"HexColorPicker\":\n convertedValue =\n \"string\" === typeof value && value.includes(\"#\")\n ? value\n : colord(value).toHex();\n break;\n\n case \"RgbColorPicker\":\n convertedValue =\n \"string\" === typeof value && value.includes(\"rgb(\")\n ? value\n : colord(value).toRgbString();\n break;\n\n case \"RgbStringColorPicker\":\n convertedValue =\n \"string\" === typeof value && value.includes(\"rgba\")\n ? value\n : colord(value).toRgbString();\n break;\n\n case \"RgbaColorPicker\":\n rgba = colord(value).toRgb();\n\n if (rgba.a < 1) {\n convertedValue =\n \"string\" === typeof value && value.includes(\"rgba\")\n ? value\n : colord(value).toRgbString();\n } else {\n convertedValue = colord(value).toRgbString();\n\n // Force to set the alpha value.\n if (\n convertedValue.includes(\"rgb\") &&\n !convertedValue.includes(\"rgba\")\n ) {\n convertedValue = convertedValue.replace(\"rgb\", \"rgba\");\n convertedValue = convertedValue.replace(\")\", \", 1)\");\n }\n }\n\n break;\n\n /**\n * The RgbaStringColorPicker is used by these condition:\n * 1. When formComponent is defined with RgbaColorPicker as the value.\n * 2. When formComponent is not defined but the \"alpha\" choice is set to true.\n */\n case \"RgbaStringColorPicker\":\n rgba = colord(value).toRgb();\n\n // When it uses the 2nd condition above, then the expected value is \"hex\".\n if (rgba.a == 1 && !formComponent) {\n convertedValue =\n \"string\" === typeof value && value.includes(\"#\")\n ? value\n : colord(value).toHex();\n } else {\n convertedValue = colord(value).toRgbString();\n\n // Force to set the alpha value.\n if (\n convertedValue.includes(\"rgb\") &&\n !convertedValue.includes(\"rgba\")\n ) {\n convertedValue = convertedValue.replace(\"rgb\", \"rgba\");\n convertedValue = convertedValue.replace(\")\", \", 1)\");\n }\n }\n\n break;\n\n case \"HslColorPicker\":\n convertedValue =\n \"string\" === typeof value && value.includes(\"hsl(\")\n ? value\n : colord(value).toHslString();\n break;\n\n case \"HslStringColorPicker\":\n convertedValue =\n \"string\" === typeof value && value.includes(\"hsl(\")\n ? value\n : colord(value).toHslString();\n break;\n\n case \"HslaColorPicker\":\n convertedValue = colord(value).toHslString();\n\n // Force to set the alpha value.\n if (convertedValue.includes(\"hsl\") && !convertedValue.includes(\"hsla\")) {\n convertedValue = convertedValue.replace(\"hsl\", \"hsla\");\n convertedValue = convertedValue.replace(\")\", \", 1)\");\n }\n\n break;\n\n case \"HslaStringColorPicker\":\n convertedValue = colord(value).toHslString();\n\n // Force to set the alpha value.\n if (convertedValue.includes(\"hsl\") && !convertedValue.includes(\"hsla\")) {\n convertedValue = convertedValue.replace(\"hsl\", \"hsla\");\n convertedValue = convertedValue.replace(\")\", \", 1)\");\n }\n\n break;\n\n /**\n * The colord library doesn't provide .toHsvString() method yet.\n * This manual value-building will apply to \"hsv\" and \"hsva\" stuff below.\n */\n case \"HsvColorPicker\":\n hsv = colord(value).toHsv();\n convertedValue = \"hsv(\" + hsv.h + \", \" + hsv.s + \"%, \" + hsv.v + \"%)\";\n break;\n\n case \"HsvStringColorPicker\":\n hsv = colord(value).toHsv();\n convertedValue = \"hsv(\" + hsv.h + \", \" + hsv.s + \"%, \" + hsv.v + \"%)\";\n break;\n\n case \"HsvaColorPicker\":\n hsva = colord(value).toHsv();\n convertedValue =\n \"hsva(\" +\n hsva.h +\n \", \" +\n hsva.s +\n \"%, \" +\n hsva.v +\n \"%, \" +\n hsva.a +\n \")\";\n break;\n\n case \"HsvaStringColorPicker\":\n hsva = colord(value).toHsv();\n convertedValue =\n \"hsva(\" +\n hsva.h +\n \", \" +\n hsva.s +\n \"%, \" +\n hsva.v +\n \"%, \" +\n hsva.a +\n \")\";\n break;\n\n default:\n convertedValue = colord(value).toHex();\n break;\n }\n\n return convertedValue;\n};\n\nexport default convertColorForInput;\n","import { useEffect } from \"react\";\n\n/**\n * Code was taken and then modified from https://codesandbox.io/s/opmco?file=/src/useClickOutside.js:0-1192\n * It was improved version of https://usehooks.com/useOnClickOutside/\n */\nconst useClickOutside = (pickerRef, resetRef, handler) => {\n useEffect(() => {\n let startedWhenMounted = false;\n let startedInside = false;\n\n const listener = (event) => {\n // Do nothing if `mousedown` or `touchstart` started either inside resetRef or pickerRef element\n if (!startedWhenMounted || startedInside) return;\n\n // Do nothing if clicking resetRef's element or descendent elements\n if (!resetRef.current || resetRef.current.contains(event.target)) return;\n\n // Do nothing if clicking pickerRef's element or descendent elements\n if (!pickerRef.current || pickerRef.current.contains(event.target))\n return;\n\n handler();\n };\n\n const validateEventStart = (event) => {\n startedWhenMounted = resetRef.current && pickerRef.current;\n startedInside =\n (resetRef.current && resetRef.current.contains(event.target)) ||\n (pickerRef.current && pickerRef.current.contains(event.target));\n };\n\n document.addEventListener(\"mousedown\", validateEventStart);\n document.addEventListener(\"touchstart\", validateEventStart);\n document.addEventListener(\"click\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", validateEventStart);\n document.removeEventListener(\"touchstart\", validateEventStart);\n document.removeEventListener(\"click\", listener);\n };\n }, [resetRef, pickerRef, handler]);\n};\n\nexport default useClickOutside;\n","import { useEffect } from \"react\";\n\nconst useFocusOutside = (ref, handler) => {\n\tuseEffect(() => {\n\t\tconst listener = (e) => {\n\t\t\t// Do nothing if the component hasn't been mounted.\n\t\t\tif (!ref.current) return;\n\n\t\t\t// Do nothing if the focused element is inside the ref or the ref it self.\n\t\t\tif (ref.current.contains(e.target)) return;\n\n\t\t\thandler();\n\t\t};\n\n\t\tdocument.addEventListener(\"focus\", listener, true);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"focus\", listener, true);\n\t\t};\n\t}, [ref, handler]);\n};\n\nexport default useFocusOutside;\n","import { useEffect } from \"react\";\n\nconst useWindowResize = (handler) => {\n useEffect(() => {\n const listener = (e) => {\n handler();\n };\n\n window.addEventListener(\"resize\", listener, true);\n\n return () => {\n window.removeEventListener(\"resize\", listener, true);\n };\n }, [handler]);\n};\n\nexport default useWindowResize;\n","import { useState, useEffect } from \"react\";\nimport reactCSS from \"reactcss\";\n\nconst KirkiReactColorfulCircle = (props) => {\n const { color = \"\" } = props;\n const [value, setValue] = useState(() => color);\n\n // Update the local state when `color` property value is changed.\n useEffect(() => {\n // We don't need to convert the color since it's using the customizer value.\n setValue(color);\n }, [color]);\n\n const pickersWithAlpha = [\n \"RgbaColorPicker\",\n \"RgbaStringColorPicker\",\n \"HslaColorPicker\",\n \"HslaStringColorPicker\",\n \"HsvaColorPicker\",\n \"HsvaStringColorPicker\",\n ];\n\n const styles = reactCSS({\n default: {\n triggerButton: {\n backgroundImage: pickersWithAlpha.includes(props.pickerComponent)\n ? 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==\")'\n : \"none\",\n },\n colorPreview: {\n backgroundColor: value ? value : \"transparent\",\n },\n },\n });\n\n return (\n
\n \n
\n \n
\n );\n};\n\nexport default KirkiReactColorfulCircle;\n","import { useState, useRef } from \"react\";\nimport {\n HexColorPicker,\n RgbColorPicker,\n RgbaColorPicker,\n RgbStringColorPicker,\n RgbaStringColorPicker,\n HslColorPicker,\n HslaColorPicker,\n HslStringColorPicker,\n HslaStringColorPicker,\n HsvColorPicker,\n HsvaColorPicker,\n HsvStringColorPicker,\n HsvaStringColorPicker,\n} from \"react-colorful\";\nimport KirkiReactColorfulInput from \"./js/components/KirkiReactColorfulInput\";\nimport KirkiReactColorfulSwatches from \"./js/components/KirkiReactColorfulSwatches\";\nimport convertColorForPicker from \"./js/utils/convertColorForPicker\";\nimport convertColorForCustomizer from \"./js/utils/convertColorForCustomizer\";\nimport convertColorForInput from \"./js/utils/convertColorForInput\";\nimport useClickOutside from \"./js/hooks/useClickOutside\";\nimport useFocusOutside from \"./js/hooks/useFocusOutside\";\nimport useWindowResize from \"./js/hooks/useWindowResize\";\nimport KirkiReactColorfulCircle from \"./js/components/KirkiReactColorfulCIrcle\";\nimport { colord } from \"colord\";\n\n/**\n * The form component of Kirki React Colorful.\n *\n * Globals:\n * _, wp, React, ReactDOM\n *\n * @param {Object} props The props for the component.\n * @returns The component element.\n */\nconst KirkiReactColorfulForm = (props) => {\n const { control, customizerSetting, useHueMode, pickerComponent, choices } =\n props;\n\n const parseEmptyValue = () => (useHueMode ? 0 : \"#000000\");\n\n const parseHueModeValue = (hueValue) => {\n hueValue = hueValue || parseEmptyValue();\n hueValue = hueValue < 0 ? 0 : hueValue;\n\n return hueValue > 360 ? 360 : hueValue;\n };\n\n const parseInputValue = (value) => {\n if (\"\" === value) return \"\";\n\n return useHueMode\n ? parseHueModeValue(value)\n : convertColorForInput(\n value,\n pickerComponent,\n choices.formComponent\n ).replace(\";\", \"\");\n };\n\n const parseCustomizerValue = (value) => {\n if (\"\" === value) return \"\";\n\n return convertColorForCustomizer(\n value,\n pickerComponent,\n choices.formComponent\n );\n };\n\n const parsePickerValue = (value) => {\n value = value || parseEmptyValue();\n\n // Hard coded saturation and lightness when using hue mode.\n return useHueMode\n ? { h: value, s: 100, l: 50 }\n : convertColorForPicker(value, pickerComponent);\n };\n\n const [inputValue, setInputValue] = useState(() => {\n return parseInputValue(props.value);\n });\n\n const [pickerValue, setPickerValue] = useState(() => {\n return parsePickerValue(props.value);\n });\n\n let currentInputValue = inputValue;\n let currentPickerValue = pickerValue;\n\n // This function will be called when this control's customizer value is changed.\n control.updateComponentState = (value) => {\n const valueForInput = parseInputValue(value);\n let changeInputValue = false;\n\n if (typeof valueForInput === \"string\" || useHueMode) {\n changeInputValue = valueForInput !== inputValue;\n } else {\n changeInputValue =\n JSON.stringify(valueForInput) !== JSON.stringify(currentInputValue);\n }\n\n if (changeInputValue) setInputValue(valueForInput);\n\n const valueForPicker = parsePickerValue(value);\n let changePickerValue = false;\n\n if (typeof valueForPicker === \"string\" || useHueMode) {\n changePickerValue = valueForPicker !== pickerValue;\n } else {\n changePickerValue =\n JSON.stringify(valueForPicker) !== JSON.stringify(currentPickerValue);\n }\n\n if (changePickerValue) setPickerValue(valueForPicker);\n };\n\n const saveToCustomizer = (value) => {\n if (useHueMode) {\n /**\n * When using hue mode, the pickerComponent is HslColorPicker.\n * If there is value.h, then value is set from the picker.\n * Otherwise, value is set from the input or the customizer.\n */\n value = value.h || 0 === value.h ? value.h : value;\n value = parseHueModeValue(value);\n } else {\n value = parseCustomizerValue(value);\n }\n\n customizerSetting.set(value);\n };\n\n const initialColor =\n \"\" !== props.default && \"undefined\" !== typeof props.default\n ? props.default\n : props.value;\n\n /**\n * Function to run on picker change.\n *\n * @param {string|Object} color The value returned by the picker. It can be a string or a color object.\n */\n const handlePickerChange = (color) => {\n if (props.onChange) props.onChange(color);\n currentPickerValue = color;\n saveToCustomizer(color);\n };\n\n const handleInputChange = (value) => {\n currentInputValue = value;\n saveToCustomizer(value);\n };\n\n const handleReset = () => {\n if (!initialColor) {\n currentInputValue = \"\";\n currentPickerValue = \"\";\n }\n\n saveToCustomizer(initialColor);\n };\n\n const handleSwatchesClick = (swatchColor) => {\n saveToCustomizer(swatchColor);\n };\n\n const handleWindowResize = () => {\n setPickerContainerStyle(getPickerContainerStyle());\n };\n\n let controlLabel = (\n \n );\n\n let controlDescription = (\n \n );\n\n controlLabel = (\n \n );\n\n controlLabel = props.label || props.description ? controlLabel : \"\";\n\n const formRef = useRef(null); // Reference to the form div.\n const pickerRef = useRef(null); // Reference to the picker popup.\n const resetRef = useRef(null); // Reference to the picker popup.\n\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n\n const usePositionFixed = \"default\" !== choices.labelStyle ? true : false;\n\n const [pickerContainerStyle, setPickerContainerStyle] = useState({});\n\n const getPickerContainerStyle = () => {\n let pickerContainerStyle = {};\n\n if (!usePositionFixed) return pickerContainerStyle;\n\n let padding = window.getComputedStyle(\n control.container[0].parentNode\n ).paddingLeft;\n padding = parseInt(padding, 10) * 2;\n\n pickerContainerStyle.width =\n control.container[0].parentNode.getBoundingClientRect().width - padding;\n\n const controlLeftOffset = (control.container[0].offsetLeft - 9) * -1;\n\n pickerContainerStyle.left = controlLeftOffset + \"px\";\n\n return pickerContainerStyle;\n };\n\n const convertInputValueTo6Digits = () => {\n if (4 === inputValue.length && inputValue.includes(\"#\")) {\n setInputValue(colord(inputValue).toHex());\n }\n };\n\n const togglePicker = () => {\n if (isPickerOpen) {\n closePicker();\n } else {\n openPicker();\n }\n };\n\n const openPicker = () => {\n if (isPickerOpen) return;\n\n setPickerContainerStyle(getPickerContainerStyle());\n convertInputValueTo6Digits();\n setIsPickerOpen(true);\n };\n\n const closePicker = () => {\n if (!isPickerOpen) return;\n\n setIsPickerOpen(false);\n setTimeout(convertInputValueTo6Digits, 200);\n };\n\n let KirkiPickerComponent;\n\n // We can't just render `pickerComponent` directly, we need these lines so that the compiler will import them.\n switch (pickerComponent) {\n case \"HexColorPicker\":\n KirkiPickerComponent = HexColorPicker;\n break;\n case \"RgbColorPicker\":\n KirkiPickerComponent = RgbColorPicker;\n break;\n case \"RgbStringColorPicker\":\n KirkiPickerComponent = RgbStringColorPicker;\n break;\n case \"RgbaColorPicker\":\n KirkiPickerComponent = RgbaColorPicker;\n break;\n case \"RgbaStringColorPicker\":\n KirkiPickerComponent = RgbaStringColorPicker;\n break;\n // We treat HueColorPicker (hue mode) as HslColorPicker.\n case \"HueColorPicker\":\n KirkiPickerComponent = HslColorPicker;\n break;\n case \"HslColorPicker\":\n KirkiPickerComponent = HslColorPicker;\n break;\n case \"HslStringColorPicker\":\n KirkiPickerComponent = HslStringColorPicker;\n break;\n case \"HslaColorPicker\":\n KirkiPickerComponent = HslaColorPicker;\n break;\n case \"HslaStringColorPicker\":\n KirkiPickerComponent = HslaStringColorPicker;\n break;\n case \"HsvColorPicker\":\n KirkiPickerComponent = HsvColorPicker;\n break;\n case \"HsvStringColorPicker\":\n KirkiPickerComponent = HsvStringColorPicker;\n break;\n case \"HsvaColorPicker\":\n KirkiPickerComponent = HsvaColorPicker;\n break;\n case \"HsvaStringColorPicker\":\n KirkiPickerComponent = HsvaStringColorPicker;\n break;\n default:\n KirkiPickerComponent = HexColorPicker;\n break;\n }\n\n useWindowResize(handleWindowResize);\n\n // Handle outside focus to close the picker popup.\n useFocusOutside(formRef, closePicker);\n\n // Handle outside click to close the picker popup.\n useClickOutside(pickerRef, resetRef, closePicker);\n\n if (jQuery.wp && jQuery.wp.wpColorPicker) {\n const wpColorPickerSwatches =\n jQuery.wp.wpColorPicker.prototype.options.palettes;\n\n // If 3rd parties applied custom colors to wpColorPicker swatches, let's use them.\n if (Array.isArray(wpColorPickerSwatches)) {\n if (wpColorPickerSwatches.length < 8) {\n for (let i = wpColorPickerSwatches.length; i <= 8; i++) {\n wpColorPickerSwatches.push(choices.swatches[i]);\n }\n }\n\n choices.swatches = wpColorPickerSwatches;\n }\n }\n\n const controlHeader = (\n <>\n {controlLabel}\n \n \n );\n\n let formClassName = useHueMode\n ? \"kirki-control-form use-hue-mode\"\n : \"kirki-control-form\";\n\n formClassName += \" has-\" + choices.labelStyle + \"-label-style\";\n\n let pickerContainerClassName = isPickerOpen\n ? pickerComponent + \" colorPickerContainer is-open\"\n : pickerComponent + \" colorPickerContainer\";\n\n const pickerTrigger = (\n <>\n \n \n \n\n \n \n );\n\n let pickerHeader;\n\n switch (choices.labelStyle) {\n case \"tooltip\":\n pickerHeader = (\n <>\n {pickerTrigger}\n {!isPickerOpen && (\n
{controlHeader}
\n )}\n \n );\n break;\n\n case \"top\":\n pickerHeader = (\n <>\n {controlHeader}\n {pickerTrigger}\n \n );\n break;\n\n default:\n pickerHeader = (\n <>\n
\n
{controlHeader}
\n
{pickerTrigger}
\n
\n \n );\n break;\n }\n\n return (\n <>\n
\n {pickerHeader}\n \n {!useHueMode && (\n \n )}\n\n \n\n \n
\n
\n \n );\n};\n\nexport default KirkiReactColorfulForm;\n","import ReactDOM from \"react-dom\";\nimport KirkiReactColorfulForm from \"./KirkiReactColorfulForm\";\n\n/**\n * KirkiReactColorfulControl.\n *\n * @class\n * @augments wp.customize.Control\n * @augments wp.customize.Class\n */\nconst KirkiReactColorfulControl = wp.customize.Control.extend({\n /**\n * Initialize.\n *\n * @param {string} id - Control ID.\n * @param {object} params - Control params.\n */\n initialize: function (id, params) {\n const control = this;\n\n // Bind functions to this control context for passing as React props.\n control.setNotificationContainer =\n control.setNotificationContainer.bind(control);\n\n wp.customize.Control.prototype.initialize.call(control, id, params);\n\n // The following should be eliminated with .\n function onRemoved(removedControl) {\n if (control === removedControl) {\n control.destroy();\n control.container.remove();\n wp.customize.control.unbind(\"removed\", onRemoved);\n }\n }\n wp.customize.control.bind(\"removed\", onRemoved);\n },\n\n /**\n * Set notification container and render.\n *\n * This is called when the React component is mounted.\n *\n * @param {Element} element - Notification container.\n * @returns {void}\n */\n setNotificationContainer: function setNotificationContainer(element) {\n const control = this;\n control.notifications.container = jQuery(element);\n control.notifications.render();\n },\n\n /**\n * Render the control into the DOM.\n *\n * This is called from the Control#embed() method in the parent class.\n *\n * @returns {void}\n */\n renderContent: function renderContent() {\n const control = this;\n const useHueMode = \"hue\" === control.params.mode;\n const choices = control.params.choices;\n\n let pickerComponent;\n\n if (choices.formComponent) {\n pickerComponent = choices.formComponent;\n } else {\n pickerComponent = choices.alpha\n ? \"RgbaStringColorPicker\"\n : \"HexColorPicker\";\n }\n\n pickerComponent = useHueMode ? \"HueColorPicker\" : pickerComponent;\n\n const form = (\n \n );\n\n ReactDOM.render(form, control.container[0]);\n },\n\n /**\n * After control has been first rendered, start re-rendering when setting changes.\n *\n * React is able to be used here instead of the wp.customize.Element abstraction.\n *\n * @returns {void}\n */\n ready: function ready() {\n const control = this;\n\n /**\n * Update component state when customizer setting changes.\n *\n * There was an issue (which was fixed):\n *\n * Let's say we have other color picker (\"x\" color picker) and this current color picker (\"y\" color picker).\n * Let's say there's a script that bind to that \"x\" color picker to make change to this \"y\" color picker.\n *\n * When \"x\" color picker is changed fast (by dragging the color, for example),\n * then the re-render of this \"y\" color picker will be messy.\n * There was something like \"function-call race\" between component re-render and function call inside the component.\n *\n * When that happens, the \"x\" color picker becomes unresponsive and un-usable.\n *\n * How we fixed that:\n * - Provide a updateComponentState property to this file.\n * - Inside the component, assign the updateComponentState with a function to update some states.\n * - Then inside the binding below, call updateComponentState instead of re-rendering the component.\n *\n * The result: Even though the \"x\" color picker becomes very slow, it's still usable and responsive enough.\n */\n control.setting.bind((val) => {\n control.updateComponentState(val);\n });\n },\n\n updateComponentState: () => {},\n\n /**\n * Handle removal/de-registration of the control.\n *\n * This is essentially the inverse of the Control#embed() method.\n *\n * @link https://core.trac.wordpress.org/ticket/31334\n * @returns {void}\n */\n destroy: function destroy() {\n const control = this;\n\n // Garbage collection: undo mounting that was done in the embed/renderContent method.\n ReactDOM.unmountComponentAtNode(control.container[0]);\n\n // Call destroy method in parent if it exists (as of #31334).\n if (wp.customize.Control.prototype.destroy) {\n wp.customize.Control.prototype.destroy.call(control);\n }\n },\n});\n\nexport default KirkiReactColorfulControl;\n","/* global wp */\n\nimport \"./control.scss\";\nimport KirkiReactColorfulControl from './KirkiReactColorfulControl';\n\n// Register control type with Customizer.\nwp.customize.controlConstructor['kirki-react-colorful'] = KirkiReactColorfulControl;\n"],"names":["arr","i","Array","isArray","$81a86a7ff45e5a17$export$9099ad97b570f7c","iter","Symbol","iterator","Object","prototype","toString","call","from","$3f321efdd7ba37b3$export$9099ad97b570f7c","TypeError","$c650f3bf7df4abe8$export$9099ad97b570f7c","module","ReactDOM","useEventCallback","handler","callbackRef","useRef","fn","value","current","React","clamp","number","min","max","isTouch","event","getRelativePosition","node","rect","getBoundingClientRect","pointer","touches","left","pageX","window","pageXOffset","width","top","pageY","pageYOffset","height","preventDefaultMove","preventDefault","Interactive","memo","n","onMove","onKey","rest","container","onMoveCallback","onKeyCallback","hasTouch","b","useMemo","handleMove","length","buttons","toggleDocumentEvents","handleMoveEnd","state","touch","toggleEvent","self","addEventListener","removeEventListener","e1","nativeEvent","el","focus","keyCode","which","handleMoveStart","handleKeyDown","useEffect","onTouchStart","onMouseDown","className","ref","onKeyDown","tabIndex","role","formatClassName","names","filter","Boolean","join","Pointer","r","color","nodeClassName","style","backgroundColor","round","digits","base","Math","pow","angleUnits","grad","turn","rad","PI","hexToRgba","hex","substr","parseInt","g","a","parseHue","unit","Number","hslaStringToHsva","hslString","match","exec","hslaToHsva","h","s","l","v","hslStringToHsva","e","hsvaToHsla","hh","hsvaToHslString","hsva","hsvaToHslaString","hsvaToRgba","floor","c","d","hsvaStringToHsva","hsvString","roundHsva","hsvStringToHsva","rgbaStringToHsva","rgbaString","rgbaToHsva","rgbStringToHsva","format","delta","Hue","hue","onChange","interaction","offset","aria-label","Saturation","containerStyle","aria-valuetext","equalColorObjects","first","second","prop","equalColorString","replace","useColorManipulation","colorModel","onChangeCallback","useState","toHsva","updateHsva","cache","equal","newHsva","newColor","fromHsva","handleChange","useCallback","params","assign","nonce","styleElement","useIsomorphicLayoutEffect","useLayoutEffect","useStyleSheet","document","createElement","innerHTML","__webpack_nonce__","setAttribute","head","appendChild","ColorPicker","defaultColor","toLowerCase","HexColorPicker","props","Alpha","gradientStyle","backgroundImage","AlphaColorPicker","HslaColorPicker","HslaStringColorPicker","HslColorPicker","HslStringColorPicker","HsvaColorPicker","HsvaStringColorPicker","HsvColorPicker","HsvStringColorPicker","RgbaColorPicker","RgbaStringColorPicker","RgbColorPicker","RgbStringColorPicker","defineProperty","$b78a1da83f74c1b0$exports","ReactCSS","loop","handleActive","handleHover","hover","undefined","$1af5f0047ec0a4be$exports","flattenNames","$09f9c14770cbab0c$var$freeGlobal","$parcel$global","$09f9c14770cbab0c$exports","$a865dcd56a900ffd$var$freeSelf","$a865dcd56a900ffd$var$root","Function","$3882df8dc73f6118$exports","$a865dcd56a900ffd$exports","$48f8b3f19aaf6989$var$objectProto","$48f8b3f19aaf6989$var$hasOwnProperty","hasOwnProperty","$48f8b3f19aaf6989$var$nativeObjectToString","$48f8b3f19aaf6989$var$symToStringTag","toStringTag","$48f8b3f19aaf6989$exports","isOwn","tag","unmasked","result","$7a14c4924af7d4d2$var$nativeObjectToString","$7a14c4924af7d4d2$exports","$fd5bf913c39beade$var$symToStringTag","$fd5bf913c39beade$exports","$39b5d66038bd8532$var$isArray","$39b5d66038bd8532$exports","$46bee79cc7d9a7e8$exports","$1af5f0047ec0a4be$var$_isString3","$1af5f0047ec0a4be$var$_interopRequireDefault","$840feff0df32f53d$var$baseFor","fromRight","object","iteratee","keysFunc","index","iterable","key","$8840c6227ab521f1$exports","$840feff0df32f53d$exports","$e8b6fffd76e832b3$exports","$d446c7d231773ecf$exports","$3ce96c529def95ef$var$objectProto","$3ce96c529def95ef$var$hasOwnProperty","$3ce96c529def95ef$var$propertyIsEnumerable","propertyIsEnumerable","$3ce96c529def95ef$var$isArguments","arguments","$3ce96c529def95ef$exports","freeExports","exports","nodeType","freeModule","Buffer","isBuffer","$hL2Rd","$5427001cea9942b8$var$reIsUint","$5427001cea9942b8$exports","type","test","$137f4e13909251d1$exports","$3e05fcbf1b5b7997$var$typedArrayTags","$3e05fcbf1b5b7997$exports","$e0dbedf602b988a8$exports","func","freeProcess","process","nodeUtil","types","require","binding","$4684b94e597e87bf$var$nodeIsTypedArray","$RNMn2","isTypedArray","$4684b94e597e87bf$var$isTypedArray","$4684b94e597e87bf$exports","$e8c5603e271c3983$var$hasOwnProperty","$e8c5603e271c3983$exports","inherited","isArr","isArg","isBuff","$9VWwx","isType","skipIndexes","String","push","$0d900e806b4839cb$var$objectProto","$0d900e806b4839cb$exports","Ctor","constructor","$08dbda7fe23bae11$var$nativeKeys","$653479357070bd3e$exports","transform","arg","keys","$08dbda7fe23bae11$exports","$3e63b8977eb7c908$var$hasOwnProperty","$3e63b8977eb7c908$exports","$99cb879ffe812149$exports","$7232c45c6ea148e4$exports","$0f311fc2f81b8de5$exports","$1d5bcd1a84949a69$exports","$7595cbb5f0670a1b$exports","$ef5cf250aae3bdc2$exports","$016ab065423e940a$exports","$1af5f0047ec0a4be$var$_forOwn3","$cbc1aac1415bf219$exports","$4722ed06981b55de$var$getPrototype","getPrototypeOf","$4722ed06981b55de$exports","$722cb5f839a0b2c7$var$funcProto","$722cb5f839a0b2c7$var$objectProto","$722cb5f839a0b2c7$var$funcToString","$722cb5f839a0b2c7$var$hasOwnProperty","$722cb5f839a0b2c7$var$objectCtorString","$1af5f0047ec0a4be$var$_isPlainObject3","proto","$245150226687728c$exports","array","$d7ea9b42bcde1d1f$exports","__data__","size","$3e92950fd888f9fb$exports","other","$f26bca25e20d1927$exports","$d32732f57f0fd622$var$splice","splice","$d32732f57f0fd622$exports","data","this","pop","$bd8c975aaffcfd88$exports","$32314e43a0afefb8$exports","$61a122bd0c0403cf$var$ListCache","entries","clear","entry","set","$1b79ecbda6549ca3$exports","get","has","$61a122bd0c0403cf$exports","$1f5a0e34cf599ae1$exports","$f4d5a710bc8fda81$exports","$32bfe065a8d428d8$exports","$4763e4bb26f696be$exports","uid","$5073cfca0eba0741$var$coreJsData","$9dd21c29a4174b88$var$maskSrcKey","$5073cfca0eba0741$exports","IE_PROTO","$9dd21c29a4174b88$exports","$3c4ecacd73ced474$var$funcToString","$3c4ecacd73ced474$exports","$c943d2b5226dc1fb$var$reIsHostCtor","$c943d2b5226dc1fb$var$funcProto","$c943d2b5226dc1fb$var$objectProto","$c943d2b5226dc1fb$var$funcToString","$c943d2b5226dc1fb$var$hasOwnProperty","$c943d2b5226dc1fb$var$reIsNative","RegExp","$c943d2b5226dc1fb$exports","$164faae06cde1f0c$exports","$84e2e54b76039571$var$Map","$6090d3837ee94b6f$exports","$84e2e54b76039571$exports","$e8e0d651cb5cc7f8$var$nativeCreate","$e8e0d651cb5cc7f8$exports","$2c062c7a0e80ee22$exports","$4e236b2751d15144$exports","$556bceab6747858d$var$hasOwnProperty","$556bceab6747858d$exports","$015c934c1da58b52$var$hasOwnProperty","$015c934c1da58b52$exports","$b1baac523fda4eb0$var$Hash","$207c8424d28e54a5$exports","$b1baac523fda4eb0$exports","$c854edbb95f25d9f$exports","$e1e950c268327c40$exports","$7d81f5ef9c65ae46$exports","map","$b3c9888f9307ffe4$exports","$a3374474b9a485b0$exports","$6b9628af7f608328$exports","$de267ea2e2a60b6c$var$MapCache","$7fc9af31e6a59388$exports","$de267ea2e2a60b6c$exports","$a85f5ccceb860075$var$Stack","$de837b15ac510064$exports","pairs","$de837b15ac510064$var$LARGE_ARRAY_SIZE","$a85f5ccceb860075$exports","$44409e0f8cc91812$exports","$f24e70d3b58eab24$var$SetCache","values","add","$e30e5202fb4eeb2c$exports","$f24e70d3b58eab24$exports","$62faf4d36c36f10c$exports","predicate","$6aaf205750f9d706$exports","$505d72eb7b1b8987$exports","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othValue1","othIndex","$659501c574354a34$var$Uint8Array","Uint8Array","$659501c574354a34$exports","$ef5683d7069d24b9$exports","forEach","$4f6408021c1ddc21$exports","$636344d1689bcd1a$var$symbolProto","$636344d1689bcd1a$var$symbolValueOf","valueOf","$636344d1689bcd1a$exports","byteLength","byteOffset","buffer","name","message","convert","stacked","$9e359d484f5d703c$exports","$7763283377201438$exports","symbolsFunc","$d1c33b2c4a7e02cc$exports","resIndex","$ac2b2a0ef02f2ccd$exports","$acc59da0cda7325a$var$propertyIsEnumerable","$acc59da0cda7325a$var$nativeGetSymbols","getOwnPropertySymbols","$acc59da0cda7325a$exports","symbol","$e58128f43fe4c925$exports","$5afcf4d4ce9325f3$var$hasOwnProperty","$5afcf4d4ce9325f3$exports","objProps","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","$668f1b0c47726aa6$exports","$39c19a7bedd502e9$exports","$10af7396a95bf2df$exports","$a084cb216678fd79$exports","$6174820ed6f3429a$var$mapTag","$6174820ed6f3429a$var$promiseTag","$6174820ed6f3429a$var$setTag","$6174820ed6f3429a$var$weakMapTag","$6174820ed6f3429a$var$dataViewTag","$6174820ed6f3429a$var$dataViewCtorString","$6174820ed6f3429a$var$mapCtorString","$6174820ed6f3429a$var$promiseCtorString","$6174820ed6f3429a$var$setCtorString","$6174820ed6f3429a$var$weakMapCtorString","$6174820ed6f3429a$var$getTag","ArrayBuffer","resolve","ctorString","$6174820ed6f3429a$exports","$68c0fa8e5fb50368$var$argsTag","$68c0fa8e5fb50368$var$arrayTag","$68c0fa8e5fb50368$var$objectTag","$68c0fa8e5fb50368$var$hasOwnProperty","$68c0fa8e5fb50368$exports","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","$8aa351f07658189b$exports","$8aa351f07658189b$var$baseIsEqual","$c851d8b87bbfe8d0$exports","source","matchData","noCustomizer","srcValue","$c851d8b87bbfe8d0$var$COMPARE_PARTIAL_FLAG","$b7aa46d732fe8c42$exports","$ce469cac59f1fe8d$exports","$1765bc77b715b1fc$exports","$d5eacacb4d49d64a$exports","$3e6f9743e929070d$exports","$6f9177ba2577f44c$var$reIsDeepProp","$6f9177ba2577f44c$var$reIsPlainProp","$6f9177ba2577f44c$exports","$7d27569873c5e39e$var$memoize","resolver","memoized","args","apply","Cache","$7d27569873c5e39e$exports","$a91fb572f0ea4b04$var$rePropName","$a91fb572f0ea4b04$var$reEscapeChar","$a91fb572f0ea4b04$var$stringToPath","$7da89512619ef3b6$exports","string","charCodeAt","quote","subString","$a91fb572f0ea4b04$exports","$314cb8b2ba8079ba$var$symbolProto","$314cb8b2ba8079ba$var$symbolToString","$314cb8b2ba8079ba$exports","$314cb8b2ba8079ba$var$baseToString","$7e2b7193940d2cda$exports","$a54cc0908a620233$exports","$ad6d275f481329e7$exports","$6cde7f9cb08da7ac$exports","path","$7e5150886c8c9e40$exports","defaultValue","$5dc9090d8404129f$exports","$e626eea6e09e8a57$exports","hasFunc","$757d85da6fa9fc3c$exports","$f894fc1b2292a187$exports","$f894fc1b2292a187$var$COMPARE_PARTIAL_FLAG","$f2cce0baea63c412$exports","$76373c4476be6ee8$exports","$aac744202dde468a$exports","$2dbcae97bab1e689$exports","$031ebbf47a4ee38e$var$baseEach","eachFunc","collection","$17b16114be78b96e$exports","$031ebbf47a4ee38e$exports","$893cdec98c5d2260$exports","collection1","$1af5f0047ec0a4be$var$_map3","obj","__esModule","default","$1af5f0047ec0a4be$var$flattenNames","things","thing","$b78a1da83f74c1b0$var$_flattenNames2","$b78a1da83f74c1b0$var$_interopRequireDefault","$e3910b65ea95957b$exports","mergeClasses","$e3910b65ea95957b$var$_forOwn3","$e3910b65ea95957b$var$_interopRequireDefault","$9684cc687668921a$exports","$d9c334ebe23cd107$var$defineProperty","$d9c334ebe23cd107$exports","$a770f453f6624d35$exports","$daa02b90c642d835$var$hasOwnProperty","$daa02b90c642d835$exports","$c4cf8a980efee09d$exports","isNew","newValue","$dffc462a39582fb0$exports","$50f6c64fdd695e40$exports","$42df03513788d690$var$hasOwnProperty","$42df03513788d690$exports","isProto","$fffed0b4e8a9685c$exports","$bd5cb751fd204a22$exports","allocUnsafe","isDeep","slice","copy","$ee192ca947717a4b$exports","$340401eeb2c206eb$exports","$b52892d662249f8d$var$nativeGetSymbols","$b52892d662249f8d$exports","$bee7d5b295a7ab2b$exports","$439fadd005d62254$exports","$cddf4fb2e75f544d$var$hasOwnProperty","$cddf4fb2e75f544d$exports","input","$db2d9793a110b1c0$exports","arrayBuffer","$6d4187b552cd36d8$exports","dataView","$6f6eecda1622b62e$var$reFlags","$6f6eecda1622b62e$exports","regexp","lastIndex","$222d9a586fc8aa74$var$symbolProto","$222d9a586fc8aa74$var$symbolValueOf","$222d9a586fc8aa74$exports","$0e61b6694797096e$exports","typedArray","$8873c82b18c4b696$exports","$49db476428364d67$var$objectCreate","create","$49db476428364d67$var$baseCreate","$49db476428364d67$exports","$ef8879948bde795d$exports","$516f22b2efc8d49e$exports","$4f870abdfab1732f$var$nodeIsMap","isMap","$4f870abdfab1732f$var$isMap","$4f870abdfab1732f$exports","$446a70ccf11ec70b$exports","$5a48d29937f4bda8$var$nodeIsSet","isSet","$5a48d29937f4bda8$var$isSet","$5a48d29937f4bda8$exports","$cf85c0925b1318cc$var$argsTag","$cf85c0925b1318cc$var$funcTag","$cf85c0925b1318cc$var$objectTag","$cf85c0925b1318cc$var$cloneableTags","$cf85c0925b1318cc$exports","$cf85c0925b1318cc$var$baseClone","isFlat","isFull","isFunc","$6BV7U","subValue","key1","$e3910b65ea95957b$var$_cloneDeep3","$9c9acfe348ac4f9c$var$CLONE_DEEP_FLAG","$e3910b65ea95957b$var$_extends","target","$e3910b65ea95957b$var$mergeClasses","classes","activeNames","styles","toMerge","$b78a1da83f74c1b0$var$_mergeClasses2","$35242a9d54c226d6$exports","autoprefix","$35242a9d54c226d6$var$_forOwn3","$35242a9d54c226d6$var$_extends","$35242a9d54c226d6$var$transforms","borderRadius","msBorderRadius","MozBorderRadius","OBorderRadius","WebkitBorderRadius","boxShadow","msBoxShadow","MozBoxShadow","OBoxShadow","WebkitBoxShadow","userSelect","WebkitTouchCallout","KhtmlUserSelect","MozUserSelect","msUserSelect","WebkitUserSelect","flex","WebkitBoxFlex","MozBoxFlex","WebkitFlex","msFlex","flexBasis","WebkitFlexBasis","justifyContent","WebkitJustifyContent","transition","msTransition","MozTransition","OTransition","WebkitTransition","msTransform","MozTransform","OTransform","WebkitTransform","absolute","direction","split","position","right","bottom","extend","otherElementStyles","otherStyle","$35242a9d54c226d6$var$autoprefix","elements","prefixed","element","expanded","$b78a1da83f74c1b0$var$_autoprefix2","$368cdcb1bf944ff9$exports","$368cdcb1bf944ff9$var$_extends","$368cdcb1bf944ff9$var$_react2","$368cdcb1bf944ff9$var$_interopRequireDefault","$d4914188a631308a$exports","$368cdcb1bf944ff9$var$_classCallCheck","instance","Constructor","$368cdcb1bf944ff9$var$_possibleConstructorReturn","ReferenceError","$368cdcb1bf944ff9$var$_inherits","subClass","superClass","enumerable","writable","configurable","setPrototypeOf","__proto__","$368cdcb1bf944ff9$var$hover","Component","Span","_React$Component","Hover","_ref","_temp","_this","_len","_key","concat","handleMouseOver","setState","handleMouseOut","render","onMouseOver","onMouseOut","$b78a1da83f74c1b0$var$_hover3","$0fe475382860a060$exports","active","$0fe475382860a060$var$_extends","$0fe475382860a060$var$_react2","$0fe475382860a060$var$_interopRequireDefault","$0fe475382860a060$var$_classCallCheck","$0fe475382860a060$var$_possibleConstructorReturn","$0fe475382860a060$var$_inherits","$0fe475382860a060$var$active","Active","handleMouseDown","handleMouseUp","onMouseUp","$b78a1da83f74c1b0$var$_active2","$c8971cc59848f9a6$exports","setProp","abs","$b78a1da83f74c1b0$var$_loop3","$b78a1da83f74c1b0$var$ReactCSS","activations","merged","$91f773d7e422284a$export$9099ad97b570f7c","_color","$586e5392d6e53606$export$9099ad97b570f7c","setValue","val","includes","reactCSS","colorPreviewWrapper","pickerComponent","colorPreview","useHueMode","spellCheck","$c8198dbe2e2a53cf$export$9099ad97b570f7c","param","colors","onClick","clr","$6483593b9093d3a0$var$r","$6483593b9093d3a0$var$t","$6483593b9093d3a0$var$n","t","$6483593b9093d3a0$var$e","$6483593b9093d3a0$var$u","isFinite","$6483593b9093d3a0$var$a","$6483593b9093d3a0$var$o","$6483593b9093d3a0$var$i","$6483593b9093d3a0$var$s","$6483593b9093d3a0$var$h","u","o","$6483593b9093d3a0$var$b","$6483593b9093d3a0$var$g","$6483593b9093d3a0$var$d","$6483593b9093d3a0$var$f","$6483593b9093d3a0$var$c","$6483593b9093d3a0$var$l","$6483593b9093d3a0$var$p","$6483593b9093d3a0$var$v","$6483593b9093d3a0$var$m","$6483593b9093d3a0$var$y","r1","$6483593b9093d3a0$var$N","$6483593b9093d3a0$var$x","trim","$6483593b9093d3a0$var$M","$6483593b9093d3a0$var$H","$6483593b9093d3a0$var$$","$6483593b9093d3a0$export$e9390c8310c9761b","parsed","rgba","isValid","brightness","isDark","isLight","toHex","toRgb","toRgbString","toHsl","toHslString","toHsv","invert","$6483593b9093d3a0$export$a5b9a366f832148c","saturate","desaturate","grayscale","lighten","darken","rotate","alpha","isEqual","$2cf9c0421c87a10c$export$9099ad97b570f7c","convertedValue","colord","hsv","$ef927e7966eaa3ba$export$9099ad97b570f7c","formComponent","$1ae248dd8a26f110$export$9099ad97b570f7c","$de4fd82d99b49514$export$9099ad97b570f7c","pickerRef","resetRef","startedWhenMounted","startedInside","listener","contains","validateEventStart","$ae4fdb9f4f164bda$export$9099ad97b570f7c","$bf9e215bfb9eeeb9$export$9099ad97b570f7c","$f1cf1c5f000700ec$export$9099ad97b570f7c","triggerButton","togglePickerHandler","$50aa4f0e529470c4$export$9099ad97b570f7c","control","customizerSetting","choices","parseEmptyValue","parseHueModeValue","hueValue","parseInputValue","convertColorForInput","parsePickerValue","convertColorForPicker","inputValue","setInputValue","pickerValue","setPickerValue","currentInputValue","currentPickerValue","updateComponentState","valueForInput","JSON","stringify","valueForPicker","saveToCustomizer","convertColorForCustomizer","parseCustomizerValue","initialColor","controlLabel","dangerouslySetInnerHTML","__html","label","controlDescription","description","KirkiPickerComponent","formRef","isPickerOpen","setIsPickerOpen","usePositionFixed","labelStyle","pickerContainerStyle","setPickerContainerStyle","getPickerContainerStyle","padding","getComputedStyle","parentNode","paddingLeft","controlLeftOffset","offsetLeft","convertInputValueTo6Digits","openPicker","closePicker","setTimeout","useWindowResize","useFocusOutside","useClickOutside","jQuery","wp","wpColorPicker","wpColorPickerSwatches","options","palettes","swatches","controlHeader","Fragment","setNotificationContainer","formClassName","pickerContainerClassName","pickerTrigger","display","pickerHeader","swatchColor","$ac47bc0f7e0b5130$export$9099ad97b570f7c","customize","Control","initialize","id","bind","onRemoved","removedControl","destroy","remove","unbind","notifications","renderContent","mode","form","$ac47bc0f7e0b5130$var$_extends","setting","ready","unmountComponentAtNode","controlConstructor","KirkiReactColorfulControl"],"version":3,"file":"control.js.map"} \ No newline at end of file diff --git a/packages/kirki-framework/control-react-colorful/dist/preview.js b/packages/kirki-framework/control-react-colorful/dist/preview.js new file mode 100644 index 000000000..908e0eb1d --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/dist/preview.js @@ -0,0 +1,2 @@ +!function(){var o;o=function(o){return"number"==typeof o||"string"==typeof o&&!isNaN(o)&&!isNaN(parseFloat(o))},wp.hooks.addFilter("kirkiPostMessageStylesOutput","kirki",(function(a,e,l,r){return"kirki-react-colorful"!==r||"string"==typeof e||"number"==typeof e?a:a+=l.element+"{"+l.property+": "+function(a){return alphaEnabled=!1,a.r||a.g||a.b?(colorMode=void 0!==a.a?"rgba":"rgb",alphaEnabled="rgba"===colorMode||alphaEnabled,pos1=a.r,pos2=a.g,pos3=a.b,pos4="rgba"===colorMode?a.a:1):(a.h||a.s)&&(pos1=a.h,a.l?(colorMode=void 0!==a.a?"hsla":"hsl",pos2=o(a.l)?a.l+"%":a.l):a.v&&(colorMode=void 0!==a.a?"hvla":"hvl",pos2=o(a.v)?a.v+"%":a.v),alphaEnabled="hsla"===colorMode||"hsva"===colorMode||alphaEnabled,pos3=o(a)?a.s+"%":a.s,pos4=alphaEnabled?a.a:1),alphaEnabled?formattedValue=colorMode+"("+pos1+", "+pos2+", "+pos3+", "+pos4+")":formattedValue=colorMode+"("+pos1+", "+pos2+", "+pos3+")",formattedValue}(e)+";\t\t}"}))}(); +//# sourceMappingURL=preview.js.map diff --git a/packages/kirki-framework/control-react-colorful/dist/preview.js.map b/packages/kirki-framework/control-react-colorful/dist/preview.js.map new file mode 100644 index 000000000..35c075276 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/dist/preview.js.map @@ -0,0 +1 @@ +{"mappings":"gBAUOA,EAAAA,EAAS,SAAIC,GAGlB,MAAA,iBAAwBA,GAGxB,iBAAwBA,IAGfC,MAAMD,KAASC,MAAMC,WAAWF,KAnB3CG,GAAAC,MAAAC,UAAA,+BAAA,SA8EmB,SAAIC,EAAQC,EAAOC,EAAQC,GAE5C,MAAA,yBAA+BA,GAC/B,iBAAwBF,GAApB,iBAAiDA,EADFD,EAGnDA,GAAUE,EAAOE,QAAP,IACPF,EAAOG,SADA,KAtDc,SAAIJ,UAE5BK,cAAe,EAEXL,EAAMM,GAAKN,EAAMO,GAAKP,EAAMQ,GAC/BC,eAAS,IAA0BT,EAAMU,EAA7B,OAAA,MACZL,aAAY,SAAcI,WAAmBJ,aAE7CM,KAAOX,EAAMM,EACbM,KAAOZ,EAAMO,EACbM,KAAOb,EAAMQ,EACbM,KAAI,SAAcL,UAAYT,EAAMU,EAAI,IAC9BV,EAAMe,GAAKf,EAAMgB,KAC3BL,KAAOX,EAAMe,EAETf,EAAMiB,GACTR,eAAS,IAA0BT,EAAMU,EAA7B,OAAA,MACZE,KAAOpB,EAAUQ,EAAMiB,GAAKjB,EAAMiB,EAAN,IAAgBjB,EAAMiB,GACxCjB,EAAMkB,IAChBT,eAAS,IAA0BT,EAAMU,EAA7B,OAAA,MACZE,KAAOpB,EAAUQ,EAAMkB,GAAKlB,EAAMkB,EAAN,IAAgBlB,EAAMkB,GAGnDb,aAAY,SAAcI,WAAX,SAAmCA,WAAmBJ,aAErEQ,KAAOrB,EAAUQ,GAASA,EAAMgB,EAAN,IAAgBhB,EAAMgB,EAChDF,KAAOT,aAAeL,EAAMU,EAAI,GAG7BL,aACHc,eAAiBV,UAAS,IAASE,KAAlB,KAAgCC,KAAhC,KAA8CC,KAA9C,KAA4DC,KAA5D,IAEjBK,eAAiBV,UAAS,IAASE,KAAlB,KAAgCC,KAAhC,KAA8CC,KAA9C,IAGXM,eAoBqBC,CAAoBpB,GAAD","sources":["src/preview.js"],"sourcesContent":["(() => {\n\t/**\n\t * Check if the provided value is a numeric.\n\t *\n\t * Thanks to Dan (https://stackoverflow.com/users/17121/dan) for his answer on StackOverflow:\n\t * @see https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number#answer-175787\n\t *\n\t * @param {string|number} str The provided value.\n\t * @return bool\n\t */\n\tconst isNumeric = (str) => {\n\n\t\t// Number is a numeric.\n\t\tif ('number' === typeof str) return true;\n\n\t\t// We only process strings.\n\t\tif ('string' !== typeof str) return false;\n\n\t\t// Use type coercion to parse the entirety of the string (`parseFloat` alone does not do this) and ensure strings of whitespace fail.\n\t\treturn (!isNaN(str) && !isNaN(parseFloat(str)));\n\n\t};\n\n\t/**\n\t * Generate value from color object.\n\t *\n\t * @param {Object} value The value.\n\t * @return string\n\t */\n\tconst generateStringValue = (value) => {\n\n\t\talphaEnabled = false;\n\n\t\tif (value.r || value.g || value.b) {\n\t\t\tcolorMode = \"undefined\" !== typeof value.a ? 'rgba' : 'rgb';\n\t\t\talphaEnabled = 'rgba' === colorMode ? true : alphaEnabled;\n\n\t\t\tpos1 = value.r;\n\t\t\tpos2 = value.g;\n\t\t\tpos3 = value.b;\n\t\t\tpos4 = 'rgba' === colorMode ? value.a : 1;\n\t\t} else if (value.h || value.s) {\n\t\t\tpos1 = value.h;\n\n\t\t\tif (value.l) {\n\t\t\t\tcolorMode = \"undefined\" !== typeof value.a ? 'hsla' : 'hsl';\n\t\t\t\tpos2 = isNumeric(value.l) ? value.l + '%' : value.l;\n\t\t\t} else if (value.v) {\n\t\t\t\tcolorMode = \"undefined\" !== typeof value.a ? 'hvla' : 'hvl';\n\t\t\t\tpos2 = isNumeric(value.v) ? value.v + '%' : value.v;\n\t\t\t}\n\n\t\t\talphaEnabled = 'hsla' === colorMode || 'hsva' === colorMode ? true : alphaEnabled;\n\n\t\t\tpos3 = isNumeric(value) ? value.s + '%' : value.s;\n\t\t\tpos4 = alphaEnabled ? value.a : 1;\n\t\t}\n\n\t\tif (alphaEnabled) {\n\t\t\tformattedValue = colorMode + '(' + pos1 + ', ' + pos2 + ', ' + pos3 + ', ' + pos4 + ')';\n\t\t} else {\n\t\t\tformattedValue = colorMode + '(' + pos1 + ', ' + pos2 + ', ' + pos3 + ')';\n\t\t}\n\n\t\treturn formattedValue;\n\n\t};\n\n\t/**\n\t * Function to hook into `kirkiPostMessageStylesOutput` filter.\n\t *\n\t * @param {string} styles The styles to be filtered.\n\t * @param {string|Object|int} value The control's value.\n\t * @param {Object} output The control's output argument.\n\t * @param {string} controlType The control type.\n\t *\n\t * @return {string} The filtered styles.\n\t */\n\tconst stylesOutput = (styles, value, output, controlType) => {\n\n\t\tif ('kirki-react-colorful' !== controlType) return styles;\n\t\tif ('string' === typeof value || 'number' === typeof value) return styles;\n\n\t\tstyles += output.element + '{'\n\t\t\t+ output.property + ': ' + generateStringValue(value) + ';\\\n\t\t}';\n\n\t\treturn styles;\n\n\t};\n\n\t// Hook the function to the `kirkiPostMessageStylesOutput` filter.\n\twp.hooks.addFilter('kirkiPostMessageStylesOutput', 'kirki', stylesOutput);\n})();\n"],"names":["isNumeric","str","isNaN","parseFloat","wp","hooks","addFilter","styles","value","output","controlType","element","property","alphaEnabled","r","g","b","colorMode","a","pos1","pos2","pos3","pos4","h","s","l","v","formattedValue","generateStringValue"],"version":3,"file":"preview.js.map"} \ No newline at end of file diff --git a/packages/kirki-framework/control-react-colorful/src/Control/ReactColorful.php b/packages/kirki-framework/control-react-colorful/src/Control/ReactColorful.php new file mode 100644 index 000000000..87b5bf2aa --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/Control/ReactColorful.php @@ -0,0 +1,192 @@ + 'alpha' argument. + * + * @access public + * @var string + */ + public $mode = ''; + + /** + * Enqueue control related scripts/styles. + * + * @access public + * @since 1.0 + * @return void + */ + public function enqueue() { + + parent::enqueue(); + + // Enqueue the script. + wp_enqueue_script( 'kirki-control-react-colorful', URL::get_from_path( dirname( dirname( __DIR__ ) ) . '/dist/control.js' ), [ 'customize-controls', 'wp-element', 'jquery', 'customize-base', 'kirki-control-base' ], self::$control_ver, false ); + + // Enqueue the style. + wp_enqueue_style( 'kirki-control-react-colorful', URL::get_from_path( dirname( dirname( __DIR__ ) ) . '/dist/control.css' ), [], self::$control_ver ); + + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @access public + * @since 1.0 + * @see WP_Customize_Control::to_json() + * @return void + */ + public function to_json() { + + // Get the basics from the parent class. + parent::to_json(); + + // Value. + $this->json['value'] = empty( $this->value() ) ? '' : ( 'hue' === $this->mode ? absint( $this->value() ) : $this->value() ); + + // Mode. + $this->json['mode'] = $this->mode; + + // The label_style. + $this->json['choices']['labelStyle'] = isset( $this->choices['label_style'] ) ? $this->choices['label_style'] : 'default'; + + // Color swatches. + $this->json['choices']['swatches'] = $this->color_swatches(); + + // Form component (the value is bsaed on react-colorful's components). + if ( isset( $this->choices['form_component'] ) ) { + $this->json['choices']['formComponent'] = $this->choices['form_component']; + } + + $this->remove_unused_json_props(); + + } + + /** + * Remove un-used json properties. + * + * For consistency in JS, we converted some choices to use camelCase. + * To reduce the returned json size, we remove the original properties (which is using snake_case) from the JSON. + * But we keep them to stay in the choices array, so that they're still accessible. + * + * @return void + */ + public function remove_unused_json_props() { + + if ( isset( $this->json['choices']['label_style'] ) ) { + unset( $this->json['choices']['label_style'] ); + } + + if ( isset( $this->choices['form_component'] ) ) { + unset( $this->json['choices']['form_component'] ); + } + + if ( isset( $this->json['choices']['trigger_style'] ) ) { + unset( $this->json['choices']['trigger_style'] ); + } + + if ( isset( $this->json['choices']['button_text'] ) ) { + unset( $this->json['choices']['button_text'] ); + } + + } + + /** + * Get color swatches values. + * + * @return array The color swatches values. + */ + public function color_swatches() { + + $default_swatches = [ + '#000000', + '#ffffff', + '#dd3333', + '#dd9933', + '#eeee22', + '#81d742', + '#1e73be', + '#8224e3', + ]; + + $default_swatches = apply_filters( 'kirki_default_color_swatches', $default_swatches ); + + if ( isset( $this->choices['swatches'] ) && ! empty( $this->choices['swatches'] ) ) { + $swatches = $this->choices['swatches']; + + $total_swatches = count( $swatches ); + + if ( $total_swatches < 8 ) { + for ( $i = $total_swatches; $i <= 8; $i++ ) { + $swatches[] = $total_swatches[ $i ]; + } + } + } else { + $swatches = $default_swatches; + } + + $swatches = apply_filters( 'kirki_color_swatches', $swatches ); + + return $swatches; + + } + + /** + * An Underscore (JS) template for this control's content (but not its container). + * + * Class variables for this control class are available in the `data` JS object; + * export custom variables by overriding {@see WP_Customize_Control::to_json()}. + * + * @see WP_Customize_Control::print_template() + * + * @access protected + * @since 1.0 + * @return void + */ + protected function content_template() {} +} diff --git a/packages/kirki-framework/control-react-colorful/src/Field/CSS/ReactColorful.php b/packages/kirki-framework/control-react-colorful/src/Field/CSS/ReactColorful.php new file mode 100644 index 000000000..4c335423e --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/Field/CSS/ReactColorful.php @@ -0,0 +1,83 @@ + 'global', + 'element' => '', + 'property' => 'color', + ) + ); + + // Only need to process further if the $value format is array. + if ( ! is_array( $value ) ) { + $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $value; + return; + } + + $alpha_enabled = false; + + if ( isset( $value['r'] ) || isset( $value['g'] ) || isset( $value['b'] ) ) { + $color_mode = isset( $value['a'] ) ? 'rgba' : 'rgb'; + $alpha_enabled = 'rgba' === $color_mode ? true : $alpha_enabled; + + $pos_1 = $value['r']; + $pos_2 = $value['g']; + $pos_3 = $value['b']; + $pos_4 = 'rgba' === $color_mode ? $value['a'] : 1; + } elseif ( isset( $value['h'] ) || isset( $value['s'] ) ) { + $pos_1 = $value['h']; + + if ( isset( $value['l'] ) ) { + $color_mode = isset( $value['a'] ) ? 'hsla' : 'hsl'; + $pos_2 = is_numeric( $value['l'] ) ? $value['l'] . '%' : $value['l']; + } elseif ( isset( $value['v'] ) ) { + $color_mode = isset( $value['a'] ) ? 'hvla' : 'hvl'; + $pos_2 = is_numeric( $value['v'] ) ? $value['v'] . '%' : $value['v']; + } + + $alpha_enabled = 'hsla' === $color_mode || 'hsva' === $color_mode ? true : $alpha_enabled; + + $pos_3 = is_numeric( $value ) ? $value['s'] . '%' : $value['s']; + $pos_4 = $alpha_enabled ? $value['a'] : 1; + } + + if ( $alpha_enabled ) { + $formatted_value = $color_mode . '(' . $pos_1 . ', ' . $pos_2 . ', ' . $pos_3 . ', ' . $pos_4 . ')'; + } else { + $formatted_value = $color_mode . '(' . $pos_1 . ', ' . $pos_2 . ', ' . $pos_3 . ')'; + } + + $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $formatted_value; + + } + +} diff --git a/packages/kirki-framework/control-react-colorful/src/Field/ReactColorful.php b/packages/kirki-framework/control-react-colorful/src/Field/ReactColorful.php new file mode 100644 index 000000000..b608f7759 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/Field/ReactColorful.php @@ -0,0 +1,283 @@ +args['settings'] ) { + $args = parent::filter_setting_args( $args, $wp_customize ); + + // Set the sanitize-callback if none is defined. + if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { + $args['sanitize_callback'] = [ __CLASS__, 'sanitize' ]; + + // If this is a hue control then its value should be an integer. + if ( isset( $args['mode'] ) && 'hue' === $args['mode'] ) { + $args['sanitize_callback'] = 'absint'; + } + } + } + + return $args; + + } + + /** + * Filter arguments before creating the control. + * + * @access public + * @since 0.1 + * @param array $args The field arguments. + * @param WP_Customize_Manager $wp_customize The customizer instance. + * @return array + */ + public function filter_control_args( $args, $wp_customize ) { + + if ( $args['settings'] === $this->args['settings'] ) { + $args = parent::filter_control_args( $args, $wp_customize ); + $args['type'] = 'kirki-react-colorful'; + } + + return $args; + + } + + /** + * Sanitize colors. + * + * @static + * @access public + * @since 1.0 + * + * @param string|array $value The color. + * @return string|array + */ + public static function sanitize( $value ) { + + $sanitized_value = ''; + + if ( is_string( $value ) ) { + $sanitized_value = self::sanitize_color_string( $value ); + } elseif ( is_array( $value ) ) { + if ( isset( $value['r'] ) || isset( $value['g'] ) || isset( $value['b'] ) ) { + $sanitized_value = self::sanitize_color_array( $value, 'rgb' ); + } elseif ( isset( $value['h'] ) || isset( $value['s'] ) ) { + if ( isset( $value['l'] ) ) { + $sanitized_value = self::sanitize_color_array( $value, 'hsl' ); + } elseif ( isset( $value['v'] ) ) { + $sanitized_value = self::sanitize_color_array( $value, 'hsv' ); + } + } + } + + return $sanitized_value; + + } + + /** + * Sanitize single color array. + * + * @param array $color The provided color in array format. + * @param string $color_type The color type. Accepts: rgb, hsl, and hsv. + * + * @return array The sanitized color. + */ + public static function sanitize_color_array( $color, $color_type = 'rgb' ) { + + $keys = [ 'r', 'g', 'b' ]; + $mins = [ 0, 0, 0 ]; + $maxs = [ 255, 255, 255 ]; + + if ( 'hsl' === $color_type || 'hsv' === $color_type ) { + $keys = [ 'h', 's', '' ]; + $keys[2] = isset( $color['v'] ) ? 'v' : 'l'; + + $mins = [ 0, 0, 0 ]; + $maxs = [ 360, 100, 100 ]; + } + + $sanitized_color = []; + + $sanitized_color = [ + $keys[0] => isset( $color[ $keys[0] ] ) ? absint( $color[ $keys[0] ] ) : $mins[0], + $keys[1] => isset( $color[ $keys[1] ] ) ? absint( $color[ $keys[1] ] ) : $mins[1], + $keys[2] => isset( $color[ $keys[2] ] ) ? absint( $color[ $keys[2] ] ) : $mins[2], + ]; + + $sanitized_color[ $keys[0] ] = $sanitized_color[ $keys[0] ] < $mins[0] ? $mins[0] : $sanitized_color[ $keys[0] ]; + $sanitized_color[ $keys[0] ] = $sanitized_color[ $keys[0] ] > $maxs[0] ? $maxs[0] : $sanitized_color[ $keys[0] ]; + + $sanitized_color[ $keys[1] ] = $sanitized_color[ $keys[1] ] < $mins[1] ? $mins[1] : $sanitized_color[ $keys[1] ]; + $sanitized_color[ $keys[1] ] = $sanitized_color[ $keys[1] ] > $maxs[1] ? $maxs[1] : $sanitized_color[ $keys[1] ]; + + $sanitized_color[ $keys[2] ] = $sanitized_color[ $keys[2] ] < $mins[2] ? $mins[2] : $sanitized_color[ $keys[2] ]; + $sanitized_color[ $keys[2] ] = $sanitized_color[ $keys[2] ] > $maxs[2] ? $maxs[2] : $sanitized_color[ $keys[2] ]; + + if ( isset( $color['a'] ) ) { + $sanitized_color['a'] = isset( $color['a'] ) ? filter_var( $color['a'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : 1; + $sanitized_color['a'] = $sanitized_color['a'] < 0 ? 0 : $sanitized_color['a']; + $sanitized_color['a'] = $sanitized_color['a'] > 1 ? 1 : $sanitized_color['a']; + } + + return $sanitized_color; + + } + + /** + * Sanitize color string. + * + * @static + * @access public + * @since 1.0 + * + * @param string $value The color. + * @return string + */ + public static function sanitize_color_string( $value ) { + + /** + * This pattern will check and match 3/6/8-character hex, rgb, rgba, hsl, hsla, hsv, and hsva colors. + * + * RGB regex: + * + * @link https://stackoverflow.com/questions/9585973/javascript-regular-expression-for-rgb-values#answer-9586045 + * + * For testing it, you can use these links: + * + * @link https://regex101.com/ + * @link https://regexr.com/ + * @link https://www.regextester.com/ + * + * How to test it? + * + * Paste the following code to the test field (of course without the asterisks and spaces in front of them): + * rgba(255, 255, 0, 0.9) + * rgb(255, 255, 0) + * #ff0 + * #ffff00 + * hsl(150, 25%, 25%) + * hsla(250, 25%, 25%, 0.7) + * hsv(125, 15%, 30%) + * hsva(125, 15%, 30%, 0.5) + * + * And then paste the regex `$pattern` below (without the single quote's start and end) to the regular expression box. + * Set the flag to use "global" and "multiline". + */ + $pattern = '/^(\#[\da-f]{3}|\#[\da-f]{6}|\#[\da-f]{8}|rgba\(((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*,\s*){2}((\d{1,2}|1\d\d|2([0-4]\d|5[0-5]))\s*)(,\s*(0\.\d+|1))\)|rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)|hsla\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)(,\s*(0\.\d+|1))\)|hsl\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)\)|hsva\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)(,\s*(0\.\d+|1))\)|hsv\(\s*((\d{1,2}|[1-2]\d{2}|3([0-5]\d|60)))\s*,\s*((\d{1,2}|100)\s*%)\s*,\s*((\d{1,2}|100)\s*%)\))$/'; + + preg_match( $pattern, $value, $matches ); + + // Return the 1st match found. + if ( isset( $matches[0] ) ) { + if ( is_string( $matches[0] ) ) { + return $matches[0]; + } + + if ( is_array( $matches[0] ) && isset( $matches[0][0] ) ) { + return $matches[0][0]; + } + } + + // If no match was found, return an empty string. + return ''; + } + + /** + * Enqueue styles & scripts on 'customize_preview_init' action. + * + * @since 4.0.0 + * @access public + */ + public function enqueue_customize_preview_scripts() { + + wp_enqueue_script( 'kirki-react-colorful', URL::get_from_path( dirname( dirname( __DIR__ ) ) ) . '/dist/preview.js', [ 'wp-hooks', 'customize-preview' ], $this->control_class::$control_ver, true ); + + } + + /** + * Add output control class for react colorful control. + * + * @since 4.0.0 + * @access public + * + * @param array $control_classes The existing control classes. + * @return array + */ + public function output_control_classnames( $control_classes ) { + + $control_classes['kirki-react-colorful'] = '\Kirki\Field\CSS\ReactColorful'; + + return $control_classes; + + } + +} diff --git a/packages/kirki-framework/control-react-colorful/src/control.scss b/packages/kirki-framework/control-react-colorful/src/control.scss new file mode 100644 index 000000000..e4e9c6ed2 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/control.scss @@ -0,0 +1,304 @@ +// React colorful control. +.customize-control-kirki-react-colorful { + .kirki-control-form { + position: relative; + box-sizing: border-box; + } + + .kirki-control-form * { + box-sizing: border-box; + } + + .kirki-control-cols { + display: flex; + align-items: flex-start; + } + + .kirki-control-left-col { + padding-right: 30px; + width: 90%; + width: calc(100% - 35px); + } + + .kirki-control-right-col { + display: flex; + justify-content: flex-end; + width: 35px; + } + + .use-hue-mode { + .react-colorful { + height: auto; + } + + .react-colorful__saturation { + display: none; + } + + .react-colorful__last-control { + border-radius: 4px; + } + + input.kirki-color-input { + padding-left: 8px; + padding-left: 8px; + } + } + + .kirki-trigger-circle-wrapper { + position: relative; + display: flex; + align-items: center; + justify-content: center; + padding: 3px; + width: 33px; + height: 33px; + border-radius: 50%; + border: 1px solid #ccc; + } + + .kirki-trigger-circle { + position: relative; + padding: 0; + display: block; + width: 25px; + height: 25px; + background-size: 10px; + border: none; + border-radius: 50%; + cursor: pointer; + + .kirki-color-preview { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + } + + .colorPickerContainer { + position: absolute; + top: 35px; + right: 0; + margin-top: 5px; + width: 100%; + padding: 15px; + background-color: #fff; + border-radius: 6px; + box-shadow: rgba(0, 0, 0, 0.09) 0 12px 15px 0; + z-index: 9999; + + opacity: 0; + visibility: hidden; + transition: all 0.2s; + transition-property: opacity, visibility; // Yes, only opacity and visibility please. + + &.is-open { + opacity: 1; + visibility: visible; + transition: all 0.2s ease 10ms; // When we open the picker popup, the top offset is changed, so we need to wait a bit. + transition-property: opacity, visibility; // Yes, only opacity and visibility please. + } + } + + .react-colorful { + width: 100%; + border-radius: 4px; + } + + .react-colorful__saturation { + border-radius: 4px 4px 0 0; + } + + .react-colorful__last-control { + border-radius: 0 0 4px 4px; + } + + .react-colorful__pointer { + width: 20px; + height: 20px; + } + + .kirki-color-input-wrapper { + margin-top: 15px; + } + + .kirki-color-input-control { + position: relative; + display: flex; + align-items: center; + width: 100%; + } + + input.kirki-color-input { + display: block; + position: relative; + padding-left: 32px; + padding-right: 8px; + width: 100%; + height: 30px; + line-height: 30px; + color: #333; + border: 1px solid #ccc; + border-radius: 4px; + z-index: 1; + } + + .kirki-color-input:focus, + .kirki-color-input:active { + box-shadow: 0 0 0 1px #2271b1; + outline: none; + border-color: #2271b1; + } + + .kirki-color-preview-wrapper { + position: absolute; + left: 6px; + width: 22px; + height: 22px; + background-repeat: repeat; + background-size: 8px; + border-radius: 50%; + border: 1px solid #ddd; + border: 2px solid #fff; + -webkit-box-shadow: 0px 0px 0px 1px #ddd; + box-shadow: 0px 0px 0px 1px #ddd; + z-index: 2; + } + + .kirki-color-preview, + .kirki-control-reset { + position: absolute; + padding: 0; + background-color: transparent; + cursor: pointer; + } + + .kirki-color-preview { + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + border-width: 0; + } + + .kirki-control-reset { + display: flex; + align-items: center; + justify-content: center; + top: 8px; + right: 35px; + width: 17px; + height: 17px; + border-radius: 50%; + border-width: 0; + z-index: 3; + } + + .kirki-control-reset:hover i { + color: #f00; + transform: rotate(-45deg); + } + + .kirki-control-reset i { + font-size: 12px; + width: auto; + height: auto; + transform: rotate(45deg); + transition: transform 0.2s; + } + + .kirki-color-swatches { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; + } + + .kirki-color-swatch { + position: relative; + display: block; + padding: 0; + width: 25px; + height: 25px; + border-radius: 50%; + border: 2px solid #fff; + cursor: pointer; + transform: scale(1, 1); + transition: transform 0.2s; + -webkit-box-shadow: 0px 0px 0px 1px #ddd; + box-shadow: 0px 0px 0px 1px #ddd; + } + + .kirki-color-swatch:active, + .kirki-color-swatch:focus { + outline: none; + } + + .kirki-color-swatch:hover, + .kirki-color-swatch:focus { + transform: scale(1.1, 1.1); + } + + .kirki-label-tooltip { + position: absolute; + bottom: 45px; + left: -8px; + padding: 7px 10px 3px; // The 4px of bottom side is handled by label / description's margin-bottom. + width: auto; // just for fallback for max-content. + width: max-content; + max-width: 100px; + color: #fff; + background-color: rgba(0, 0, 0, 0.7); + border-radius: 4px; + opacity: 0; + visibility: hidden; + transition: all 0.2s; + + &::before { + content: ""; + position: absolute; + bottom: -8px; + left: 19px; + border-width: 8px 7px 0 7px; + border-style: solid; + border-color: rgba(0, 0, 0, 0.7) transparent transparent transparent; + } + + .customize-control-title { + line-height: 1.2; + } + } + + .kirki-trigger-circle-wrapper { + &:hover ~ .kirki-label-tooltip { + opacity: 1; + visibility: visible; + } + } + + &[data-kirki-parent-control-type="kirki-multicolor"] { + margin-right: 8px; + margin-bottom: 20px; + padding-right: 0; + width: 35px; + + .kirki-control-reset { + top: -16px; + right: 8px; + } + } + + &[data-kirki-parent-control-type="kirki-typography"] { + .colorPickerContainer { + top: 55px; + } + + .kirki-control-reset { + top: 30px; + right: auto; + left: 35px; + } + } +} diff --git a/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulCIrcle.js b/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulCIrcle.js new file mode 100644 index 000000000..844704eed --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulCIrcle.js @@ -0,0 +1,50 @@ +import { useState, useEffect } from "react"; +import reactCSS from "reactcss"; + +const KirkiReactColorfulCircle = (props) => { + const { color = "" } = props; + const [value, setValue] = useState(() => color); + + // Update the local state when `color` property value is changed. + useEffect(() => { + // We don't need to convert the color since it's using the customizer value. + setValue(color); + }, [color]); + + const pickersWithAlpha = [ + "RgbaColorPicker", + "RgbaStringColorPicker", + "HslaColorPicker", + "HslaStringColorPicker", + "HsvaColorPicker", + "HsvaStringColorPicker", + ]; + + const styles = reactCSS({ + default: { + triggerButton: { + backgroundImage: pickersWithAlpha.includes(props.pickerComponent) + ? 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==")' + : "none", + }, + colorPreview: { + backgroundColor: value ? value : "transparent", + }, + }, + }); + + return ( +
+ +
+ ); +}; + +export default KirkiReactColorfulCircle; diff --git a/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulInput.js b/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulInput.js new file mode 100644 index 000000000..2d5ccc779 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulInput.js @@ -0,0 +1,93 @@ +import { useState, useEffect, useCallback } from "react"; +import reactCSS from "reactcss"; + +const KirkiReactColorfulInput = (props) => { + const { onChange, color = "" } = props; + const [value, setValue] = useState(() => color); + + const handleChange = useCallback( + (e) => { + let val = e.target.value; + + if (2 === val.length) { + if (!val.includes("#") && !val.includes("rg") && !val.includes("hs")) { + val = "#" + val; + } + } else if (3 === val.length || 6 === val.length) { + if (!val.includes("#") && !val.includes("rg") && !val.includes("hs")) { + val = "#" + val; + } + } + + val = val.toLowerCase(); + + // Thank you: https://regexr.com/39cgj + const pattern = new RegExp( + /(?:#|0x)(?:[a-f0-9]{3}|[a-f0-9]{6}|[a-f0-9]{8})\b|(?:rgb|hsl)a?\([^\)]*\)/ + ); + + if (pattern.test(val)) { + onChange(val); // Run onChange handler passed by `KirkiReactColorfulForm` component. + } + + setValue(val); + }, + [onChange] + ); + + // Update the local state when `color` property value is changed. + useEffect(() => { + // We don't need to convert the color since it's already handled in parent component. + setValue(color); + }, [color]); + + const pickersWithAlpha = [ + "RgbaColorPicker", + "RgbaStringColorPicker", + "HslaColorPicker", + "HslaStringColorPicker", + "HsvaColorPicker", + "HsvaStringColorPicker", + ]; + + const styles = reactCSS({ + default: { + colorPreviewWrapper: { + backgroundImage: pickersWithAlpha.includes(props.pickerComponent) + ? 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==")' + : "none", + }, + colorPreview: { + backgroundColor: value, + }, + }, + }); + + return ( +
+
+ {!props.useHueMode && ( +
+ +
+ )} + +
+
+ ); +}; + +export default KirkiReactColorfulInput; diff --git a/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulSwatches.js b/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulSwatches.js new file mode 100644 index 000000000..2d48e46a4 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/components/KirkiReactColorfulSwatches.js @@ -0,0 +1,22 @@ +const KirkiReactColorfulSwatches = ({ colors, onClick }) => { + return ( +
+ {colors.map((clr, index) => { + const color = clr && clr.color ? clr.color : clr; + + return ( + + ); + })} +
+ ); +}; + +export default KirkiReactColorfulSwatches; diff --git a/packages/kirki-framework/control-react-colorful/src/js/hooks/useClickOutside.js b/packages/kirki-framework/control-react-colorful/src/js/hooks/useClickOutside.js new file mode 100644 index 000000000..270a286b0 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/hooks/useClickOutside.js @@ -0,0 +1,45 @@ +import { useEffect } from "react"; + +/** + * Code was taken and then modified from https://codesandbox.io/s/opmco?file=/src/useClickOutside.js:0-1192 + * It was improved version of https://usehooks.com/useOnClickOutside/ + */ +const useClickOutside = (pickerRef, resetRef, handler) => { + useEffect(() => { + let startedWhenMounted = false; + let startedInside = false; + + const listener = (event) => { + // Do nothing if `mousedown` or `touchstart` started either inside resetRef or pickerRef element + if (!startedWhenMounted || startedInside) return; + + // Do nothing if clicking resetRef's element or descendent elements + if (!resetRef.current || resetRef.current.contains(event.target)) return; + + // Do nothing if clicking pickerRef's element or descendent elements + if (!pickerRef.current || pickerRef.current.contains(event.target)) + return; + + handler(); + }; + + const validateEventStart = (event) => { + startedWhenMounted = resetRef.current && pickerRef.current; + startedInside = + (resetRef.current && resetRef.current.contains(event.target)) || + (pickerRef.current && pickerRef.current.contains(event.target)); + }; + + document.addEventListener("mousedown", validateEventStart); + document.addEventListener("touchstart", validateEventStart); + document.addEventListener("click", listener); + + return () => { + document.removeEventListener("mousedown", validateEventStart); + document.removeEventListener("touchstart", validateEventStart); + document.removeEventListener("click", listener); + }; + }, [resetRef, pickerRef, handler]); +}; + +export default useClickOutside; diff --git a/packages/kirki-framework/control-react-colorful/src/js/hooks/useFocusOutside.js b/packages/kirki-framework/control-react-colorful/src/js/hooks/useFocusOutside.js new file mode 100644 index 000000000..867e4e807 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/hooks/useFocusOutside.js @@ -0,0 +1,23 @@ +import { useEffect } from "react"; + +const useFocusOutside = (ref, handler) => { + useEffect(() => { + const listener = (e) => { + // Do nothing if the component hasn't been mounted. + if (!ref.current) return; + + // Do nothing if the focused element is inside the ref or the ref it self. + if (ref.current.contains(e.target)) return; + + handler(); + }; + + document.addEventListener("focus", listener, true); + + return () => { + document.removeEventListener("focus", listener, true); + }; + }, [ref, handler]); +}; + +export default useFocusOutside; diff --git a/packages/kirki-framework/control-react-colorful/src/js/hooks/useWindowResize.js b/packages/kirki-framework/control-react-colorful/src/js/hooks/useWindowResize.js new file mode 100644 index 000000000..2b137c936 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/hooks/useWindowResize.js @@ -0,0 +1,17 @@ +import { useEffect } from "react"; + +const useWindowResize = (handler) => { + useEffect(() => { + const listener = (e) => { + handler(); + }; + + window.addEventListener("resize", listener, true); + + return () => { + window.removeEventListener("resize", listener, true); + }; + }, [handler]); +}; + +export default useWindowResize; diff --git a/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForCustomizer.js b/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForCustomizer.js new file mode 100644 index 000000000..bfd1b1231 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForCustomizer.js @@ -0,0 +1,138 @@ +import { colord } from "colord"; + +/** + * Convert the value for the customizer. + * + * @param {string|Object} value The value to be converted. + * @param {string} pickerComponent The picker component name. + * + * @returns {string} The converted value. + */ +const convertColorForCustomizer = (value, pickerComponent, formComponent) => { + let rgba; + let hsv; + let hsva; + let convertedValue; + + switch (pickerComponent) { + /** + * The HexColorPicker is used by these condition: + * 1. When formComponent is defined with HexColorPicker as the value. + * 2. When formComponent is not defined but the "alpha" choice is not set or set to false (the old way). + */ + case 'HexColorPicker': + convertedValue = 'string' === typeof value && value.includes('#') ? value : colord(value).toHex(); + break; + + case 'RgbColorPicker': + convertedValue = colord(value).toRgb(); + delete convertedValue.a; + break; + + case 'RgbStringColorPicker': + convertedValue = + "string" === typeof value && value.includes("rgb(") + ? value + : colord(value).toRgbString(); + break; + + case 'RgbaColorPicker': + rgba = colord(value).toRgb(); + convertedValue = rgba; + break; + + /** + * The RgbaStringColorPicker is used by these condition: + * 1. When formComponent is defined with RgbaColorPicker as the value. + * 2. When formComponent is not defined but the "alpha" choice is set to true. + */ + case 'RgbaStringColorPicker': + rgba = colord(value).toRgb(); + + if (rgba.a < 1) { + convertedValue = + "string" === typeof value && value.includes("rgba") + ? value + : colord(value).toRgbString(); + } else { + // When it uses the 2nd condition above, then the expected value is "hex". + if (!formComponent) { + convertedValue = + "string" === typeof value && value.includes("#") + ? value + : colord(value).toHex(); + } else { + convertedValue = colord(value).toRgbString(); + + // Force to set the alpha channel value. + if (convertedValue.includes('rgb') && !convertedValue.includes('rgba')) { + convertedValue = convertedValue.replace('rgb', 'rgba'); + convertedValue = convertedValue.replace(')', ', 1)'); + } + } + } + + break; + + case 'HslColorPicker': + convertedValue = colord(value).toHsl(); + delete convertedValue.a; + break; + + case 'HslStringColorPicker': + convertedValue = + "string" === typeof value && value.includes("hsl(") + ? value + : colord(value).toHslString(); + break; + + case 'HslaColorPicker': + convertedValue = colord(value).toHsl(); + break; + + case 'HslaStringColorPicker': + convertedValue = colord(value).toHslString(); + + // Force to set the alpha channel value. + if (convertedValue.includes('hsl') && !convertedValue.includes('hsla')) { + convertedValue = convertedValue.replace('hsl', 'hsla'); + convertedValue = convertedValue.replace(')', ', 1)'); + } + + break; + + case 'HsvColorPicker': + convertedValue = colord(value).toHsv(); + delete convertedValue.a; + break; + + /** + * The colord library doesn't provide .toHsvString() method yet. + * This manual value-building will apply to "HsvStringColorPicker" and "HsvaStringColorPicker" stuff below. + */ + case 'HsvStringColorPicker': + hsv = colord(value).toHsv(); + convertedValue = 'hsv(' + hsv.h + ', ' + hsv.s + '%, ' + hsv.v + '%)'; + break; + + case 'HsvaColorPicker': + convertedValue = colord(value).toHsv(); + break; + + case 'HsvaStringColorPicker': + hsva = colord(value).toHsv(); + convertedValue = 'hsva(' + hsva.h + ', ' + hsva.s + '%, ' + hsva.v + '%, ' + hsva.a + ')'; + break; + + default: + convertedValue = + "string" === typeof value && value.includes("#") + ? value + : colord(value).toHex(); + break; + } + + return convertedValue; +}; + +export default convertColorForCustomizer; diff --git a/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForInput.js b/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForInput.js new file mode 100644 index 000000000..d4ac464d5 --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForInput.js @@ -0,0 +1,182 @@ +import { colord } from "colord"; + +/** + * Convert the value for the color input. + * + * @param {string|Object} value The value to be converted. + * @param {string} pickerComponent The picker component name. + * + * @returns {string} The converted value. + */ +const convertColorForInput = (value, pickerComponent, formComponent) => { + let rgba; + let hsv; + let hsva; + let convertedValue; + + switch (pickerComponent) { + /** + * The HexColorPicker is used by these condition: + * 1. When formComponent is defined with HexColorPicker as the value. + * 2. When formComponent is not defined but the "alpha" choice is not set or set to false (the old way). + */ + case "HexColorPicker": + convertedValue = + "string" === typeof value && value.includes("#") + ? value + : colord(value).toHex(); + break; + + case "RgbColorPicker": + convertedValue = + "string" === typeof value && value.includes("rgb(") + ? value + : colord(value).toRgbString(); + break; + + case "RgbStringColorPicker": + convertedValue = + "string" === typeof value && value.includes("rgba") + ? value + : colord(value).toRgbString(); + break; + + case "RgbaColorPicker": + rgba = colord(value).toRgb(); + + if (rgba.a < 1) { + convertedValue = + "string" === typeof value && value.includes("rgba") + ? value + : colord(value).toRgbString(); + } else { + convertedValue = colord(value).toRgbString(); + + // Force to set the alpha value. + if ( + convertedValue.includes("rgb") && + !convertedValue.includes("rgba") + ) { + convertedValue = convertedValue.replace("rgb", "rgba"); + convertedValue = convertedValue.replace(")", ", 1)"); + } + } + + break; + + /** + * The RgbaStringColorPicker is used by these condition: + * 1. When formComponent is defined with RgbaColorPicker as the value. + * 2. When formComponent is not defined but the "alpha" choice is set to true. + */ + case "RgbaStringColorPicker": + rgba = colord(value).toRgb(); + + // When it uses the 2nd condition above, then the expected value is "hex". + if (rgba.a == 1 && !formComponent) { + convertedValue = + "string" === typeof value && value.includes("#") + ? value + : colord(value).toHex(); + } else { + convertedValue = colord(value).toRgbString(); + + // Force to set the alpha value. + if ( + convertedValue.includes("rgb") && + !convertedValue.includes("rgba") + ) { + convertedValue = convertedValue.replace("rgb", "rgba"); + convertedValue = convertedValue.replace(")", ", 1)"); + } + } + + break; + + case "HslColorPicker": + convertedValue = + "string" === typeof value && value.includes("hsl(") + ? value + : colord(value).toHslString(); + break; + + case "HslStringColorPicker": + convertedValue = + "string" === typeof value && value.includes("hsl(") + ? value + : colord(value).toHslString(); + break; + + case "HslaColorPicker": + convertedValue = colord(value).toHslString(); + + // Force to set the alpha value. + if (convertedValue.includes("hsl") && !convertedValue.includes("hsla")) { + convertedValue = convertedValue.replace("hsl", "hsla"); + convertedValue = convertedValue.replace(")", ", 1)"); + } + + break; + + case "HslaStringColorPicker": + convertedValue = colord(value).toHslString(); + + // Force to set the alpha value. + if (convertedValue.includes("hsl") && !convertedValue.includes("hsla")) { + convertedValue = convertedValue.replace("hsl", "hsla"); + convertedValue = convertedValue.replace(")", ", 1)"); + } + + break; + + /** + * The colord library doesn't provide .toHsvString() method yet. + * This manual value-building will apply to "hsv" and "hsva" stuff below. + */ + case "HsvColorPicker": + hsv = colord(value).toHsv(); + convertedValue = "hsv(" + hsv.h + ", " + hsv.s + "%, " + hsv.v + "%)"; + break; + + case "HsvStringColorPicker": + hsv = colord(value).toHsv(); + convertedValue = "hsv(" + hsv.h + ", " + hsv.s + "%, " + hsv.v + "%)"; + break; + + case "HsvaColorPicker": + hsva = colord(value).toHsv(); + convertedValue = + "hsva(" + + hsva.h + + ", " + + hsva.s + + "%, " + + hsva.v + + "%, " + + hsva.a + + ")"; + break; + + case "HsvaStringColorPicker": + hsva = colord(value).toHsv(); + convertedValue = + "hsva(" + + hsva.h + + ", " + + hsva.s + + "%, " + + hsva.v + + "%, " + + hsva.a + + ")"; + break; + + default: + convertedValue = colord(value).toHex(); + break; + } + + return convertedValue; +}; + +export default convertColorForInput; diff --git a/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForPicker.js b/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForPicker.js new file mode 100644 index 000000000..7eef9f4bd --- /dev/null +++ b/packages/kirki-framework/control-react-colorful/src/js/utils/convertColorForPicker.js @@ -0,0 +1,97 @@ +import { colord } from "colord"; + +/** + * Convert the value for the color picker. + * + * @param {string|Object} value The value to be converted. + * @param {string} pickerComponent The picker component name. + * + * @returns {string|Object} The converted value. + */ +const convertColorForPicker = (value, pickerComponent) => { + let convertedValue; + + switch (pickerComponent) { + case 'HexColorPicker': + convertedValue = colord(value).toHex(); + break; + + case 'RgbColorPicker': + convertedValue = colord(value).toRgb(); + delete convertedValue.a; + break; + + case 'RgbStringColorPicker': + convertedValue = colord(value).toRgbString(); + break; + + case 'RgbaColorPicker': + convertedValue = colord(value).toRgb(); + break; + + case 'RgbaStringColorPicker': + convertedValue = colord(value).toRgbString(); + + // Force to set the alpha channel value. + if (convertedValue.includes('rgb') && !convertedValue.includes('rgba')) { + convertedValue = convertedValue.replace('rgb', 'rgba'); + convertedValue = convertedValue.replace(')', ', 1)'); + } + + break; + + case 'HslColorPicker': + convertedValue = colord(value).toHsl(); + delete convertedValue.a; + break; + + case 'HslStringColorPicker': + convertedValue = colord(value).toHslString(); + break; + + case 'HslaColorPicker': + convertedValue = colord(value).toHsl(); + break; + + case 'HslaStringColorPicker': + convertedValue = colord(value).toHslString(); + + // Force to set the alpha channel value. + if (convertedValue.includes('hsl') && !convertedValue.includes('hsla')) { + convertedValue = convertedValue.replace('hsl', 'hsla'); + convertedValue = convertedValue.replace(')', ', 1)'); + } + + break; + + case 'HsvColorPicker': + convertedValue = colord(value).toHsv(); + delete convertedValue.a; + break; + + case 'HsvStringColorPicker': + const hsv = colord(value).toHsv(); + convertedValue = 'hsv(' + hsv.h + ', ' + hsv.s + '%, ' + hsv.v + '%)'; + + break; + + case 'HsvaColorPicker': + convertedValue = colord(value).toHsv(); + break; + + case 'HsvaStringColorPicker': + // colord library doesn't provide .toHsvString() method yet. + const hsva = colord(value).toHsv(); + convertedValue = 'hsva(' + hsva.h + ', ' + hsva.s + '%, ' + hsva.v + '%, ' + hsva.a + ')'; + + break; + + default: + convertedValue = colord(value).toHex(); + break; + } + + return convertedValue; +}; + +export default convertColorForPicker; diff --git a/packages/kirki-framework/control-react-colorful/src/js/utils/util.js b/packages/kirki-framework/control-react-colorful/src/js/utils/util.js new file mode 100644 index 000000000..e69de29bb