angelovcom.net

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

compose.js (134203B)


      1 this["wp"] = this["wp"] || {}; this["wp"]["compose"] =
      2 /******/ (function(modules) { // webpackBootstrap
      3 /******/ 	// The module cache
      4 /******/ 	var installedModules = {};
      5 /******/
      6 /******/ 	// The require function
      7 /******/ 	function __webpack_require__(moduleId) {
      8 /******/
      9 /******/ 		// Check if module is in cache
     10 /******/ 		if(installedModules[moduleId]) {
     11 /******/ 			return installedModules[moduleId].exports;
     12 /******/ 		}
     13 /******/ 		// Create a new module (and put it into the cache)
     14 /******/ 		var module = installedModules[moduleId] = {
     15 /******/ 			i: moduleId,
     16 /******/ 			l: false,
     17 /******/ 			exports: {}
     18 /******/ 		};
     19 /******/
     20 /******/ 		// Execute the module function
     21 /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
     22 /******/
     23 /******/ 		// Flag the module as loaded
     24 /******/ 		module.l = true;
     25 /******/
     26 /******/ 		// Return the exports of the module
     27 /******/ 		return module.exports;
     28 /******/ 	}
     29 /******/
     30 /******/
     31 /******/ 	// expose the modules object (__webpack_modules__)
     32 /******/ 	__webpack_require__.m = modules;
     33 /******/
     34 /******/ 	// expose the module cache
     35 /******/ 	__webpack_require__.c = installedModules;
     36 /******/
     37 /******/ 	// define getter function for harmony exports
     38 /******/ 	__webpack_require__.d = function(exports, name, getter) {
     39 /******/ 		if(!__webpack_require__.o(exports, name)) {
     40 /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
     41 /******/ 		}
     42 /******/ 	};
     43 /******/
     44 /******/ 	// define __esModule on exports
     45 /******/ 	__webpack_require__.r = function(exports) {
     46 /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
     47 /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
     48 /******/ 		}
     49 /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
     50 /******/ 	};
     51 /******/
     52 /******/ 	// create a fake namespace object
     53 /******/ 	// mode & 1: value is a module id, require it
     54 /******/ 	// mode & 2: merge all properties of value into the ns
     55 /******/ 	// mode & 4: return value when already ns object
     56 /******/ 	// mode & 8|1: behave like require
     57 /******/ 	__webpack_require__.t = function(value, mode) {
     58 /******/ 		if(mode & 1) value = __webpack_require__(value);
     59 /******/ 		if(mode & 8) return value;
     60 /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
     61 /******/ 		var ns = Object.create(null);
     62 /******/ 		__webpack_require__.r(ns);
     63 /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
     64 /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
     65 /******/ 		return ns;
     66 /******/ 	};
     67 /******/
     68 /******/ 	// getDefaultExport function for compatibility with non-harmony modules
     69 /******/ 	__webpack_require__.n = function(module) {
     70 /******/ 		var getter = module && module.__esModule ?
     71 /******/ 			function getDefault() { return module['default']; } :
     72 /******/ 			function getModuleExports() { return module; };
     73 /******/ 		__webpack_require__.d(getter, 'a', getter);
     74 /******/ 		return getter;
     75 /******/ 	};
     76 /******/
     77 /******/ 	// Object.prototype.hasOwnProperty.call
     78 /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
     79 /******/
     80 /******/ 	// __webpack_public_path__
     81 /******/ 	__webpack_require__.p = "";
     82 /******/
     83 /******/
     84 /******/ 	// Load entry module and return exports
     85 /******/ 	return __webpack_require__(__webpack_require__.s = "PD33");
     86 /******/ })
     87 /************************************************************************/
     88 /******/ ({
     89 
     90 /***/ "1CF3":
     91 /***/ (function(module, exports) {
     92 
     93 (function() { module.exports = window["wp"]["dom"]; }());
     94 
     95 /***/ }),
     96 
     97 /***/ "GRId":
     98 /***/ (function(module, exports) {
     99 
    100 (function() { module.exports = window["wp"]["element"]; }());
    101 
    102 /***/ }),
    103 
    104 /***/ "NMb1":
    105 /***/ (function(module, exports) {
    106 
    107 (function() { module.exports = window["wp"]["deprecated"]; }());
    108 
    109 /***/ }),
    110 
    111 /***/ "PD33":
    112 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    113 
    114 "use strict";
    115 // ESM COMPAT FLAG
    116 __webpack_require__.r(__webpack_exports__);
    117 
    118 // EXPORTS
    119 __webpack_require__.d(__webpack_exports__, "createHigherOrderComponent", function() { return /* reexport */ create_higher_order_component; });
    120 __webpack_require__.d(__webpack_exports__, "compose", function() { return /* reexport */ compose; });
    121 __webpack_require__.d(__webpack_exports__, "ifCondition", function() { return /* reexport */ if_condition; });
    122 __webpack_require__.d(__webpack_exports__, "pure", function() { return /* reexport */ higher_order_pure; });
    123 __webpack_require__.d(__webpack_exports__, "withGlobalEvents", function() { return /* reexport */ withGlobalEvents; });
    124 __webpack_require__.d(__webpack_exports__, "withInstanceId", function() { return /* reexport */ with_instance_id; });
    125 __webpack_require__.d(__webpack_exports__, "withSafeTimeout", function() { return /* reexport */ with_safe_timeout; });
    126 __webpack_require__.d(__webpack_exports__, "withState", function() { return /* reexport */ withState; });
    127 __webpack_require__.d(__webpack_exports__, "useConstrainedTabbing", function() { return /* reexport */ use_constrained_tabbing; });
    128 __webpack_require__.d(__webpack_exports__, "useCopyOnClick", function() { return /* reexport */ useCopyOnClick; });
    129 __webpack_require__.d(__webpack_exports__, "useCopyToClipboard", function() { return /* reexport */ useCopyToClipboard; });
    130 __webpack_require__.d(__webpack_exports__, "__experimentalUseDialog", function() { return /* reexport */ use_dialog; });
    131 __webpack_require__.d(__webpack_exports__, "__experimentalUseDragging", function() { return /* reexport */ useDragging; });
    132 __webpack_require__.d(__webpack_exports__, "useFocusOnMount", function() { return /* reexport */ useFocusOnMount; });
    133 __webpack_require__.d(__webpack_exports__, "__experimentalUseFocusOutside", function() { return /* reexport */ useFocusOutside; });
    134 __webpack_require__.d(__webpack_exports__, "useFocusReturn", function() { return /* reexport */ use_focus_return; });
    135 __webpack_require__.d(__webpack_exports__, "useInstanceId", function() { return /* reexport */ useInstanceId; });
    136 __webpack_require__.d(__webpack_exports__, "useIsomorphicLayoutEffect", function() { return /* reexport */ use_isomorphic_layout_effect; });
    137 __webpack_require__.d(__webpack_exports__, "useKeyboardShortcut", function() { return /* reexport */ use_keyboard_shortcut; });
    138 __webpack_require__.d(__webpack_exports__, "useMediaQuery", function() { return /* reexport */ useMediaQuery; });
    139 __webpack_require__.d(__webpack_exports__, "usePrevious", function() { return /* reexport */ usePrevious; });
    140 __webpack_require__.d(__webpack_exports__, "useReducedMotion", function() { return /* reexport */ use_reduced_motion; });
    141 __webpack_require__.d(__webpack_exports__, "useViewportMatch", function() { return /* reexport */ use_viewport_match; });
    142 __webpack_require__.d(__webpack_exports__, "useResizeObserver", function() { return /* reexport */ use_resize_observer; });
    143 __webpack_require__.d(__webpack_exports__, "useAsyncList", function() { return /* reexport */ use_async_list; });
    144 __webpack_require__.d(__webpack_exports__, "useWarnOnChange", function() { return /* reexport */ use_warn_on_change; });
    145 __webpack_require__.d(__webpack_exports__, "useDebounce", function() { return /* reexport */ useDebounce; });
    146 __webpack_require__.d(__webpack_exports__, "useThrottle", function() { return /* reexport */ useThrottle; });
    147 __webpack_require__.d(__webpack_exports__, "useMergeRefs", function() { return /* reexport */ useMergeRefs; });
    148 __webpack_require__.d(__webpack_exports__, "useRefEffect", function() { return /* reexport */ useRefEffect; });
    149 __webpack_require__.d(__webpack_exports__, "__experimentalUseDropZone", function() { return /* reexport */ useDropZone; });
    150 
    151 // EXTERNAL MODULE: external "lodash"
    152 var external_lodash_ = __webpack_require__("YLtl");
    153 
    154 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/utils/create-higher-order-component/index.js
    155 /**
    156  * External dependencies
    157  */
    158  // eslint-disable-next-line no-restricted-imports
    159 
    160 /**
    161  * Given a function mapping a component to an enhanced component and modifier
    162  * name, returns the enhanced component augmented with a generated displayName.
    163  *
    164  * @param mapComponentToEnhancedComponent Function mapping component to enhanced component.
    165  * @param modifierName                    Seed name from which to generated display name.
    166  *
    167  * @return Component class with generated display name assigned.
    168  */
    169 function createHigherOrderComponent(mapComponent, modifierName) {
    170   return Inner => {
    171     const Outer = mapComponent(Inner);
    172     const displayName = Inner.displayName || Inner.name || 'Component';
    173     Outer.displayName = `${Object(external_lodash_["upperFirst"])(Object(external_lodash_["camelCase"])(modifierName))}(${displayName})`;
    174     return Outer;
    175   };
    176 }
    177 
    178 /* harmony default export */ var create_higher_order_component = (createHigherOrderComponent);
    179 
    180 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/compose.js
    181 /**
    182  * External dependencies
    183  */
    184 
    185 /**
    186  * Composes multiple higher-order components into a single higher-order component. Performs right-to-left function
    187  * composition, where each successive invocation is supplied the return value of the previous.
    188  *
    189  * @param {...Function} hocs The HOC functions to invoke.
    190  *
    191  * @return {Function} Returns the new composite function.
    192  */
    193 
    194 /* harmony default export */ var compose = (external_lodash_["flowRight"]);
    195 
    196 // EXTERNAL MODULE: external ["wp","element"]
    197 var external_wp_element_ = __webpack_require__("GRId");
    198 
    199 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/if-condition/index.js
    200 
    201 
    202 /**
    203  * Internal dependencies
    204  */
    205  // eslint-disable-next-line no-duplicate-imports
    206 
    207 /**
    208  * Higher-order component creator, creating a new component which renders if
    209  * the given condition is satisfied or with the given optional prop name.
    210  *
    211  * @example
    212  * ```ts
    213  * type Props = { foo: string };
    214  * const Component = ( props: Props ) => <div>{ props.foo }</div>;
    215  * const ConditionalComponent = ifCondition( ( props: Props ) => props.foo.length !== 0 )( Component );
    216  * <ConditionalComponent foo="" />; // => null
    217  * <ConditionalComponent foo="bar" />; // => <div>bar</div>;
    218  * ```
    219  *
    220  * @param predicate Function to test condition.
    221  *
    222  * @return Higher-order component.
    223  */
    224 const ifCondition = predicate => create_higher_order_component(WrappedComponent => props => {
    225   if (!predicate(props)) {
    226     return null;
    227   }
    228 
    229   return Object(external_wp_element_["createElement"])(WrappedComponent, props);
    230 }, 'ifCondition');
    231 
    232 /* harmony default export */ var if_condition = (ifCondition);
    233 
    234 // EXTERNAL MODULE: external ["wp","isShallowEqual"]
    235 var external_wp_isShallowEqual_ = __webpack_require__("rl8x");
    236 var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_);
    237 
    238 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/pure/index.js
    239 
    240 
    241 /**
    242  * WordPress dependencies
    243  */
    244 
    245 
    246 /**
    247  * Internal dependencies
    248  */
    249 
    250  // eslint-disable-next-line no-duplicate-imports
    251 
    252 /**
    253  * Given a component returns the enhanced component augmented with a component
    254  * only rerendering when its props/state change
    255  */
    256 const pure = create_higher_order_component(Wrapped => {
    257   if (Wrapped.prototype instanceof external_wp_element_["Component"]) {
    258     return class extends Wrapped {
    259       shouldComponentUpdate(nextProps, nextState) {
    260         return !external_wp_isShallowEqual_default()(nextProps, this.props) || !external_wp_isShallowEqual_default()(nextState, this.state);
    261       }
    262 
    263     };
    264   }
    265 
    266   return class extends external_wp_element_["Component"] {
    267     shouldComponentUpdate(nextProps) {
    268       return !external_wp_isShallowEqual_default()(nextProps, this.props);
    269     }
    270 
    271     render() {
    272       return Object(external_wp_element_["createElement"])(Wrapped, this.props);
    273     }
    274 
    275   };
    276 }, 'pure');
    277 /* harmony default export */ var higher_order_pure = (pure);
    278 
    279 // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
    280 var esm_extends = __webpack_require__("wx14");
    281 
    282 // EXTERNAL MODULE: external ["wp","deprecated"]
    283 var external_wp_deprecated_ = __webpack_require__("NMb1");
    284 var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_);
    285 
    286 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/with-global-events/listener.js
    287 /**
    288  * External dependencies
    289  */
    290 
    291 /**
    292  * Class responsible for orchestrating event handling on the global window,
    293  * binding a single event to be shared across all handling instances, and
    294  * removing the handler when no instances are listening for the event.
    295  */
    296 
    297 class listener_Listener {
    298   constructor() {
    299     this.listeners = {};
    300     this.handleEvent = this.handleEvent.bind(this);
    301   }
    302 
    303   add(eventType, instance) {
    304     if (!this.listeners[eventType]) {
    305       // Adding first listener for this type, so bind event.
    306       window.addEventListener(eventType, this.handleEvent);
    307       this.listeners[eventType] = [];
    308     }
    309 
    310     this.listeners[eventType].push(instance);
    311   }
    312 
    313   remove(eventType, instance) {
    314     this.listeners[eventType] = Object(external_lodash_["without"])(this.listeners[eventType], instance);
    315 
    316     if (!this.listeners[eventType].length) {
    317       // Removing last listener for this type, so unbind event.
    318       window.removeEventListener(eventType, this.handleEvent);
    319       delete this.listeners[eventType];
    320     }
    321   }
    322 
    323   handleEvent(event) {
    324     Object(external_lodash_["forEach"])(this.listeners[event.type], instance => {
    325       instance.handleEvent(event);
    326     });
    327   }
    328 
    329 }
    330 
    331 /* harmony default export */ var listener = (listener_Listener);
    332 
    333 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/with-global-events/index.js
    334 
    335 
    336 
    337 /**
    338  * External dependencies
    339  */
    340 
    341 /**
    342  * WordPress dependencies
    343  */
    344 
    345 
    346 
    347 /**
    348  * Internal dependencies
    349  */
    350 
    351 
    352 
    353 /**
    354  * Listener instance responsible for managing document event handling.
    355  *
    356  * @type {Listener}
    357  */
    358 
    359 const with_global_events_listener = new listener();
    360 /**
    361  * Higher-order component creator which, given an object of DOM event types and
    362  * values corresponding to a callback function name on the component, will
    363  * create or update a window event handler to invoke the callback when an event
    364  * occurs. On behalf of the consuming developer, the higher-order component
    365  * manages unbinding when the component unmounts, and binding at most a single
    366  * event handler for the entire application.
    367  *
    368  * @deprecated
    369  *
    370  * @param {Object<string,string>} eventTypesToHandlers Object with keys of DOM
    371  *                                                     event type, the value a
    372  *                                                     name of the function on
    373  *                                                     the original component's
    374  *                                                     instance which handles
    375  *                                                     the event.
    376  *
    377  * @return {Function} Higher-order component.
    378  */
    379 
    380 function withGlobalEvents(eventTypesToHandlers) {
    381   external_wp_deprecated_default()('wp.compose.withGlobalEvents', {
    382     since: '5.7',
    383     alternative: 'useEffect'
    384   });
    385   return create_higher_order_component(WrappedComponent => {
    386     class Wrapper extends external_wp_element_["Component"] {
    387       constructor() {
    388         super(...arguments);
    389         this.handleEvent = this.handleEvent.bind(this);
    390         this.handleRef = this.handleRef.bind(this);
    391       }
    392 
    393       componentDidMount() {
    394         Object(external_lodash_["forEach"])(eventTypesToHandlers, (handler, eventType) => {
    395           with_global_events_listener.add(eventType, this);
    396         });
    397       }
    398 
    399       componentWillUnmount() {
    400         Object(external_lodash_["forEach"])(eventTypesToHandlers, (handler, eventType) => {
    401           with_global_events_listener.remove(eventType, this);
    402         });
    403       }
    404 
    405       handleEvent(event) {
    406         const handler = eventTypesToHandlers[event.type];
    407 
    408         if (typeof this.wrappedRef[handler] === 'function') {
    409           this.wrappedRef[handler](event);
    410         }
    411       }
    412 
    413       handleRef(el) {
    414         this.wrappedRef = el; // Any component using `withGlobalEvents` that is not setting a `ref`
    415         // will cause `this.props.forwardedRef` to be `null`, so we need this
    416         // check.
    417 
    418         if (this.props.forwardedRef) {
    419           this.props.forwardedRef(el);
    420         }
    421       }
    422 
    423       render() {
    424         return Object(external_wp_element_["createElement"])(WrappedComponent, Object(esm_extends["a" /* default */])({}, this.props.ownProps, {
    425           ref: this.handleRef
    426         }));
    427       }
    428 
    429     }
    430 
    431     return Object(external_wp_element_["forwardRef"])((props, ref) => {
    432       return Object(external_wp_element_["createElement"])(Wrapper, {
    433         ownProps: props,
    434         forwardedRef: ref
    435       });
    436     });
    437   }, 'withGlobalEvents');
    438 }
    439 
    440 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-instance-id/index.js
    441 // Disable reason: Object and object are distinctly different types in TypeScript and we mean the lowercase object in thise case
    442 // but eslint wants to force us to use `Object`. See https://stackoverflow.com/questions/49464634/difference-between-object-and-object-in-typescript
    443 
    444 /* eslint-disable jsdoc/check-types */
    445 
    446 /**
    447  * WordPress dependencies
    448  */
    449 
    450 /**
    451  * @type {WeakMap<object, number>}
    452  */
    453 
    454 const instanceMap = new WeakMap();
    455 /**
    456  * Creates a new id for a given object.
    457  *
    458  * @param {object} object Object reference to create an id for.
    459  * @return {number} The instance id (index).
    460  */
    461 
    462 function createId(object) {
    463   const instances = instanceMap.get(object) || 0;
    464   instanceMap.set(object, instances + 1);
    465   return instances;
    466 }
    467 /**
    468  * Provides a unique instance ID.
    469  *
    470  * @param {object} object Object reference to create an id for.
    471  * @param {string} [prefix] Prefix for the unique id.
    472  * @param {string} [preferredId=''] Default ID to use.
    473  * @return {string | number} The unique instance id.
    474  */
    475 
    476 
    477 function useInstanceId(object, prefix, preferredId = '') {
    478   return Object(external_wp_element_["useMemo"])(() => {
    479     if (preferredId) return preferredId;
    480     const id = createId(object);
    481     return prefix ? `${prefix}-${id}` : id;
    482   }, [object]);
    483 }
    484 /* eslint-enable jsdoc/check-types */
    485 
    486 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/with-instance-id/index.js
    487 
    488 
    489 
    490 /**
    491  * External dependencies
    492  */
    493 // eslint-disable-next-line no-restricted-imports
    494 
    495 /**
    496  * Internal dependencies
    497  */
    498  // eslint-disable-next-line no-duplicate-imports
    499 
    500 
    501 /**
    502  * A Higher Order Component used to be provide a unique instance ID by
    503  * component.
    504  */
    505 
    506 const withInstanceId = create_higher_order_component(WrappedComponent => {
    507   return props => {
    508     const instanceId = useInstanceId(WrappedComponent);
    509     return Object(external_wp_element_["createElement"])(WrappedComponent, Object(esm_extends["a" /* default */])({}, props, {
    510       instanceId: instanceId
    511     }));
    512   };
    513 }, 'withInstanceId');
    514 /* harmony default export */ var with_instance_id = (withInstanceId);
    515 
    516 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/with-safe-timeout/index.js
    517 
    518 
    519 
    520 /**
    521  * External dependencies
    522  */
    523 
    524 /**
    525  * WordPress dependencies
    526  */
    527 
    528 
    529 /**
    530  * Internal dependencies
    531  */
    532 
    533 
    534 /**
    535  * A higher-order component used to provide and manage delayed function calls
    536  * that ought to be bound to a component's lifecycle.
    537  *
    538  * @param {WPComponent} OriginalComponent Component requiring setTimeout
    539  *
    540  * @return {WPComponent} Wrapped component.
    541  */
    542 
    543 const withSafeTimeout = create_higher_order_component(OriginalComponent => {
    544   return class WrappedComponent extends external_wp_element_["Component"] {
    545     constructor() {
    546       super(...arguments);
    547       this.timeouts = [];
    548       this.setTimeout = this.setTimeout.bind(this);
    549       this.clearTimeout = this.clearTimeout.bind(this);
    550     }
    551 
    552     componentWillUnmount() {
    553       this.timeouts.forEach(clearTimeout);
    554     }
    555 
    556     setTimeout(fn, delay) {
    557       const id = setTimeout(() => {
    558         fn();
    559         this.clearTimeout(id);
    560       }, delay);
    561       this.timeouts.push(id);
    562       return id;
    563     }
    564 
    565     clearTimeout(id) {
    566       clearTimeout(id);
    567       this.timeouts = Object(external_lodash_["without"])(this.timeouts, id);
    568     }
    569 
    570     render() {
    571       return Object(external_wp_element_["createElement"])(OriginalComponent, Object(esm_extends["a" /* default */])({}, this.props, {
    572         setTimeout: this.setTimeout,
    573         clearTimeout: this.clearTimeout
    574       }));
    575     }
    576 
    577   };
    578 }, 'withSafeTimeout');
    579 /* harmony default export */ var with_safe_timeout = (withSafeTimeout);
    580 
    581 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/higher-order/with-state/index.js
    582 
    583 
    584 
    585 /**
    586  * WordPress dependencies
    587  */
    588 
    589 /**
    590  * Internal dependencies
    591  */
    592 
    593 
    594 /**
    595  * A Higher Order Component used to provide and manage internal component state
    596  * via props.
    597  *
    598  * @param {?Object} initialState Optional initial state of the component.
    599  *
    600  * @return {WPComponent} Wrapped component.
    601  */
    602 
    603 function withState(initialState = {}) {
    604   return create_higher_order_component(OriginalComponent => {
    605     return class WrappedComponent extends external_wp_element_["Component"] {
    606       constructor() {
    607         super(...arguments);
    608         this.setState = this.setState.bind(this);
    609         this.state = initialState;
    610       }
    611 
    612       render() {
    613         return Object(external_wp_element_["createElement"])(OriginalComponent, Object(esm_extends["a" /* default */])({}, this.props, this.state, {
    614           setState: this.setState
    615         }));
    616       }
    617 
    618     };
    619   }, 'withState');
    620 }
    621 
    622 // EXTERNAL MODULE: external ["wp","keycodes"]
    623 var external_wp_keycodes_ = __webpack_require__("RxS6");
    624 
    625 // EXTERNAL MODULE: external ["wp","dom"]
    626 var external_wp_dom_ = __webpack_require__("1CF3");
    627 
    628 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-constrained-tabbing/index.js
    629 /**
    630  * WordPress dependencies
    631  */
    632 
    633 
    634 
    635 /**
    636  * In Dialogs/modals, the tabbing must be constrained to the content of
    637  * the wrapper element. This hook adds the behavior to the returned ref.
    638  *
    639  * @return {Object|Function} Element Ref.
    640  *
    641  * @example
    642  * ```js
    643  * import { useConstrainedTabbing } from '@wordpress/compose';
    644  *
    645  * const ConstrainedTabbingExample = () => {
    646  *     const constrainedTabbingRef = useConstrainedTabbing()
    647  *     return (
    648  *         <div ref={ constrainedTabbingRef }>
    649  *             <Button />
    650  *             <Button />
    651  *         </div>
    652  *     );
    653  * }
    654  * ```
    655  */
    656 
    657 function useConstrainedTabbing() {
    658   const ref = Object(external_wp_element_["useCallback"])(
    659   /** @type {Element} */
    660   node => {
    661     if (!node) {
    662       return;
    663     }
    664 
    665     node.addEventListener('keydown',
    666     /** @type {Event} */
    667     event => {
    668       if (!(event instanceof window.KeyboardEvent)) {
    669         return;
    670       }
    671 
    672       if (event.keyCode !== external_wp_keycodes_["TAB"]) {
    673         return;
    674       }
    675 
    676       const tabbables = external_wp_dom_["focus"].tabbable.find(node);
    677 
    678       if (!tabbables.length) {
    679         return;
    680       }
    681 
    682       const firstTabbable = tabbables[0];
    683       const lastTabbable = tabbables[tabbables.length - 1];
    684 
    685       if (event.shiftKey && event.target === firstTabbable) {
    686         event.preventDefault();
    687         /** @type {HTMLElement} */
    688 
    689         lastTabbable.focus();
    690       } else if (!event.shiftKey && event.target === lastTabbable) {
    691         event.preventDefault();
    692         /** @type {HTMLElement} */
    693 
    694         firstTabbable.focus();
    695         /*
    696          * When pressing Tab and none of the tabbables has focus, the keydown
    697          * event happens on the wrapper div: move focus on the first tabbable.
    698          */
    699       } else if (!tabbables.includes(
    700       /** @type {Element} */
    701       event.target)) {
    702         event.preventDefault();
    703         /** @type {HTMLElement} */
    704 
    705         firstTabbable.focus();
    706       }
    707     });
    708   }, []);
    709   return ref;
    710 }
    711 
    712 /* harmony default export */ var use_constrained_tabbing = (useConstrainedTabbing);
    713 
    714 // EXTERNAL MODULE: ./node_modules/clipboard/dist/clipboard.js
    715 var dist_clipboard = __webpack_require__("sxGJ");
    716 var clipboard_default = /*#__PURE__*/__webpack_require__.n(dist_clipboard);
    717 
    718 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-copy-on-click/index.js
    719 /**
    720  * External dependencies
    721  */
    722 
    723 /**
    724  * WordPress dependencies
    725  */
    726 
    727 
    728 
    729 /**
    730  * Copies the text to the clipboard when the element is clicked.
    731  *
    732  * @deprecated
    733  *
    734  * @param {Object}          ref     Reference with the element.
    735  * @param {string|Function} text    The text to copy.
    736  * @param {number}          timeout Optional timeout to reset the returned
    737  *                                  state. 4 seconds by default.
    738  *
    739  * @return {boolean} Whether or not the text has been copied. Resets after the
    740  *                   timeout.
    741  */
    742 
    743 function useCopyOnClick(ref, text, timeout = 4000) {
    744   external_wp_deprecated_default()('wp.compose.useCopyOnClick', {
    745     since: '10.3',
    746     plugin: 'Gutenberg',
    747     alternative: 'wp.compose.useCopyToClipboard'
    748   });
    749   const clipboard = Object(external_wp_element_["useRef"])();
    750   const [hasCopied, setHasCopied] = Object(external_wp_element_["useState"])(false);
    751   Object(external_wp_element_["useEffect"])(() => {
    752     let timeoutId; // Clipboard listens to click events.
    753 
    754     clipboard.current = new clipboard_default.a(ref.current, {
    755       text: () => typeof text === 'function' ? text() : text
    756     });
    757     clipboard.current.on('success', ({
    758       clearSelection,
    759       trigger
    760     }) => {
    761       // Clearing selection will move focus back to the triggering button,
    762       // ensuring that it is not reset to the body, and further that it is
    763       // kept within the rendered node.
    764       clearSelection(); // Handle ClipboardJS focus bug, see https://github.com/zenorocha/clipboard.js/issues/680
    765 
    766       if (trigger) {
    767         trigger.focus();
    768       }
    769 
    770       if (timeout) {
    771         setHasCopied(true);
    772         clearTimeout(timeoutId);
    773         timeoutId = setTimeout(() => setHasCopied(false), timeout);
    774       }
    775     });
    776     return () => {
    777       clipboard.current.destroy();
    778       clearTimeout(timeoutId);
    779     };
    780   }, [text, timeout, setHasCopied]);
    781   return hasCopied;
    782 }
    783 
    784 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-ref-effect/index.js
    785 /**
    786  * WordPress dependencies
    787  */
    788 
    789 /**
    790  * Effect-like ref callback. Just like with `useEffect`, this allows you to
    791  * return a cleanup function to be run if the ref changes or one of the
    792  * dependencies changes. The ref is provided as an argument to the callback
    793  * functions. The main difference between this and `useEffect` is that
    794  * the `useEffect` callback is not called when the ref changes, but this is.
    795  * Pass the returned ref callback as the component's ref and merge multiple refs
    796  * with `useMergeRefs`.
    797  *
    798  * It's worth noting that if the dependencies array is empty, there's not
    799  * strictly a need to clean up event handlers for example, because the node is
    800  * to be removed. It *is* necessary if you add dependencies because the ref
    801  * callback will be called multiple times for the same node.
    802  *
    803  * @param {Function} callback     Callback with ref as argument.
    804  * @param {Array}    dependencies Dependencies of the callback.
    805  *
    806  * @return {Function} Ref callback.
    807  */
    808 
    809 function useRefEffect(callback, dependencies) {
    810   const cleanup = Object(external_wp_element_["useRef"])();
    811   return Object(external_wp_element_["useCallback"])(node => {
    812     if (node) {
    813       cleanup.current = callback(node);
    814     } else if (cleanup.current) {
    815       cleanup.current();
    816     }
    817   }, dependencies);
    818 }
    819 
    820 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-copy-to-clipboard/index.js
    821 /**
    822  * External dependencies
    823  */
    824 
    825 /**
    826  * WordPress dependencies
    827  */
    828 
    829 
    830 /**
    831  * Internal dependencies
    832  */
    833 
    834 
    835 /** @typedef {import('@wordpress/element').RefObject} RefObject */
    836 
    837 function useUpdatedRef(value) {
    838   const ref = Object(external_wp_element_["useRef"])(value);
    839   ref.current = value;
    840   return ref;
    841 }
    842 /**
    843  * Copies the given text to the clipboard when the element is clicked.
    844  *
    845  * @param {text|Function} text      The text to copy. Use a function if not
    846  *                                  already available and expensive to compute.
    847  * @param {Function}      onSuccess Called when to text is copied.
    848  *
    849  * @return {RefObject} A ref to assign to the target element.
    850  */
    851 
    852 
    853 function useCopyToClipboard(text, onSuccess) {
    854   // Store the dependencies as refs and continuesly update them so they're
    855   // fresh when the callback is called.
    856   const textRef = useUpdatedRef(text);
    857   const onSuccesRef = useUpdatedRef(onSuccess);
    858   return useRefEffect(node => {
    859     // Clipboard listens to click events.
    860     const clipboard = new clipboard_default.a(node, {
    861       text() {
    862         return typeof textRef.current === 'function' ? textRef.current() : textRef.current;
    863       }
    864 
    865     });
    866     clipboard.on('success', ({
    867       clearSelection
    868     }) => {
    869       // Clearing selection will move focus back to the triggering
    870       // button, ensuring that it is not reset to the body, and
    871       // further that it is kept within the rendered node.
    872       clearSelection(); // Handle ClipboardJS focus bug, see
    873       // https://github.com/zenorocha/clipboard.js/issues/680
    874 
    875       node.focus();
    876 
    877       if (onSuccesRef.current) {
    878         onSuccesRef.current();
    879       }
    880     });
    881     return () => {
    882       clipboard.destroy();
    883     };
    884   }, []);
    885 }
    886 
    887 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-focus-on-mount/index.js
    888 /**
    889  * WordPress dependencies
    890  */
    891 
    892 
    893 /**
    894  * Hook used to focus the first tabbable element on mount.
    895  *
    896  * @param {boolean|string} focusOnMount Focus on mount mode.
    897  * @return {Function} Ref callback.
    898  *
    899  * @example
    900  * ```js
    901  * import { useFocusOnMount } from '@wordpress/compose';
    902  *
    903  * const WithFocusOnMount = () => {
    904  *     const ref = useFocusOnMount()
    905  *     return (
    906  *         <div ref={ ref }>
    907  *             <Button />
    908  *             <Button />
    909  *         </div>
    910  *     );
    911  * }
    912  * ```
    913  */
    914 
    915 function useFocusOnMount(focusOnMount = 'firstElement') {
    916   const focusOnMountRef = Object(external_wp_element_["useRef"])(focusOnMount);
    917   Object(external_wp_element_["useEffect"])(() => {
    918     focusOnMountRef.current = focusOnMount;
    919   }, [focusOnMount]);
    920   return Object(external_wp_element_["useCallback"])(node => {
    921     if (!node || focusOnMountRef.current === false) {
    922       return;
    923     }
    924 
    925     if (node.contains(node.ownerDocument.activeElement)) {
    926       return;
    927     }
    928 
    929     let target = node;
    930 
    931     if (focusOnMountRef.current === 'firstElement') {
    932       const firstTabbable = external_wp_dom_["focus"].tabbable.find(node)[0];
    933 
    934       if (firstTabbable) {
    935         target = firstTabbable;
    936       }
    937     }
    938 
    939     target.focus();
    940   }, []);
    941 }
    942 
    943 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-focus-return/index.js
    944 /**
    945  * WordPress dependencies
    946  */
    947 
    948 /**
    949  * When opening modals/sidebars/dialogs, the focus
    950  * must move to the opened area and return to the
    951  * previously focused element when closed.
    952  * The current hook implements the returning behavior.
    953  *
    954  * @param {Function?} onFocusReturn Overrides the default return behavior.
    955  * @return {Function} Element Ref.
    956  *
    957  * @example
    958  * ```js
    959  * import { useFocusReturn } from '@wordpress/compose';
    960  *
    961  * const WithFocusReturn = () => {
    962  *     const ref = useFocusReturn()
    963  *     return (
    964  *         <div ref={ ref }>
    965  *             <Button />
    966  *             <Button />
    967  *         </div>
    968  *     );
    969  * }
    970  * ```
    971  */
    972 
    973 function useFocusReturn(onFocusReturn) {
    974   const ref = Object(external_wp_element_["useRef"])();
    975   const focusedBeforeMount = Object(external_wp_element_["useRef"])();
    976   const onFocusReturnRef = Object(external_wp_element_["useRef"])(onFocusReturn);
    977   Object(external_wp_element_["useEffect"])(() => {
    978     onFocusReturnRef.current = onFocusReturn;
    979   }, [onFocusReturn]);
    980   return Object(external_wp_element_["useCallback"])(node => {
    981     if (node) {
    982       // Set ref to be used when unmounting.
    983       ref.current = node; // Only set when the node mounts.
    984 
    985       if (focusedBeforeMount.current) {
    986         return;
    987       }
    988 
    989       focusedBeforeMount.current = node.ownerDocument.activeElement;
    990     } else if (focusedBeforeMount.current) {
    991       const isFocused = ref.current.contains(ref.current.ownerDocument.activeElement);
    992 
    993       if (ref.current.isConnected && !isFocused) {
    994         return;
    995       } // Defer to the component's own explicit focus return behavior, if
    996       // specified. This allows for support that the `onFocusReturn`
    997       // decides to allow the default behavior to occur under some
    998       // conditions.
    999 
   1000 
   1001       if (onFocusReturnRef.current) {
   1002         onFocusReturnRef.current();
   1003       } else {
   1004         focusedBeforeMount.current.focus();
   1005       }
   1006     }
   1007   }, []);
   1008 }
   1009 
   1010 /* harmony default export */ var use_focus_return = (useFocusReturn);
   1011 
   1012 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-focus-outside/index.js
   1013 /**
   1014  * External dependencies
   1015  */
   1016 
   1017 /**
   1018  * WordPress dependencies
   1019  */
   1020 
   1021 
   1022 /**
   1023  * Input types which are classified as button types, for use in considering
   1024  * whether element is a (focus-normalized) button.
   1025  *
   1026  * @type {string[]}
   1027  */
   1028 
   1029 const INPUT_BUTTON_TYPES = ['button', 'submit'];
   1030 /**
   1031  * @typedef {HTMLButtonElement | HTMLLinkElement | HTMLInputElement} FocusNormalizedButton
   1032  */
   1033 // Disable reason: Rule doesn't support predicate return types
   1034 
   1035 /* eslint-disable jsdoc/valid-types */
   1036 
   1037 /**
   1038  * Returns true if the given element is a button element subject to focus
   1039  * normalization, or false otherwise.
   1040  *
   1041  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
   1042  *
   1043  * @param {EventTarget} eventTarget The target from a mouse or touch event.
   1044  *
   1045  * @return {eventTarget is FocusNormalizedButton} Whether element is a button.
   1046  */
   1047 
   1048 function isFocusNormalizedButton(eventTarget) {
   1049   if (!(eventTarget instanceof window.HTMLElement)) {
   1050     return false;
   1051   }
   1052 
   1053   switch (eventTarget.nodeName) {
   1054     case 'A':
   1055     case 'BUTTON':
   1056       return true;
   1057 
   1058     case 'INPUT':
   1059       return Object(external_lodash_["includes"])(INPUT_BUTTON_TYPES,
   1060       /** @type {HTMLInputElement} */
   1061       eventTarget.type);
   1062   }
   1063 
   1064   return false;
   1065 }
   1066 /* eslint-enable jsdoc/valid-types */
   1067 
   1068 /**
   1069  * @typedef {import('react').SyntheticEvent} SyntheticEvent
   1070  */
   1071 
   1072 /**
   1073  * @callback EventCallback
   1074  * @param {SyntheticEvent} event input related event.
   1075  */
   1076 
   1077 /**
   1078  * @typedef FocusOutsideReactElement
   1079  * @property {EventCallback} handleFocusOutside callback for a focus outside event.
   1080  */
   1081 
   1082 /**
   1083  * @typedef {import('react').MutableRefObject<FocusOutsideReactElement | undefined>} FocusOutsideRef
   1084  */
   1085 
   1086 /**
   1087  * @typedef {Object} FocusOutsideReturnValue
   1088  * @property {EventCallback} onFocus      An event handler for focus events.
   1089  * @property {EventCallback} onBlur       An event handler for blur events.
   1090  * @property {EventCallback} onMouseDown  An event handler for mouse down events.
   1091  * @property {EventCallback} onMouseUp    An event handler for mouse up events.
   1092  * @property {EventCallback} onTouchStart An event handler for touch start events.
   1093  * @property {EventCallback} onTouchEnd   An event handler for touch end events.
   1094  */
   1095 
   1096 /**
   1097  * A react hook that can be used to check whether focus has moved outside the
   1098  * element the event handlers are bound to.
   1099  *
   1100  * @param {EventCallback} onFocusOutside        A callback triggered when focus moves outside
   1101  *                                              the element the event handlers are bound to.
   1102  *
   1103  * @return {FocusOutsideReturnValue} An object containing event handlers. Bind the event handlers
   1104  *                                   to a wrapping element element to capture when focus moves
   1105  *                                   outside that element.
   1106  */
   1107 
   1108 
   1109 function useFocusOutside(onFocusOutside) {
   1110   const currentOnFocusOutside = Object(external_wp_element_["useRef"])(onFocusOutside);
   1111   Object(external_wp_element_["useEffect"])(() => {
   1112     currentOnFocusOutside.current = onFocusOutside;
   1113   }, [onFocusOutside]);
   1114   const preventBlurCheck = Object(external_wp_element_["useRef"])(false);
   1115   /**
   1116    * @type {import('react').MutableRefObject<number | undefined>}
   1117    */
   1118 
   1119   const blurCheckTimeoutId = Object(external_wp_element_["useRef"])();
   1120   /**
   1121    * Cancel a blur check timeout.
   1122    */
   1123 
   1124   const cancelBlurCheck = Object(external_wp_element_["useCallback"])(() => {
   1125     clearTimeout(blurCheckTimeoutId.current);
   1126   }, []); // Cancel blur checks on unmount.
   1127 
   1128   Object(external_wp_element_["useEffect"])(() => {
   1129     return () => cancelBlurCheck();
   1130   }, []); // Cancel a blur check if the callback or ref is no longer provided.
   1131 
   1132   Object(external_wp_element_["useEffect"])(() => {
   1133     if (!onFocusOutside) {
   1134       cancelBlurCheck();
   1135     }
   1136   }, [onFocusOutside, cancelBlurCheck]);
   1137   /**
   1138    * Handles a mousedown or mouseup event to respectively assign and
   1139    * unassign a flag for preventing blur check on button elements. Some
   1140    * browsers, namely Firefox and Safari, do not emit a focus event on
   1141    * button elements when clicked, while others do. The logic here
   1142    * intends to normalize this as treating click on buttons as focus.
   1143    *
   1144    * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
   1145    *
   1146    * @param {SyntheticEvent} event Event for mousedown or mouseup.
   1147    */
   1148 
   1149   const normalizeButtonFocus = Object(external_wp_element_["useCallback"])(event => {
   1150     const {
   1151       type,
   1152       target
   1153     } = event;
   1154     const isInteractionEnd = Object(external_lodash_["includes"])(['mouseup', 'touchend'], type);
   1155 
   1156     if (isInteractionEnd) {
   1157       preventBlurCheck.current = false;
   1158     } else if (isFocusNormalizedButton(target)) {
   1159       preventBlurCheck.current = true;
   1160     }
   1161   }, []);
   1162   /**
   1163    * A callback triggered when a blur event occurs on the element the handler
   1164    * is bound to.
   1165    *
   1166    * Calls the `onFocusOutside` callback in an immediate timeout if focus has
   1167    * move outside the bound element and is still within the document.
   1168    *
   1169    * @param {SyntheticEvent} event Blur event.
   1170    */
   1171 
   1172   const queueBlurCheck = Object(external_wp_element_["useCallback"])(event => {
   1173     // React does not allow using an event reference asynchronously
   1174     // due to recycling behavior, except when explicitly persisted.
   1175     event.persist(); // Skip blur check if clicking button. See `normalizeButtonFocus`.
   1176 
   1177     if (preventBlurCheck.current) {
   1178       return;
   1179     }
   1180 
   1181     blurCheckTimeoutId.current = setTimeout(() => {
   1182       // If document is not focused then focus should remain
   1183       // inside the wrapped component and therefore we cancel
   1184       // this blur event thereby leaving focus in place.
   1185       // https://developer.mozilla.org/en-US/docs/Web/API/Document/hasFocus.
   1186       if (!document.hasFocus()) {
   1187         event.preventDefault();
   1188         return;
   1189       }
   1190 
   1191       if ('function' === typeof currentOnFocusOutside.current) {
   1192         currentOnFocusOutside.current(event);
   1193       }
   1194     }, 0);
   1195   }, []);
   1196   return {
   1197     onFocus: cancelBlurCheck,
   1198     onMouseDown: normalizeButtonFocus,
   1199     onMouseUp: normalizeButtonFocus,
   1200     onTouchStart: normalizeButtonFocus,
   1201     onTouchEnd: normalizeButtonFocus,
   1202     onBlur: queueBlurCheck
   1203   };
   1204 }
   1205 
   1206 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-merge-refs/index.js
   1207 /**
   1208  * WordPress dependencies
   1209  */
   1210 
   1211 /** @typedef {import('@wordpress/element').RefObject} RefObject */
   1212 
   1213 /** @typedef {import('@wordpress/element').RefCallback} RefCallback */
   1214 
   1215 function assignRef(ref, value) {
   1216   if (typeof ref === 'function') {
   1217     ref(value);
   1218   } else if (ref && ref.hasOwnProperty('current')) {
   1219     ref.current = value;
   1220   }
   1221 }
   1222 /**
   1223  * Merges refs into one ref callback. Ensures the merged ref callbacks are only
   1224  * called when it changes (as a result of a `useCallback` dependency update) or
   1225  * when the ref value changes. If you don't wish a ref callback to be called on
   1226  * every render, wrap it with `useCallback( ref, [] )`.
   1227  * Dependencies can be added, but when a dependency changes, the old ref
   1228  * callback will be called with `null` and the new ref callback will be called
   1229  * with the same node.
   1230  *
   1231  * @param {Array<RefObject|RefCallback>} refs The refs to be merged.
   1232  *
   1233  * @return {RefCallback} The merged ref callback.
   1234  */
   1235 
   1236 
   1237 function useMergeRefs(refs) {
   1238   const element = Object(external_wp_element_["useRef"])();
   1239   const didElementChange = Object(external_wp_element_["useRef"])(false);
   1240   const previousRefs = Object(external_wp_element_["useRef"])([]);
   1241   const currentRefs = Object(external_wp_element_["useRef"])(refs); // Update on render before the ref callback is called, so the ref callback
   1242   // always has access to the current refs.
   1243 
   1244   currentRefs.current = refs; // If any of the refs change, call the previous ref with `null` and the new
   1245   // ref with the node, except when the element changes in the same cycle, in
   1246   // which case the ref callbacks will already have been called.
   1247 
   1248   Object(external_wp_element_["useLayoutEffect"])(() => {
   1249     if (didElementChange.current === false) {
   1250       refs.forEach((ref, index) => {
   1251         const previousRef = previousRefs.current[index];
   1252 
   1253         if (ref !== previousRef) {
   1254           assignRef(previousRef, null);
   1255           assignRef(ref, element.current);
   1256         }
   1257       });
   1258     }
   1259 
   1260     previousRefs.current = refs;
   1261   }, refs); // No dependencies, must be reset after every render so ref callbacks are
   1262   // correctly called after a ref change.
   1263 
   1264   Object(external_wp_element_["useLayoutEffect"])(() => {
   1265     didElementChange.current = false;
   1266   }); // There should be no dependencies so that `callback` is only called when
   1267   // the node changes.
   1268 
   1269   return Object(external_wp_element_["useCallback"])(value => {
   1270     // Update the element so it can be used when calling ref callbacks on a
   1271     // dependency change.
   1272     assignRef(element, value);
   1273     didElementChange.current = true; // When an element changes, the current ref callback should be called
   1274     // with the new element and the previous one with `null`.
   1275 
   1276     const refsToAssign = value ? currentRefs.current : previousRefs.current; // Update the latest refs.
   1277 
   1278     for (const ref of refsToAssign) {
   1279       assignRef(ref, value);
   1280     }
   1281   }, []);
   1282 }
   1283 
   1284 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-dialog/index.js
   1285 /**
   1286  * WordPress dependencies
   1287  */
   1288 
   1289 
   1290 /**
   1291  * Internal dependencies
   1292  */
   1293 
   1294 
   1295 
   1296 
   1297 
   1298 
   1299 /**
   1300  * Returns a ref and props to apply to a dialog wrapper to enable the following behaviors:
   1301  *  - constrained tabbing.
   1302  *  - focus on mount.
   1303  *  - return focus on unmount.
   1304  *  - focus outside.
   1305  *
   1306  * @param {Object} options Dialog Options.
   1307  */
   1308 
   1309 function useDialog(options) {
   1310   const onClose = Object(external_wp_element_["useRef"])();
   1311   Object(external_wp_element_["useEffect"])(() => {
   1312     onClose.current = options.onClose;
   1313   }, [options.onClose]);
   1314   const constrainedTabbingRef = use_constrained_tabbing();
   1315   const focusOnMountRef = useFocusOnMount();
   1316   const focusReturnRef = use_focus_return();
   1317   const focusOutsideProps = useFocusOutside(options.onClose);
   1318   const closeOnEscapeRef = Object(external_wp_element_["useCallback"])(node => {
   1319     if (!node) {
   1320       return;
   1321     }
   1322 
   1323     node.addEventListener('keydown', event => {
   1324       // Close on escape
   1325       if (event.keyCode === external_wp_keycodes_["ESCAPE"] && onClose.current) {
   1326         event.stopPropagation();
   1327         onClose.current();
   1328       }
   1329     });
   1330   }, []);
   1331   return [useMergeRefs([constrainedTabbingRef, focusReturnRef, focusOnMountRef, closeOnEscapeRef]), { ...focusOutsideProps,
   1332     tabIndex: '-1'
   1333   }];
   1334 }
   1335 
   1336 /* harmony default export */ var use_dialog = (useDialog);
   1337 
   1338 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-isomorphic-layout-effect/index.js
   1339 /**
   1340  * WordPress dependencies
   1341  */
   1342 
   1343 /**
   1344  * Preferred over direct usage of `useLayoutEffect` when supporting
   1345  * server rendered components (SSR) because currently React
   1346  * throws a warning when using useLayoutEffect in that environment.
   1347  */
   1348 
   1349 const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? external_wp_element_["useLayoutEffect"] : external_wp_element_["useEffect"];
   1350 /* harmony default export */ var use_isomorphic_layout_effect = (useIsomorphicLayoutEffect);
   1351 
   1352 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-dragging/index.js
   1353 /**
   1354  * WordPress dependencies
   1355  */
   1356 
   1357 /**
   1358  * Internal dependencies
   1359  */
   1360 
   1361 
   1362 function useDragging({
   1363   onDragStart,
   1364   onDragMove,
   1365   onDragEnd
   1366 }) {
   1367   const [isDragging, setIsDragging] = Object(external_wp_element_["useState"])(false);
   1368   const eventsRef = Object(external_wp_element_["useRef"])({
   1369     onDragStart,
   1370     onDragMove,
   1371     onDragEnd
   1372   });
   1373   use_isomorphic_layout_effect(() => {
   1374     eventsRef.current.onDragStart = onDragStart;
   1375     eventsRef.current.onDragMove = onDragMove;
   1376     eventsRef.current.onDragEnd = onDragEnd;
   1377   }, [onDragStart, onDragMove, onDragEnd]);
   1378   const onMouseMove = Object(external_wp_element_["useCallback"])((...args) => eventsRef.current.onDragMove && eventsRef.current.onDragMove(...args), []);
   1379   const endDrag = Object(external_wp_element_["useCallback"])((...args) => {
   1380     if (eventsRef.current.onDragEnd) {
   1381       eventsRef.current.onDragEnd(...args);
   1382     }
   1383 
   1384     document.removeEventListener('mousemove', onMouseMove);
   1385     document.removeEventListener('mouseup', endDrag);
   1386     setIsDragging(false);
   1387   }, []);
   1388   const startDrag = Object(external_wp_element_["useCallback"])((...args) => {
   1389     if (eventsRef.current.onDragStart) {
   1390       eventsRef.current.onDragStart(...args);
   1391     }
   1392 
   1393     document.addEventListener('mousemove', onMouseMove);
   1394     document.addEventListener('mouseup', endDrag);
   1395     setIsDragging(true);
   1396   }, []); // Remove the global events when unmounting if needed.
   1397 
   1398   Object(external_wp_element_["useEffect"])(() => {
   1399     return () => {
   1400       if (isDragging) {
   1401         document.removeEventListener('mousemove', onMouseMove);
   1402         document.removeEventListener('mouseup', endDrag);
   1403       }
   1404     };
   1405   }, [isDragging]);
   1406   return {
   1407     startDrag,
   1408     endDrag,
   1409     isDragging
   1410   };
   1411 }
   1412 
   1413 // EXTERNAL MODULE: ./node_modules/mousetrap/mousetrap.js
   1414 var mousetrap_mousetrap = __webpack_require__("imBb");
   1415 var mousetrap_default = /*#__PURE__*/__webpack_require__.n(mousetrap_mousetrap);
   1416 
   1417 // EXTERNAL MODULE: ./node_modules/mousetrap/plugins/global-bind/mousetrap-global-bind.js
   1418 var mousetrap_global_bind = __webpack_require__("VcSt");
   1419 
   1420 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-keyboard-shortcut/index.js
   1421 /**
   1422  * External dependencies
   1423  */
   1424 
   1425 
   1426 
   1427 /**
   1428  * WordPress dependencies
   1429  */
   1430 
   1431 
   1432 /**
   1433  * A block selection object.
   1434  *
   1435  * @typedef {Object} WPKeyboardShortcutConfig
   1436  *
   1437  * @property {boolean} [bindGlobal]  Handle keyboard events anywhere including inside textarea/input fields.
   1438  * @property {string}  [eventName]   Event name used to trigger the handler, defaults to keydown.
   1439  * @property {boolean} [isDisabled]  Disables the keyboard handler if the value is true.
   1440  * @property {Object}  [target]      React reference to the DOM element used to catch the keyboard event.
   1441  */
   1442 
   1443 /**
   1444  * Return true if platform is MacOS.
   1445  *
   1446  * @param {Object} _window   window object by default; used for DI testing.
   1447  *
   1448  * @return {boolean} True if MacOS; false otherwise.
   1449  */
   1450 
   1451 function isAppleOS(_window = window) {
   1452   const {
   1453     platform
   1454   } = _window.navigator;
   1455   return platform.indexOf('Mac') !== -1 || Object(external_lodash_["includes"])(['iPad', 'iPhone'], platform);
   1456 }
   1457 /**
   1458  * Attach a keyboard shortcut handler.
   1459  *
   1460  * @param {string[]|string}         shortcuts  Keyboard Shortcuts.
   1461  * @param {Function}                callback   Shortcut callback.
   1462  * @param {WPKeyboardShortcutConfig} options    Shortcut options.
   1463  */
   1464 
   1465 
   1466 function useKeyboardShortcut(shortcuts, callback, {
   1467   bindGlobal = false,
   1468   eventName = 'keydown',
   1469   isDisabled = false,
   1470   // This is important for performance considerations.
   1471   target
   1472 } = {}) {
   1473   const currentCallback = Object(external_wp_element_["useRef"])(callback);
   1474   Object(external_wp_element_["useEffect"])(() => {
   1475     currentCallback.current = callback;
   1476   }, [callback]);
   1477   Object(external_wp_element_["useEffect"])(() => {
   1478     if (isDisabled) {
   1479       return;
   1480     }
   1481 
   1482     const mousetrap = new mousetrap_default.a(target ? target.current : document);
   1483     Object(external_lodash_["castArray"])(shortcuts).forEach(shortcut => {
   1484       const keys = shortcut.split('+'); // Determines whether a key is a modifier by the length of the string.
   1485       // E.g. if I add a pass a shortcut Shift+Cmd+M, it'll determine that
   1486       // the modifiers are Shift and Cmd because they're not a single character.
   1487 
   1488       const modifiers = new Set(keys.filter(value => value.length > 1));
   1489       const hasAlt = modifiers.has('alt');
   1490       const hasShift = modifiers.has('shift'); // This should be better moved to the shortcut registration instead.
   1491 
   1492       if (isAppleOS() && (modifiers.size === 1 && hasAlt || modifiers.size === 2 && hasAlt && hasShift)) {
   1493         throw new Error(`Cannot bind ${shortcut}. Alt and Shift+Alt modifiers are reserved for character input.`);
   1494       }
   1495 
   1496       const bindFn = bindGlobal ? 'bindGlobal' : 'bind';
   1497       mousetrap[bindFn](shortcut, (...args) => currentCallback.current(...args), eventName);
   1498     });
   1499     return () => {
   1500       mousetrap.reset();
   1501     };
   1502   }, [shortcuts, bindGlobal, eventName, target, isDisabled]);
   1503 }
   1504 
   1505 /* harmony default export */ var use_keyboard_shortcut = (useKeyboardShortcut);
   1506 
   1507 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-media-query/index.js
   1508 /**
   1509  * WordPress dependencies
   1510  */
   1511 
   1512 /**
   1513  * Runs a media query and returns its value when it changes.
   1514  *
   1515  * @param {string} [query] Media Query.
   1516  * @return {boolean} return value of the media query.
   1517  */
   1518 
   1519 function useMediaQuery(query) {
   1520   const [match, setMatch] = Object(external_wp_element_["useState"])(() => !!(query && typeof window !== 'undefined' && window.matchMedia(query).matches));
   1521   Object(external_wp_element_["useEffect"])(() => {
   1522     if (!query) {
   1523       return;
   1524     }
   1525 
   1526     const updateMatch = () => setMatch(window.matchMedia(query).matches);
   1527 
   1528     updateMatch();
   1529     const list = window.matchMedia(query);
   1530     list.addListener(updateMatch);
   1531     return () => {
   1532       list.removeListener(updateMatch);
   1533     };
   1534   }, [query]);
   1535   return query && match;
   1536 }
   1537 
   1538 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-previous/index.js
   1539 /**
   1540  * WordPress dependencies
   1541  */
   1542 
   1543 /**
   1544  * Use something's value from the previous render.
   1545  * Based on https://usehooks.com/usePrevious/.
   1546  *
   1547  * @template T
   1548  *
   1549  * @param {T} value The value to track.
   1550  *
   1551  * @return {T|undefined} The value from the previous render.
   1552  */
   1553 
   1554 function usePrevious(value) {
   1555   // Disable reason: without an explicit type detail, the type of ref will be
   1556   // inferred based on the initial useRef argument, which is undefined.
   1557   // https://github.com/WordPress/gutenberg/pull/22597#issuecomment-633588366
   1558 
   1559   /* eslint-disable jsdoc/no-undefined-types */
   1560   const ref = Object(external_wp_element_["useRef"])(
   1561   /** @type {T|undefined} */
   1562   undefined);
   1563   /* eslint-enable jsdoc/no-undefined-types */
   1564   // Store current value in ref.
   1565 
   1566   Object(external_wp_element_["useEffect"])(() => {
   1567     ref.current = value;
   1568   }, [value]); // Re-run when value changes.
   1569   // Return previous value (happens before update in useEffect above).
   1570 
   1571   return ref.current;
   1572 }
   1573 
   1574 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-reduced-motion/index.js
   1575 /**
   1576  * Internal dependencies
   1577  */
   1578 
   1579 /**
   1580  * Whether or not the user agent is Internet Explorer.
   1581  *
   1582  * @type {boolean}
   1583  */
   1584 
   1585 const IS_IE = typeof window !== 'undefined' && window.navigator.userAgent.indexOf('Trident') >= 0;
   1586 /**
   1587  * Hook returning whether the user has a preference for reduced motion.
   1588  *
   1589  * @return {boolean} Reduced motion preference value.
   1590  */
   1591 
   1592 const useReducedMotion = undefined || IS_IE ? () => true : () => useMediaQuery('(prefers-reduced-motion: reduce)');
   1593 /* harmony default export */ var use_reduced_motion = (useReducedMotion);
   1594 
   1595 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-viewport-match/index.js
   1596 /**
   1597  * WordPress dependencies
   1598  */
   1599 
   1600 /**
   1601  * Internal dependencies
   1602  */
   1603 
   1604 
   1605 /**
   1606  * @typedef {"huge"|"wide"|"large"|"medium"|"small"|"mobile"} WPBreakpoint
   1607  */
   1608 
   1609 /**
   1610  * Hash of breakpoint names with pixel width at which it becomes effective.
   1611  *
   1612  * @see _breakpoints.scss
   1613  *
   1614  * @type {Object<WPBreakpoint,number>}
   1615  */
   1616 
   1617 const BREAKPOINTS = {
   1618   huge: 1440,
   1619   wide: 1280,
   1620   large: 960,
   1621   medium: 782,
   1622   small: 600,
   1623   mobile: 480
   1624 };
   1625 /**
   1626  * @typedef {">="|"<"} WPViewportOperator
   1627  */
   1628 
   1629 /**
   1630  * Object mapping media query operators to the condition to be used.
   1631  *
   1632  * @type {Object<WPViewportOperator,string>}
   1633  */
   1634 
   1635 const CONDITIONS = {
   1636   '>=': 'min-width',
   1637   '<': 'max-width'
   1638 };
   1639 /**
   1640  * Object mapping media query operators to a function that given a breakpointValue and a width evaluates if the operator matches the values.
   1641  *
   1642  * @type {Object<WPViewportOperator,Function>}
   1643  */
   1644 
   1645 const OPERATOR_EVALUATORS = {
   1646   '>=': (breakpointValue, width) => width >= breakpointValue,
   1647   '<': (breakpointValue, width) => width < breakpointValue
   1648 };
   1649 const ViewportMatchWidthContext = Object(external_wp_element_["createContext"])(null);
   1650 /**
   1651  * Returns true if the viewport matches the given query, or false otherwise.
   1652  *
   1653  * @param {WPBreakpoint}       breakpoint      Breakpoint size name.
   1654  * @param {WPViewportOperator} [operator=">="] Viewport operator.
   1655  *
   1656  * @example
   1657  *
   1658  * ```js
   1659  * useViewportMatch( 'huge', '<' );
   1660  * useViewportMatch( 'medium' );
   1661  * ```
   1662  *
   1663  * @return {boolean} Whether viewport matches query.
   1664  */
   1665 
   1666 const useViewportMatch = (breakpoint, operator = '>=') => {
   1667   const simulatedWidth = Object(external_wp_element_["useContext"])(ViewportMatchWidthContext);
   1668   const mediaQuery = !simulatedWidth && `(${CONDITIONS[operator]}: ${BREAKPOINTS[breakpoint]}px)`;
   1669   const mediaQueryResult = useMediaQuery(mediaQuery);
   1670 
   1671   if (simulatedWidth) {
   1672     return OPERATOR_EVALUATORS[operator](BREAKPOINTS[breakpoint], simulatedWidth);
   1673   }
   1674 
   1675   return mediaQueryResult;
   1676 };
   1677 
   1678 useViewportMatch.__experimentalWidthProvider = ViewportMatchWidthContext.Provider;
   1679 /* harmony default export */ var use_viewport_match = (useViewportMatch);
   1680 
   1681 // EXTERNAL MODULE: ./node_modules/react-resize-aware/dist/index.js
   1682 var dist = __webpack_require__("SSiF");
   1683 var dist_default = /*#__PURE__*/__webpack_require__.n(dist);
   1684 
   1685 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-resize-observer/index.js
   1686 /**
   1687  * External dependencies
   1688  */
   1689 
   1690 /**
   1691  * Hook which allows to listen the resize event of any target element when it changes sizes.
   1692  * _Note: `useResizeObserver` will report `null` until after first render_
   1693  *
   1694  * @return {Array} An array of {Element} `resizeListener` and {?Object} `sizes` with properties `width` and `height`
   1695  *
   1696  * @example
   1697  *
   1698  * ```js
   1699  * const App = () => {
   1700  * 	const [ resizeListener, sizes ] = useResizeObserver();
   1701  *
   1702  * 	return (
   1703  * 		<div>
   1704  * 			{ resizeListener }
   1705  * 			Your content here
   1706  * 		</div>
   1707  * 	);
   1708  * };
   1709  * ```
   1710  *
   1711  */
   1712 
   1713 /* harmony default export */ var use_resize_observer = (dist_default.a);
   1714 
   1715 // EXTERNAL MODULE: external ["wp","priorityQueue"]
   1716 var external_wp_priorityQueue_ = __webpack_require__("XI5e");
   1717 
   1718 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-async-list/index.js
   1719 /**
   1720  * WordPress dependencies
   1721  */
   1722 
   1723 
   1724 /**
   1725  * Returns the first items from list that are present on state.
   1726  *
   1727  * @param list  New array.
   1728  * @param state Current state.
   1729  * @return First items present iin state.
   1730  */
   1731 
   1732 function getFirstItemsPresentInState(list, state) {
   1733   const firstItems = [];
   1734 
   1735   for (let i = 0; i < list.length; i++) {
   1736     const item = list[i];
   1737 
   1738     if (!state.includes(item)) {
   1739       break;
   1740     }
   1741 
   1742     firstItems.push(item);
   1743   }
   1744 
   1745   return firstItems;
   1746 }
   1747 /**
   1748  * React hook returns an array which items get asynchronously appended from a source array.
   1749  * This behavior is useful if we want to render a list of items asynchronously for performance reasons.
   1750  *
   1751  * @param list Source array.
   1752  * @return Async array.
   1753  */
   1754 
   1755 
   1756 function useAsyncList(list) {
   1757   const [current, setCurrent] = Object(external_wp_element_["useState"])([]);
   1758   Object(external_wp_element_["useEffect"])(() => {
   1759     // On reset, we keep the first items that were previously rendered.
   1760     const firstItems = getFirstItemsPresentInState(list, current);
   1761     setCurrent(firstItems);
   1762     const asyncQueue = Object(external_wp_priorityQueue_["createQueue"])();
   1763 
   1764     const append = index => () => {
   1765       if (list.length <= index) {
   1766         return;
   1767       }
   1768 
   1769       setCurrent(state => [...state, list[index]]);
   1770       asyncQueue.add({}, append(index + 1));
   1771     };
   1772 
   1773     asyncQueue.add({}, append(firstItems.length));
   1774     return () => asyncQueue.reset();
   1775   }, [list]);
   1776   return current;
   1777 }
   1778 
   1779 /* harmony default export */ var use_async_list = (useAsyncList);
   1780 
   1781 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-warn-on-change/index.js
   1782 /**
   1783  * Internal dependencies
   1784  */
   1785 
   1786 /**
   1787  * Hook that performs a shallow comparison between the preview value of an object
   1788  * and the new one, if there's a difference, it prints it to the console.
   1789  * this is useful in performance related work, to check why a component re-renders.
   1790  *
   1791  *  @example
   1792  *
   1793  * ```jsx
   1794  * function MyComponent(props) {
   1795  *    useWarnOnChange(props);
   1796  *
   1797  *    return "Something";
   1798  * }
   1799  * ```
   1800  *
   1801  * @param {Object} object Object which changes to compare.
   1802  * @param {string} prefix Just a prefix to show when console logging.
   1803  */
   1804 
   1805 function useWarnOnChange(object, prefix = 'Change detection') {
   1806   const previousValues = usePrevious(object);
   1807   Object.entries(previousValues !== null && previousValues !== void 0 ? previousValues : []).forEach(([key, value]) => {
   1808     if (value !== object[key]) {
   1809       // eslint-disable-next-line no-console
   1810       console.warn(`${prefix}: ${key} key changed:`, value, object[key]);
   1811     }
   1812   });
   1813 }
   1814 
   1815 /* harmony default export */ var use_warn_on_change = (useWarnOnChange);
   1816 
   1817 // EXTERNAL MODULE: ./node_modules/use-memo-one/dist/use-memo-one.esm.js
   1818 var use_memo_one_esm = __webpack_require__("mHlH");
   1819 
   1820 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-debounce/index.js
   1821 /**
   1822  * External dependencies
   1823  */
   1824 
   1825 
   1826 /**
   1827  * WordPress dependencies
   1828  */
   1829 
   1830 
   1831 /**
   1832  * Debounces a function with Lodash's `debounce`. A new debounced function will
   1833  * be returned and any scheduled calls cancelled if any of the arguments change,
   1834  * including the function to debounce, so please wrap functions created on
   1835  * render in components in `useCallback`.
   1836  *
   1837  * @param {...any} args Arguments passed to Lodash's `debounce`.
   1838  *
   1839  * @return {Function} Debounced function.
   1840  */
   1841 
   1842 function useDebounce(...args) {
   1843   const debounced = Object(use_memo_one_esm["a" /* useMemoOne */])(() => Object(external_lodash_["debounce"])(...args), args);
   1844   Object(external_wp_element_["useEffect"])(() => () => debounced.cancel(), [debounced]);
   1845   return debounced;
   1846 }
   1847 
   1848 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-throttle/index.js
   1849 /**
   1850  * External dependencies
   1851  */
   1852 
   1853 
   1854 /**
   1855  * WordPress dependencies
   1856  */
   1857 
   1858 
   1859 /**
   1860  * Throttles a function with Lodash's `throttle`. A new throttled function will
   1861  * be returned and any scheduled calls cancelled if any of the arguments change,
   1862  * including the function to throttle, so please wrap functions created on
   1863  * render in components in `useCallback`.
   1864  *
   1865  * @param {...any} args Arguments passed to Lodash's `throttle`.
   1866  *
   1867  * @return {Function} Throttled function.
   1868  */
   1869 
   1870 function useThrottle(...args) {
   1871   const throttled = Object(use_memo_one_esm["a" /* useMemoOne */])(() => Object(external_lodash_["throttle"])(...args), args);
   1872   Object(external_wp_element_["useEffect"])(() => () => throttled.cancel(), [throttled]);
   1873   return throttled;
   1874 }
   1875 
   1876 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/hooks/use-drop-zone/index.js
   1877 /**
   1878  * WordPress dependencies
   1879  */
   1880 
   1881 /**
   1882  * Internal dependencies
   1883  */
   1884 
   1885 
   1886 /** @typedef {import('@wordpress/element').RefCallback} RefCallback */
   1887 
   1888 function useFreshRef(value) {
   1889   const ref = Object(external_wp_element_["useRef"])();
   1890   ref.current = value;
   1891   return ref;
   1892 }
   1893 /**
   1894  * A hook to facilitate drag and drop handling.
   1895  *
   1896  * @param {Object}     $1             Named parameters.
   1897  * @param {boolean}    $1.isDisabled  Whether or not to disable the drop zone.
   1898  * @param {DragEvent}  $1.onDragStart Called when dragging has started.
   1899  * @param {DragEvent}  $1.onDragEnter Called when the zone is entered.
   1900  * @param {DragEvent}  $1.onDragOver  Called when the zone is moved within.
   1901  * @param {DragEvent}  $1.onDragLeave Called when the zone is left.
   1902  * @param {MouseEvent} $1.onDragEnd   Called when dragging has ended.
   1903  * @param {DragEvent}  $1.onDrop      Called when dropping in the zone.
   1904  *
   1905  * @return {RefCallback} Ref callback to be passed to the drop zone element.
   1906  */
   1907 
   1908 
   1909 function useDropZone({
   1910   isDisabled,
   1911   onDrop: _onDrop,
   1912   onDragStart: _onDragStart,
   1913   onDragEnter: _onDragEnter,
   1914   onDragLeave: _onDragLeave,
   1915   onDragEnd: _onDragEnd,
   1916   onDragOver: _onDragOver
   1917 }) {
   1918   const onDropRef = useFreshRef(_onDrop);
   1919   const onDragStartRef = useFreshRef(_onDragStart);
   1920   const onDragEnterRef = useFreshRef(_onDragEnter);
   1921   const onDragLeaveRef = useFreshRef(_onDragLeave);
   1922   const onDragEndRef = useFreshRef(_onDragEnd);
   1923   const onDragOverRef = useFreshRef(_onDragOver);
   1924   return useRefEffect(element => {
   1925     if (isDisabled) {
   1926       return;
   1927     }
   1928 
   1929     let isDragging = false;
   1930     const {
   1931       ownerDocument
   1932     } = element;
   1933     /**
   1934      * Checks if an element is in the drop zone.
   1935      *
   1936      * @param {HTMLElement|null} elementToCheck
   1937      *
   1938      * @return {boolean} True if in drop zone, false if not.
   1939      */
   1940 
   1941     function isElementInZone(elementToCheck) {
   1942       if (!elementToCheck || !element.contains(elementToCheck)) {
   1943         return false;
   1944       }
   1945 
   1946       do {
   1947         if (elementToCheck.dataset.isDropZone) {
   1948           return elementToCheck === element;
   1949         }
   1950       } while (elementToCheck = elementToCheck.parentElement);
   1951 
   1952       return false;
   1953     }
   1954 
   1955     function maybeDragStart(
   1956     /** @type {DragEvent} */
   1957     event) {
   1958       if (isDragging) {
   1959         return;
   1960       }
   1961 
   1962       isDragging = true;
   1963       ownerDocument.removeEventListener('dragenter', maybeDragStart); // Note that `dragend` doesn't fire consistently for file and
   1964       // HTML drag events where the drag origin is outside the browser
   1965       // window. In Firefox it may also not fire if the originating
   1966       // node is removed.
   1967 
   1968       ownerDocument.addEventListener('dragend', maybeDragEnd);
   1969       ownerDocument.addEventListener('mousemove', maybeDragEnd);
   1970 
   1971       if (onDragStartRef.current) {
   1972         onDragStartRef.current(event);
   1973       }
   1974     }
   1975 
   1976     function onDragEnter(event) {
   1977       event.preventDefault(); // The `dragenter` event will also fire when entering child
   1978       // elements, but we only want to call `onDragEnter` when
   1979       // entering the drop zone, which means the `relatedTarget`
   1980       // (element that has been left) should be outside the drop zone.
   1981 
   1982       if (element.contains(event.relatedTarget)) {
   1983         return;
   1984       }
   1985 
   1986       if (onDragEnterRef.current) {
   1987         onDragEnterRef.current(event);
   1988       }
   1989     }
   1990 
   1991     function onDragOver(event) {
   1992       // Only call onDragOver for the innermost hovered drop zones.
   1993       if (!event.defaultPrevented && onDragOverRef.current) {
   1994         onDragOverRef.current(event);
   1995       } // Prevent the browser default while also signalling to parent
   1996       // drop zones that `onDragOver` is already handled.
   1997 
   1998 
   1999       event.preventDefault();
   2000     }
   2001 
   2002     function onDragLeave(event) {
   2003       // The `dragleave` event will also fire when leaving child
   2004       // elements, but we only want to call `onDragLeave` when
   2005       // leaving the drop zone, which means the `relatedTarget`
   2006       // (element that has been entered) should be outside the drop
   2007       // zone.
   2008       if (isElementInZone(event.relatedTarget)) {
   2009         return;
   2010       }
   2011 
   2012       if (onDragLeaveRef.current) {
   2013         onDragLeaveRef.current(event);
   2014       }
   2015     }
   2016 
   2017     function onDrop(event) {
   2018       // Don't handle drop if an inner drop zone already handled it.
   2019       if (event.defaultPrevented) {
   2020         return;
   2021       } // Prevent the browser default while also signalling to parent
   2022       // drop zones that `onDrop` is already handled.
   2023 
   2024 
   2025       event.preventDefault(); // This seemingly useless line has been shown to resolve a
   2026       // Safari issue where files dragged directly from the dock are
   2027       // not recognized.
   2028       // eslint-disable-next-line no-unused-expressions
   2029 
   2030       event.dataTransfer && event.dataTransfer.files.length;
   2031 
   2032       if (onDropRef.current) {
   2033         onDropRef.current(event);
   2034       }
   2035 
   2036       maybeDragEnd(event);
   2037     }
   2038 
   2039     function maybeDragEnd(event) {
   2040       if (!isDragging) {
   2041         return;
   2042       }
   2043 
   2044       isDragging = false;
   2045       ownerDocument.addEventListener('dragenter', maybeDragStart);
   2046       ownerDocument.removeEventListener('dragend', maybeDragEnd);
   2047       ownerDocument.removeEventListener('mousemove', maybeDragEnd);
   2048 
   2049       if (onDragEndRef.current) {
   2050         onDragEndRef.current(event);
   2051       }
   2052     }
   2053 
   2054     element.dataset.isDropZone = 'true';
   2055     element.addEventListener('drop', onDrop);
   2056     element.addEventListener('dragenter', onDragEnter);
   2057     element.addEventListener('dragover', onDragOver);
   2058     element.addEventListener('dragleave', onDragLeave); // The `dragstart` event doesn't fire if the drag started outside
   2059     // the document.
   2060 
   2061     ownerDocument.addEventListener('dragenter', maybeDragStart);
   2062     return () => {
   2063       delete element.dataset.isDropZone;
   2064       element.removeEventListener('drop', onDrop);
   2065       element.removeEventListener('dragenter', onDragEnter);
   2066       element.removeEventListener('dragover', onDragOver);
   2067       element.removeEventListener('dragleave', onDragLeave);
   2068       ownerDocument.removeEventListener('dragend', maybeDragEnd);
   2069       ownerDocument.removeEventListener('mousemove', maybeDragEnd);
   2070       ownerDocument.addEventListener('dragenter', maybeDragStart);
   2071     };
   2072   }, [isDisabled]);
   2073 }
   2074 
   2075 // CONCATENATED MODULE: ./node_modules/@wordpress/compose/build-module/index.js
   2076 // Utils
   2077  // Compose helper (aliased flowRight from Lodash)
   2078 
   2079  // Higher-order components
   2080 
   2081 
   2082 
   2083 
   2084 
   2085 
   2086  // Hooks
   2087 
   2088 
   2089 
   2090 
   2091 
   2092 
   2093 
   2094 
   2095 
   2096 
   2097 
   2098 
   2099 
   2100 
   2101 
   2102 
   2103 
   2104 
   2105 
   2106 
   2107 
   2108 
   2109 
   2110 
   2111 
   2112 
   2113 /***/ }),
   2114 
   2115 /***/ "RxS6":
   2116 /***/ (function(module, exports) {
   2117 
   2118 (function() { module.exports = window["wp"]["keycodes"]; }());
   2119 
   2120 /***/ }),
   2121 
   2122 /***/ "SSiF":
   2123 /***/ (function(module, exports, __webpack_require__) {
   2124 
   2125 var e=__webpack_require__("cDcd"),n={display:"block",opacity:0,position:"absolute",top:0,left:0,height:"100%",width:"100%",overflow:"hidden",pointerEvents:"none",zIndex:-1},t=function(t){var r=t.onResize,u=e.useRef();return function(n,t){var r=function(){return n.current&&n.current.contentDocument&&n.current.contentDocument.defaultView};function u(){t();var e=r();e&&e.addEventListener("resize",t)}e.useEffect((function(){return r()?u():n.current&&n.current.addEventListener&&n.current.addEventListener("load",u),function(){var e=r();e&&"function"==typeof e.removeEventListener&&e.removeEventListener("resize",t)}}),[])}(u,(function(){return r(u)})),e.createElement("iframe",{style:n,src:"about:blank",ref:u,"aria-hidden":!0,tabIndex:-1,frameBorder:0})},r=function(e){return{width:null!=e?e.offsetWidth:null,height:null!=e?e.offsetHeight:null}};module.exports=function(n){void 0===n&&(n=r);var u=e.useState(n(null)),o=u[0],i=u[1],c=e.useCallback((function(e){return i(n(e.current))}),[n]);return[e.useMemo((function(){return e.createElement(t,{onResize:c})}),[c]),o]};
   2126 
   2127 
   2128 /***/ }),
   2129 
   2130 /***/ "VcSt":
   2131 /***/ (function(module, exports) {
   2132 
   2133 /**
   2134  * adds a bindGlobal method to Mousetrap that allows you to
   2135  * bind specific keyboard shortcuts that will still work
   2136  * inside a text input field
   2137  *
   2138  * usage:
   2139  * Mousetrap.bindGlobal('ctrl+s', _saveChanges);
   2140  */
   2141 /* global Mousetrap:true */
   2142 (function(Mousetrap) {
   2143     if (! Mousetrap) {
   2144         return;
   2145     }
   2146     var _globalCallbacks = {};
   2147     var _originalStopCallback = Mousetrap.prototype.stopCallback;
   2148 
   2149     Mousetrap.prototype.stopCallback = function(e, element, combo, sequence) {
   2150         var self = this;
   2151 
   2152         if (self.paused) {
   2153             return true;
   2154         }
   2155 
   2156         if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {
   2157             return false;
   2158         }
   2159 
   2160         return _originalStopCallback.call(self, e, element, combo);
   2161     };
   2162 
   2163     Mousetrap.prototype.bindGlobal = function(keys, callback, action) {
   2164         var self = this;
   2165         self.bind(keys, callback, action);
   2166 
   2167         if (keys instanceof Array) {
   2168             for (var i = 0; i < keys.length; i++) {
   2169                 _globalCallbacks[keys[i]] = true;
   2170             }
   2171             return;
   2172         }
   2173 
   2174         _globalCallbacks[keys] = true;
   2175     };
   2176 
   2177     Mousetrap.init();
   2178 }) (typeof Mousetrap !== "undefined" ? Mousetrap : undefined);
   2179 
   2180 
   2181 /***/ }),
   2182 
   2183 /***/ "XI5e":
   2184 /***/ (function(module, exports) {
   2185 
   2186 (function() { module.exports = window["wp"]["priorityQueue"]; }());
   2187 
   2188 /***/ }),
   2189 
   2190 /***/ "YLtl":
   2191 /***/ (function(module, exports) {
   2192 
   2193 (function() { module.exports = window["lodash"]; }());
   2194 
   2195 /***/ }),
   2196 
   2197 /***/ "cDcd":
   2198 /***/ (function(module, exports) {
   2199 
   2200 (function() { module.exports = window["React"]; }());
   2201 
   2202 /***/ }),
   2203 
   2204 /***/ "imBb":
   2205 /***/ (function(module, exports, __webpack_require__) {
   2206 
   2207 var __WEBPACK_AMD_DEFINE_RESULT__;/*global define:false */
   2208 /**
   2209  * Copyright 2012-2017 Craig Campbell
   2210  *
   2211  * Licensed under the Apache License, Version 2.0 (the "License");
   2212  * you may not use this file except in compliance with the License.
   2213  * You may obtain a copy of the License at
   2214  *
   2215  * http://www.apache.org/licenses/LICENSE-2.0
   2216  *
   2217  * Unless required by applicable law or agreed to in writing, software
   2218  * distributed under the License is distributed on an "AS IS" BASIS,
   2219  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   2220  * See the License for the specific language governing permissions and
   2221  * limitations under the License.
   2222  *
   2223  * Mousetrap is a simple keyboard shortcut library for Javascript with
   2224  * no external dependencies
   2225  *
   2226  * @version 1.6.5
   2227  * @url craig.is/killing/mice
   2228  */
   2229 (function(window, document, undefined) {
   2230 
   2231     // Check if mousetrap is used inside browser, if not, return
   2232     if (!window) {
   2233         return;
   2234     }
   2235 
   2236     /**
   2237      * mapping of special keycodes to their corresponding keys
   2238      *
   2239      * everything in this dictionary cannot use keypress events
   2240      * so it has to be here to map to the correct keycodes for
   2241      * keyup/keydown events
   2242      *
   2243      * @type {Object}
   2244      */
   2245     var _MAP = {
   2246         8: 'backspace',
   2247         9: 'tab',
   2248         13: 'enter',
   2249         16: 'shift',
   2250         17: 'ctrl',
   2251         18: 'alt',
   2252         20: 'capslock',
   2253         27: 'esc',
   2254         32: 'space',
   2255         33: 'pageup',
   2256         34: 'pagedown',
   2257         35: 'end',
   2258         36: 'home',
   2259         37: 'left',
   2260         38: 'up',
   2261         39: 'right',
   2262         40: 'down',
   2263         45: 'ins',
   2264         46: 'del',
   2265         91: 'meta',
   2266         93: 'meta',
   2267         224: 'meta'
   2268     };
   2269 
   2270     /**
   2271      * mapping for special characters so they can support
   2272      *
   2273      * this dictionary is only used incase you want to bind a
   2274      * keyup or keydown event to one of these keys
   2275      *
   2276      * @type {Object}
   2277      */
   2278     var _KEYCODE_MAP = {
   2279         106: '*',
   2280         107: '+',
   2281         109: '-',
   2282         110: '.',
   2283         111 : '/',
   2284         186: ';',
   2285         187: '=',
   2286         188: ',',
   2287         189: '-',
   2288         190: '.',
   2289         191: '/',
   2290         192: '`',
   2291         219: '[',
   2292         220: '\\',
   2293         221: ']',
   2294         222: '\''
   2295     };
   2296 
   2297     /**
   2298      * this is a mapping of keys that require shift on a US keypad
   2299      * back to the non shift equivelents
   2300      *
   2301      * this is so you can use keyup events with these keys
   2302      *
   2303      * note that this will only work reliably on US keyboards
   2304      *
   2305      * @type {Object}
   2306      */
   2307     var _SHIFT_MAP = {
   2308         '~': '`',
   2309         '!': '1',
   2310         '@': '2',
   2311         '#': '3',
   2312         '$': '4',
   2313         '%': '5',
   2314         '^': '6',
   2315         '&': '7',
   2316         '*': '8',
   2317         '(': '9',
   2318         ')': '0',
   2319         '_': '-',
   2320         '+': '=',
   2321         ':': ';',
   2322         '\"': '\'',
   2323         '<': ',',
   2324         '>': '.',
   2325         '?': '/',
   2326         '|': '\\'
   2327     };
   2328 
   2329     /**
   2330      * this is a list of special strings you can use to map
   2331      * to modifier keys when you specify your keyboard shortcuts
   2332      *
   2333      * @type {Object}
   2334      */
   2335     var _SPECIAL_ALIASES = {
   2336         'option': 'alt',
   2337         'command': 'meta',
   2338         'return': 'enter',
   2339         'escape': 'esc',
   2340         'plus': '+',
   2341         'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'
   2342     };
   2343 
   2344     /**
   2345      * variable to store the flipped version of _MAP from above
   2346      * needed to check if we should use keypress or not when no action
   2347      * is specified
   2348      *
   2349      * @type {Object|undefined}
   2350      */
   2351     var _REVERSE_MAP;
   2352 
   2353     /**
   2354      * loop through the f keys, f1 to f19 and add them to the map
   2355      * programatically
   2356      */
   2357     for (var i = 1; i < 20; ++i) {
   2358         _MAP[111 + i] = 'f' + i;
   2359     }
   2360 
   2361     /**
   2362      * loop through to map numbers on the numeric keypad
   2363      */
   2364     for (i = 0; i <= 9; ++i) {
   2365 
   2366         // This needs to use a string cause otherwise since 0 is falsey
   2367         // mousetrap will never fire for numpad 0 pressed as part of a keydown
   2368         // event.
   2369         //
   2370         // @see https://github.com/ccampbell/mousetrap/pull/258
   2371         _MAP[i + 96] = i.toString();
   2372     }
   2373 
   2374     /**
   2375      * cross browser add event method
   2376      *
   2377      * @param {Element|HTMLDocument} object
   2378      * @param {string} type
   2379      * @param {Function} callback
   2380      * @returns void
   2381      */
   2382     function _addEvent(object, type, callback) {
   2383         if (object.addEventListener) {
   2384             object.addEventListener(type, callback, false);
   2385             return;
   2386         }
   2387 
   2388         object.attachEvent('on' + type, callback);
   2389     }
   2390 
   2391     /**
   2392      * takes the event and returns the key character
   2393      *
   2394      * @param {Event} e
   2395      * @return {string}
   2396      */
   2397     function _characterFromEvent(e) {
   2398 
   2399         // for keypress events we should return the character as is
   2400         if (e.type == 'keypress') {
   2401             var character = String.fromCharCode(e.which);
   2402 
   2403             // if the shift key is not pressed then it is safe to assume
   2404             // that we want the character to be lowercase.  this means if
   2405             // you accidentally have caps lock on then your key bindings
   2406             // will continue to work
   2407             //
   2408             // the only side effect that might not be desired is if you
   2409             // bind something like 'A' cause you want to trigger an
   2410             // event when capital A is pressed caps lock will no longer
   2411             // trigger the event.  shift+a will though.
   2412             if (!e.shiftKey) {
   2413                 character = character.toLowerCase();
   2414             }
   2415 
   2416             return character;
   2417         }
   2418 
   2419         // for non keypress events the special maps are needed
   2420         if (_MAP[e.which]) {
   2421             return _MAP[e.which];
   2422         }
   2423 
   2424         if (_KEYCODE_MAP[e.which]) {
   2425             return _KEYCODE_MAP[e.which];
   2426         }
   2427 
   2428         // if it is not in the special map
   2429 
   2430         // with keydown and keyup events the character seems to always
   2431         // come in as an uppercase character whether you are pressing shift
   2432         // or not.  we should make sure it is always lowercase for comparisons
   2433         return String.fromCharCode(e.which).toLowerCase();
   2434     }
   2435 
   2436     /**
   2437      * checks if two arrays are equal
   2438      *
   2439      * @param {Array} modifiers1
   2440      * @param {Array} modifiers2
   2441      * @returns {boolean}
   2442      */
   2443     function _modifiersMatch(modifiers1, modifiers2) {
   2444         return modifiers1.sort().join(',') === modifiers2.sort().join(',');
   2445     }
   2446 
   2447     /**
   2448      * takes a key event and figures out what the modifiers are
   2449      *
   2450      * @param {Event} e
   2451      * @returns {Array}
   2452      */
   2453     function _eventModifiers(e) {
   2454         var modifiers = [];
   2455 
   2456         if (e.shiftKey) {
   2457             modifiers.push('shift');
   2458         }
   2459 
   2460         if (e.altKey) {
   2461             modifiers.push('alt');
   2462         }
   2463 
   2464         if (e.ctrlKey) {
   2465             modifiers.push('ctrl');
   2466         }
   2467 
   2468         if (e.metaKey) {
   2469             modifiers.push('meta');
   2470         }
   2471 
   2472         return modifiers;
   2473     }
   2474 
   2475     /**
   2476      * prevents default for this event
   2477      *
   2478      * @param {Event} e
   2479      * @returns void
   2480      */
   2481     function _preventDefault(e) {
   2482         if (e.preventDefault) {
   2483             e.preventDefault();
   2484             return;
   2485         }
   2486 
   2487         e.returnValue = false;
   2488     }
   2489 
   2490     /**
   2491      * stops propogation for this event
   2492      *
   2493      * @param {Event} e
   2494      * @returns void
   2495      */
   2496     function _stopPropagation(e) {
   2497         if (e.stopPropagation) {
   2498             e.stopPropagation();
   2499             return;
   2500         }
   2501 
   2502         e.cancelBubble = true;
   2503     }
   2504 
   2505     /**
   2506      * determines if the keycode specified is a modifier key or not
   2507      *
   2508      * @param {string} key
   2509      * @returns {boolean}
   2510      */
   2511     function _isModifier(key) {
   2512         return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
   2513     }
   2514 
   2515     /**
   2516      * reverses the map lookup so that we can look for specific keys
   2517      * to see what can and can't use keypress
   2518      *
   2519      * @return {Object}
   2520      */
   2521     function _getReverseMap() {
   2522         if (!_REVERSE_MAP) {
   2523             _REVERSE_MAP = {};
   2524             for (var key in _MAP) {
   2525 
   2526                 // pull out the numeric keypad from here cause keypress should
   2527                 // be able to detect the keys from the character
   2528                 if (key > 95 && key < 112) {
   2529                     continue;
   2530                 }
   2531 
   2532                 if (_MAP.hasOwnProperty(key)) {
   2533                     _REVERSE_MAP[_MAP[key]] = key;
   2534                 }
   2535             }
   2536         }
   2537         return _REVERSE_MAP;
   2538     }
   2539 
   2540     /**
   2541      * picks the best action based on the key combination
   2542      *
   2543      * @param {string} key - character for key
   2544      * @param {Array} modifiers
   2545      * @param {string=} action passed in
   2546      */
   2547     function _pickBestAction(key, modifiers, action) {
   2548 
   2549         // if no action was picked in we should try to pick the one
   2550         // that we think would work best for this key
   2551         if (!action) {
   2552             action = _getReverseMap()[key] ? 'keydown' : 'keypress';
   2553         }
   2554 
   2555         // modifier keys don't work as expected with keypress,
   2556         // switch to keydown
   2557         if (action == 'keypress' && modifiers.length) {
   2558             action = 'keydown';
   2559         }
   2560 
   2561         return action;
   2562     }
   2563 
   2564     /**
   2565      * Converts from a string key combination to an array
   2566      *
   2567      * @param  {string} combination like "command+shift+l"
   2568      * @return {Array}
   2569      */
   2570     function _keysFromString(combination) {
   2571         if (combination === '+') {
   2572             return ['+'];
   2573         }
   2574 
   2575         combination = combination.replace(/\+{2}/g, '+plus');
   2576         return combination.split('+');
   2577     }
   2578 
   2579     /**
   2580      * Gets info for a specific key combination
   2581      *
   2582      * @param  {string} combination key combination ("command+s" or "a" or "*")
   2583      * @param  {string=} action
   2584      * @returns {Object}
   2585      */
   2586     function _getKeyInfo(combination, action) {
   2587         var keys;
   2588         var key;
   2589         var i;
   2590         var modifiers = [];
   2591 
   2592         // take the keys from this pattern and figure out what the actual
   2593         // pattern is all about
   2594         keys = _keysFromString(combination);
   2595 
   2596         for (i = 0; i < keys.length; ++i) {
   2597             key = keys[i];
   2598 
   2599             // normalize key names
   2600             if (_SPECIAL_ALIASES[key]) {
   2601                 key = _SPECIAL_ALIASES[key];
   2602             }
   2603 
   2604             // if this is not a keypress event then we should
   2605             // be smart about using shift keys
   2606             // this will only work for US keyboards however
   2607             if (action && action != 'keypress' && _SHIFT_MAP[key]) {
   2608                 key = _SHIFT_MAP[key];
   2609                 modifiers.push('shift');
   2610             }
   2611 
   2612             // if this key is a modifier then add it to the list of modifiers
   2613             if (_isModifier(key)) {
   2614                 modifiers.push(key);
   2615             }
   2616         }
   2617 
   2618         // depending on what the key combination is
   2619         // we will try to pick the best event for it
   2620         action = _pickBestAction(key, modifiers, action);
   2621 
   2622         return {
   2623             key: key,
   2624             modifiers: modifiers,
   2625             action: action
   2626         };
   2627     }
   2628 
   2629     function _belongsTo(element, ancestor) {
   2630         if (element === null || element === document) {
   2631             return false;
   2632         }
   2633 
   2634         if (element === ancestor) {
   2635             return true;
   2636         }
   2637 
   2638         return _belongsTo(element.parentNode, ancestor);
   2639     }
   2640 
   2641     function Mousetrap(targetElement) {
   2642         var self = this;
   2643 
   2644         targetElement = targetElement || document;
   2645 
   2646         if (!(self instanceof Mousetrap)) {
   2647             return new Mousetrap(targetElement);
   2648         }
   2649 
   2650         /**
   2651          * element to attach key events to
   2652          *
   2653          * @type {Element}
   2654          */
   2655         self.target = targetElement;
   2656 
   2657         /**
   2658          * a list of all the callbacks setup via Mousetrap.bind()
   2659          *
   2660          * @type {Object}
   2661          */
   2662         self._callbacks = {};
   2663 
   2664         /**
   2665          * direct map of string combinations to callbacks used for trigger()
   2666          *
   2667          * @type {Object}
   2668          */
   2669         self._directMap = {};
   2670 
   2671         /**
   2672          * keeps track of what level each sequence is at since multiple
   2673          * sequences can start out with the same sequence
   2674          *
   2675          * @type {Object}
   2676          */
   2677         var _sequenceLevels = {};
   2678 
   2679         /**
   2680          * variable to store the setTimeout call
   2681          *
   2682          * @type {null|number}
   2683          */
   2684         var _resetTimer;
   2685 
   2686         /**
   2687          * temporary state where we will ignore the next keyup
   2688          *
   2689          * @type {boolean|string}
   2690          */
   2691         var _ignoreNextKeyup = false;
   2692 
   2693         /**
   2694          * temporary state where we will ignore the next keypress
   2695          *
   2696          * @type {boolean}
   2697          */
   2698         var _ignoreNextKeypress = false;
   2699 
   2700         /**
   2701          * are we currently inside of a sequence?
   2702          * type of action ("keyup" or "keydown" or "keypress") or false
   2703          *
   2704          * @type {boolean|string}
   2705          */
   2706         var _nextExpectedAction = false;
   2707 
   2708         /**
   2709          * resets all sequence counters except for the ones passed in
   2710          *
   2711          * @param {Object} doNotReset
   2712          * @returns void
   2713          */
   2714         function _resetSequences(doNotReset) {
   2715             doNotReset = doNotReset || {};
   2716 
   2717             var activeSequences = false,
   2718                 key;
   2719 
   2720             for (key in _sequenceLevels) {
   2721                 if (doNotReset[key]) {
   2722                     activeSequences = true;
   2723                     continue;
   2724                 }
   2725                 _sequenceLevels[key] = 0;
   2726             }
   2727 
   2728             if (!activeSequences) {
   2729                 _nextExpectedAction = false;
   2730             }
   2731         }
   2732 
   2733         /**
   2734          * finds all callbacks that match based on the keycode, modifiers,
   2735          * and action
   2736          *
   2737          * @param {string} character
   2738          * @param {Array} modifiers
   2739          * @param {Event|Object} e
   2740          * @param {string=} sequenceName - name of the sequence we are looking for
   2741          * @param {string=} combination
   2742          * @param {number=} level
   2743          * @returns {Array}
   2744          */
   2745         function _getMatches(character, modifiers, e, sequenceName, combination, level) {
   2746             var i;
   2747             var callback;
   2748             var matches = [];
   2749             var action = e.type;
   2750 
   2751             // if there are no events related to this keycode
   2752             if (!self._callbacks[character]) {
   2753                 return [];
   2754             }
   2755 
   2756             // if a modifier key is coming up on its own we should allow it
   2757             if (action == 'keyup' && _isModifier(character)) {
   2758                 modifiers = [character];
   2759             }
   2760 
   2761             // loop through all callbacks for the key that was pressed
   2762             // and see if any of them match
   2763             for (i = 0; i < self._callbacks[character].length; ++i) {
   2764                 callback = self._callbacks[character][i];
   2765 
   2766                 // if a sequence name is not specified, but this is a sequence at
   2767                 // the wrong level then move onto the next match
   2768                 if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {
   2769                     continue;
   2770                 }
   2771 
   2772                 // if the action we are looking for doesn't match the action we got
   2773                 // then we should keep going
   2774                 if (action != callback.action) {
   2775                     continue;
   2776                 }
   2777 
   2778                 // if this is a keypress event and the meta key and control key
   2779                 // are not pressed that means that we need to only look at the
   2780                 // character, otherwise check the modifiers as well
   2781                 //
   2782                 // chrome will not fire a keypress if meta or control is down
   2783                 // safari will fire a keypress if meta or meta+shift is down
   2784                 // firefox will fire a keypress if meta or control is down
   2785                 if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {
   2786 
   2787                     // when you bind a combination or sequence a second time it
   2788                     // should overwrite the first one.  if a sequenceName or
   2789                     // combination is specified in this call it does just that
   2790                     //
   2791                     // @todo make deleting its own method?
   2792                     var deleteCombo = !sequenceName && callback.combo == combination;
   2793                     var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;
   2794                     if (deleteCombo || deleteSequence) {
   2795                         self._callbacks[character].splice(i, 1);
   2796                     }
   2797 
   2798                     matches.push(callback);
   2799                 }
   2800             }
   2801 
   2802             return matches;
   2803         }
   2804 
   2805         /**
   2806          * actually calls the callback function
   2807          *
   2808          * if your callback function returns false this will use the jquery
   2809          * convention - prevent default and stop propogation on the event
   2810          *
   2811          * @param {Function} callback
   2812          * @param {Event} e
   2813          * @returns void
   2814          */
   2815         function _fireCallback(callback, e, combo, sequence) {
   2816 
   2817             // if this event should not happen stop here
   2818             if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {
   2819                 return;
   2820             }
   2821 
   2822             if (callback(e, combo) === false) {
   2823                 _preventDefault(e);
   2824                 _stopPropagation(e);
   2825             }
   2826         }
   2827 
   2828         /**
   2829          * handles a character key event
   2830          *
   2831          * @param {string} character
   2832          * @param {Array} modifiers
   2833          * @param {Event} e
   2834          * @returns void
   2835          */
   2836         self._handleKey = function(character, modifiers, e) {
   2837             var callbacks = _getMatches(character, modifiers, e);
   2838             var i;
   2839             var doNotReset = {};
   2840             var maxLevel = 0;
   2841             var processedSequenceCallback = false;
   2842 
   2843             // Calculate the maxLevel for sequences so we can only execute the longest callback sequence
   2844             for (i = 0; i < callbacks.length; ++i) {
   2845                 if (callbacks[i].seq) {
   2846                     maxLevel = Math.max(maxLevel, callbacks[i].level);
   2847                 }
   2848             }
   2849 
   2850             // loop through matching callbacks for this key event
   2851             for (i = 0; i < callbacks.length; ++i) {
   2852 
   2853                 // fire for all sequence callbacks
   2854                 // this is because if for example you have multiple sequences
   2855                 // bound such as "g i" and "g t" they both need to fire the
   2856                 // callback for matching g cause otherwise you can only ever
   2857                 // match the first one
   2858                 if (callbacks[i].seq) {
   2859 
   2860                     // only fire callbacks for the maxLevel to prevent
   2861                     // subsequences from also firing
   2862                     //
   2863                     // for example 'a option b' should not cause 'option b' to fire
   2864                     // even though 'option b' is part of the other sequence
   2865                     //
   2866                     // any sequences that do not match here will be discarded
   2867                     // below by the _resetSequences call
   2868                     if (callbacks[i].level != maxLevel) {
   2869                         continue;
   2870                     }
   2871 
   2872                     processedSequenceCallback = true;
   2873 
   2874                     // keep a list of which sequences were matches for later
   2875                     doNotReset[callbacks[i].seq] = 1;
   2876                     _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);
   2877                     continue;
   2878                 }
   2879 
   2880                 // if there were no sequence matches but we are still here
   2881                 // that means this is a regular match so we should fire that
   2882                 if (!processedSequenceCallback) {
   2883                     _fireCallback(callbacks[i].callback, e, callbacks[i].combo);
   2884                 }
   2885             }
   2886 
   2887             // if the key you pressed matches the type of sequence without
   2888             // being a modifier (ie "keyup" or "keypress") then we should
   2889             // reset all sequences that were not matched by this event
   2890             //
   2891             // this is so, for example, if you have the sequence "h a t" and you
   2892             // type "h e a r t" it does not match.  in this case the "e" will
   2893             // cause the sequence to reset
   2894             //
   2895             // modifier keys are ignored because you can have a sequence
   2896             // that contains modifiers such as "enter ctrl+space" and in most
   2897             // cases the modifier key will be pressed before the next key
   2898             //
   2899             // also if you have a sequence such as "ctrl+b a" then pressing the
   2900             // "b" key will trigger a "keypress" and a "keydown"
   2901             //
   2902             // the "keydown" is expected when there is a modifier, but the
   2903             // "keypress" ends up matching the _nextExpectedAction since it occurs
   2904             // after and that causes the sequence to reset
   2905             //
   2906             // we ignore keypresses in a sequence that directly follow a keydown
   2907             // for the same character
   2908             var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;
   2909             if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {
   2910                 _resetSequences(doNotReset);
   2911             }
   2912 
   2913             _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';
   2914         };
   2915 
   2916         /**
   2917          * handles a keydown event
   2918          *
   2919          * @param {Event} e
   2920          * @returns void
   2921          */
   2922         function _handleKeyEvent(e) {
   2923 
   2924             // normalize e.which for key events
   2925             // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
   2926             if (typeof e.which !== 'number') {
   2927                 e.which = e.keyCode;
   2928             }
   2929 
   2930             var character = _characterFromEvent(e);
   2931 
   2932             // no character found then stop
   2933             if (!character) {
   2934                 return;
   2935             }
   2936 
   2937             // need to use === for the character check because the character can be 0
   2938             if (e.type == 'keyup' && _ignoreNextKeyup === character) {
   2939                 _ignoreNextKeyup = false;
   2940                 return;
   2941             }
   2942 
   2943             self.handleKey(character, _eventModifiers(e), e);
   2944         }
   2945 
   2946         /**
   2947          * called to set a 1 second timeout on the specified sequence
   2948          *
   2949          * this is so after each key press in the sequence you have 1 second
   2950          * to press the next key before you have to start over
   2951          *
   2952          * @returns void
   2953          */
   2954         function _resetSequenceTimer() {
   2955             clearTimeout(_resetTimer);
   2956             _resetTimer = setTimeout(_resetSequences, 1000);
   2957         }
   2958 
   2959         /**
   2960          * binds a key sequence to an event
   2961          *
   2962          * @param {string} combo - combo specified in bind call
   2963          * @param {Array} keys
   2964          * @param {Function} callback
   2965          * @param {string=} action
   2966          * @returns void
   2967          */
   2968         function _bindSequence(combo, keys, callback, action) {
   2969 
   2970             // start off by adding a sequence level record for this combination
   2971             // and setting the level to 0
   2972             _sequenceLevels[combo] = 0;
   2973 
   2974             /**
   2975              * callback to increase the sequence level for this sequence and reset
   2976              * all other sequences that were active
   2977              *
   2978              * @param {string} nextAction
   2979              * @returns {Function}
   2980              */
   2981             function _increaseSequence(nextAction) {
   2982                 return function() {
   2983                     _nextExpectedAction = nextAction;
   2984                     ++_sequenceLevels[combo];
   2985                     _resetSequenceTimer();
   2986                 };
   2987             }
   2988 
   2989             /**
   2990              * wraps the specified callback inside of another function in order
   2991              * to reset all sequence counters as soon as this sequence is done
   2992              *
   2993              * @param {Event} e
   2994              * @returns void
   2995              */
   2996             function _callbackAndReset(e) {
   2997                 _fireCallback(callback, e, combo);
   2998 
   2999                 // we should ignore the next key up if the action is key down
   3000                 // or keypress.  this is so if you finish a sequence and
   3001                 // release the key the final key will not trigger a keyup
   3002                 if (action !== 'keyup') {
   3003                     _ignoreNextKeyup = _characterFromEvent(e);
   3004                 }
   3005 
   3006                 // weird race condition if a sequence ends with the key
   3007                 // another sequence begins with
   3008                 setTimeout(_resetSequences, 10);
   3009             }
   3010 
   3011             // loop through keys one at a time and bind the appropriate callback
   3012             // function.  for any key leading up to the final one it should
   3013             // increase the sequence. after the final, it should reset all sequences
   3014             //
   3015             // if an action is specified in the original bind call then that will
   3016             // be used throughout.  otherwise we will pass the action that the
   3017             // next key in the sequence should match.  this allows a sequence
   3018             // to mix and match keypress and keydown events depending on which
   3019             // ones are better suited to the key provided
   3020             for (var i = 0; i < keys.length; ++i) {
   3021                 var isFinal = i + 1 === keys.length;
   3022                 var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);
   3023                 _bindSingle(keys[i], wrappedCallback, action, combo, i);
   3024             }
   3025         }
   3026 
   3027         /**
   3028          * binds a single keyboard combination
   3029          *
   3030          * @param {string} combination
   3031          * @param {Function} callback
   3032          * @param {string=} action
   3033          * @param {string=} sequenceName - name of sequence if part of sequence
   3034          * @param {number=} level - what part of the sequence the command is
   3035          * @returns void
   3036          */
   3037         function _bindSingle(combination, callback, action, sequenceName, level) {
   3038 
   3039             // store a direct mapped reference for use with Mousetrap.trigger
   3040             self._directMap[combination + ':' + action] = callback;
   3041 
   3042             // make sure multiple spaces in a row become a single space
   3043             combination = combination.replace(/\s+/g, ' ');
   3044 
   3045             var sequence = combination.split(' ');
   3046             var info;
   3047 
   3048             // if this pattern is a sequence of keys then run through this method
   3049             // to reprocess each pattern one key at a time
   3050             if (sequence.length > 1) {
   3051                 _bindSequence(combination, sequence, callback, action);
   3052                 return;
   3053             }
   3054 
   3055             info = _getKeyInfo(combination, action);
   3056 
   3057             // make sure to initialize array if this is the first time
   3058             // a callback is added for this key
   3059             self._callbacks[info.key] = self._callbacks[info.key] || [];
   3060 
   3061             // remove an existing match if there is one
   3062             _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);
   3063 
   3064             // add this call back to the array
   3065             // if it is a sequence put it at the beginning
   3066             // if not put it at the end
   3067             //
   3068             // this is important because the way these are processed expects
   3069             // the sequence ones to come first
   3070             self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({
   3071                 callback: callback,
   3072                 modifiers: info.modifiers,
   3073                 action: info.action,
   3074                 seq: sequenceName,
   3075                 level: level,
   3076                 combo: combination
   3077             });
   3078         }
   3079 
   3080         /**
   3081          * binds multiple combinations to the same callback
   3082          *
   3083          * @param {Array} combinations
   3084          * @param {Function} callback
   3085          * @param {string|undefined} action
   3086          * @returns void
   3087          */
   3088         self._bindMultiple = function(combinations, callback, action) {
   3089             for (var i = 0; i < combinations.length; ++i) {
   3090                 _bindSingle(combinations[i], callback, action);
   3091             }
   3092         };
   3093 
   3094         // start!
   3095         _addEvent(targetElement, 'keypress', _handleKeyEvent);
   3096         _addEvent(targetElement, 'keydown', _handleKeyEvent);
   3097         _addEvent(targetElement, 'keyup', _handleKeyEvent);
   3098     }
   3099 
   3100     /**
   3101      * binds an event to mousetrap
   3102      *
   3103      * can be a single key, a combination of keys separated with +,
   3104      * an array of keys, or a sequence of keys separated by spaces
   3105      *
   3106      * be sure to list the modifier keys first to make sure that the
   3107      * correct key ends up getting bound (the last key in the pattern)
   3108      *
   3109      * @param {string|Array} keys
   3110      * @param {Function} callback
   3111      * @param {string=} action - 'keypress', 'keydown', or 'keyup'
   3112      * @returns void
   3113      */
   3114     Mousetrap.prototype.bind = function(keys, callback, action) {
   3115         var self = this;
   3116         keys = keys instanceof Array ? keys : [keys];
   3117         self._bindMultiple.call(self, keys, callback, action);
   3118         return self;
   3119     };
   3120 
   3121     /**
   3122      * unbinds an event to mousetrap
   3123      *
   3124      * the unbinding sets the callback function of the specified key combo
   3125      * to an empty function and deletes the corresponding key in the
   3126      * _directMap dict.
   3127      *
   3128      * TODO: actually remove this from the _callbacks dictionary instead
   3129      * of binding an empty function
   3130      *
   3131      * the keycombo+action has to be exactly the same as
   3132      * it was defined in the bind method
   3133      *
   3134      * @param {string|Array} keys
   3135      * @param {string} action
   3136      * @returns void
   3137      */
   3138     Mousetrap.prototype.unbind = function(keys, action) {
   3139         var self = this;
   3140         return self.bind.call(self, keys, function() {}, action);
   3141     };
   3142 
   3143     /**
   3144      * triggers an event that has already been bound
   3145      *
   3146      * @param {string} keys
   3147      * @param {string=} action
   3148      * @returns void
   3149      */
   3150     Mousetrap.prototype.trigger = function(keys, action) {
   3151         var self = this;
   3152         if (self._directMap[keys + ':' + action]) {
   3153             self._directMap[keys + ':' + action]({}, keys);
   3154         }
   3155         return self;
   3156     };
   3157 
   3158     /**
   3159      * resets the library back to its initial state.  this is useful
   3160      * if you want to clear out the current keyboard shortcuts and bind
   3161      * new ones - for example if you switch to another page
   3162      *
   3163      * @returns void
   3164      */
   3165     Mousetrap.prototype.reset = function() {
   3166         var self = this;
   3167         self._callbacks = {};
   3168         self._directMap = {};
   3169         return self;
   3170     };
   3171 
   3172     /**
   3173      * should we stop this event before firing off callbacks
   3174      *
   3175      * @param {Event} e
   3176      * @param {Element} element
   3177      * @return {boolean}
   3178      */
   3179     Mousetrap.prototype.stopCallback = function(e, element) {
   3180         var self = this;
   3181 
   3182         // if the element has the class "mousetrap" then no need to stop
   3183         if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
   3184             return false;
   3185         }
   3186 
   3187         if (_belongsTo(element, self.target)) {
   3188             return false;
   3189         }
   3190 
   3191         // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,
   3192         // not the initial event target in the shadow tree. Note that not all events cross the
   3193         // shadow boundary.
   3194         // For shadow trees with `mode: 'open'`, the initial event target is the first element in
   3195         // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event
   3196         // target cannot be obtained.
   3197         if ('composedPath' in e && typeof e.composedPath === 'function') {
   3198             // For open shadow trees, update `element` so that the following check works.
   3199             var initialEventTarget = e.composedPath()[0];
   3200             if (initialEventTarget !== e.target) {
   3201                 element = initialEventTarget;
   3202             }
   3203         }
   3204 
   3205         // stop for input, select, and textarea
   3206         return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;
   3207     };
   3208 
   3209     /**
   3210      * exposes _handleKey publicly so it can be overwritten by extensions
   3211      */
   3212     Mousetrap.prototype.handleKey = function() {
   3213         var self = this;
   3214         return self._handleKey.apply(self, arguments);
   3215     };
   3216 
   3217     /**
   3218      * allow custom key mappings
   3219      */
   3220     Mousetrap.addKeycodes = function(object) {
   3221         for (var key in object) {
   3222             if (object.hasOwnProperty(key)) {
   3223                 _MAP[key] = object[key];
   3224             }
   3225         }
   3226         _REVERSE_MAP = null;
   3227     };
   3228 
   3229     /**
   3230      * Init the global mousetrap functions
   3231      *
   3232      * This method is needed to allow the global mousetrap functions to work
   3233      * now that mousetrap is a constructor function.
   3234      */
   3235     Mousetrap.init = function() {
   3236         var documentMousetrap = Mousetrap(document);
   3237         for (var method in documentMousetrap) {
   3238             if (method.charAt(0) !== '_') {
   3239                 Mousetrap[method] = (function(method) {
   3240                     return function() {
   3241                         return documentMousetrap[method].apply(documentMousetrap, arguments);
   3242                     };
   3243                 } (method));
   3244             }
   3245         }
   3246     };
   3247 
   3248     Mousetrap.init();
   3249 
   3250     // expose mousetrap to the global object
   3251     window.Mousetrap = Mousetrap;
   3252 
   3253     // expose as a common js module
   3254     if ( true && module.exports) {
   3255         module.exports = Mousetrap;
   3256     }
   3257 
   3258     // expose mousetrap as an AMD module
   3259     if (true) {
   3260         !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
   3261             return Mousetrap;
   3262         }).call(exports, __webpack_require__, exports, module),
   3263 				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
   3264     }
   3265 }) (typeof window !== 'undefined' ? window : null, typeof  window !== 'undefined' ? document : null);
   3266 
   3267 
   3268 /***/ }),
   3269 
   3270 /***/ "mHlH":
   3271 /***/ (function(module, __webpack_exports__, __webpack_require__) {
   3272 
   3273 "use strict";
   3274 /* unused harmony export useCallback */
   3275 /* unused harmony export useCallbackOne */
   3276 /* unused harmony export useMemo */
   3277 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return useMemoOne; });
   3278 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("cDcd");
   3279 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
   3280 
   3281 
   3282 function areInputsEqual(newInputs, lastInputs) {
   3283   if (newInputs.length !== lastInputs.length) {
   3284     return false;
   3285   }
   3286 
   3287   for (var i = 0; i < newInputs.length; i++) {
   3288     if (newInputs[i] !== lastInputs[i]) {
   3289       return false;
   3290     }
   3291   }
   3292 
   3293   return true;
   3294 }
   3295 
   3296 function useMemoOne(getResult, inputs) {
   3297   var initial = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])(function () {
   3298     return {
   3299       inputs: inputs,
   3300       result: getResult()
   3301     };
   3302   })[0];
   3303   var isFirstRun = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(true);
   3304   var committed = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])(initial);
   3305   var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));
   3306   var cache = useCache ? committed.current : {
   3307     inputs: inputs,
   3308     result: getResult()
   3309   };
   3310   Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(function () {
   3311     isFirstRun.current = false;
   3312     committed.current = cache;
   3313   }, [cache]);
   3314   return cache.result;
   3315 }
   3316 function useCallbackOne(callback, inputs) {
   3317   return useMemoOne(function () {
   3318     return callback;
   3319   }, inputs);
   3320 }
   3321 var useMemo = useMemoOne;
   3322 var useCallback = useCallbackOne;
   3323 
   3324 
   3325 
   3326 
   3327 /***/ }),
   3328 
   3329 /***/ "rl8x":
   3330 /***/ (function(module, exports) {
   3331 
   3332 (function() { module.exports = window["wp"]["isShallowEqual"]; }());
   3333 
   3334 /***/ }),
   3335 
   3336 /***/ "sxGJ":
   3337 /***/ (function(module, exports, __webpack_require__) {
   3338 
   3339 /*!
   3340  * clipboard.js v2.0.8
   3341  * https://clipboardjs.com/
   3342  *
   3343  * Licensed MIT © Zeno Rocha
   3344  */
   3345 (function webpackUniversalModuleDefinition(root, factory) {
   3346 	if(true)
   3347 		module.exports = factory();
   3348 	else {}
   3349 })(this, function() {
   3350 return /******/ (function() { // webpackBootstrap
   3351 /******/ 	var __webpack_modules__ = ({
   3352 
   3353 /***/ 134:
   3354 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
   3355 
   3356 "use strict";
   3357 
   3358 // EXPORTS
   3359 __webpack_require__.d(__webpack_exports__, {
   3360   "default": function() { return /* binding */ clipboard; }
   3361 });
   3362 
   3363 // EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js
   3364 var tiny_emitter = __webpack_require__(279);
   3365 var tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);
   3366 // EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js
   3367 var listen = __webpack_require__(370);
   3368 var listen_default = /*#__PURE__*/__webpack_require__.n(listen);
   3369 // EXTERNAL MODULE: ./node_modules/select/src/select.js
   3370 var src_select = __webpack_require__(817);
   3371 var select_default = /*#__PURE__*/__webpack_require__.n(src_select);
   3372 ;// CONCATENATED MODULE: ./src/clipboard-action.js
   3373 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
   3374 
   3375 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
   3376 
   3377 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
   3378 
   3379 function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
   3380 
   3381 
   3382 /**
   3383  * Inner class which performs selection from either `text` or `target`
   3384  * properties and then executes copy or cut operations.
   3385  */
   3386 
   3387 var ClipboardAction = /*#__PURE__*/function () {
   3388   /**
   3389    * @param {Object} options
   3390    */
   3391   function ClipboardAction(options) {
   3392     _classCallCheck(this, ClipboardAction);
   3393 
   3394     this.resolveOptions(options);
   3395     this.initSelection();
   3396   }
   3397   /**
   3398    * Defines base properties passed from constructor.
   3399    * @param {Object} options
   3400    */
   3401 
   3402 
   3403   _createClass(ClipboardAction, [{
   3404     key: "resolveOptions",
   3405     value: function resolveOptions() {
   3406       var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
   3407       this.action = options.action;
   3408       this.container = options.container;
   3409       this.emitter = options.emitter;
   3410       this.target = options.target;
   3411       this.text = options.text;
   3412       this.trigger = options.trigger;
   3413       this.selectedText = '';
   3414     }
   3415     /**
   3416      * Decides which selection strategy is going to be applied based
   3417      * on the existence of `text` and `target` properties.
   3418      */
   3419 
   3420   }, {
   3421     key: "initSelection",
   3422     value: function initSelection() {
   3423       if (this.text) {
   3424         this.selectFake();
   3425       } else if (this.target) {
   3426         this.selectTarget();
   3427       }
   3428     }
   3429     /**
   3430      * Creates a fake textarea element, sets its value from `text` property,
   3431      */
   3432 
   3433   }, {
   3434     key: "createFakeElement",
   3435     value: function createFakeElement() {
   3436       var isRTL = document.documentElement.getAttribute('dir') === 'rtl';
   3437       this.fakeElem = document.createElement('textarea'); // Prevent zooming on iOS
   3438 
   3439       this.fakeElem.style.fontSize = '12pt'; // Reset box model
   3440 
   3441       this.fakeElem.style.border = '0';
   3442       this.fakeElem.style.padding = '0';
   3443       this.fakeElem.style.margin = '0'; // Move element out of screen horizontally
   3444 
   3445       this.fakeElem.style.position = 'absolute';
   3446       this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically
   3447 
   3448       var yPosition = window.pageYOffset || document.documentElement.scrollTop;
   3449       this.fakeElem.style.top = "".concat(yPosition, "px");
   3450       this.fakeElem.setAttribute('readonly', '');
   3451       this.fakeElem.value = this.text;
   3452       return this.fakeElem;
   3453     }
   3454     /**
   3455      * Get's the value of fakeElem,
   3456      * and makes a selection on it.
   3457      */
   3458 
   3459   }, {
   3460     key: "selectFake",
   3461     value: function selectFake() {
   3462       var _this = this;
   3463 
   3464       var fakeElem = this.createFakeElement();
   3465 
   3466       this.fakeHandlerCallback = function () {
   3467         return _this.removeFake();
   3468       };
   3469 
   3470       this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;
   3471       this.container.appendChild(fakeElem);
   3472       this.selectedText = select_default()(fakeElem);
   3473       this.copyText();
   3474       this.removeFake();
   3475     }
   3476     /**
   3477      * Only removes the fake element after another click event, that way
   3478      * a user can hit `Ctrl+C` to copy because selection still exists.
   3479      */
   3480 
   3481   }, {
   3482     key: "removeFake",
   3483     value: function removeFake() {
   3484       if (this.fakeHandler) {
   3485         this.container.removeEventListener('click', this.fakeHandlerCallback);
   3486         this.fakeHandler = null;
   3487         this.fakeHandlerCallback = null;
   3488       }
   3489 
   3490       if (this.fakeElem) {
   3491         this.container.removeChild(this.fakeElem);
   3492         this.fakeElem = null;
   3493       }
   3494     }
   3495     /**
   3496      * Selects the content from element passed on `target` property.
   3497      */
   3498 
   3499   }, {
   3500     key: "selectTarget",
   3501     value: function selectTarget() {
   3502       this.selectedText = select_default()(this.target);
   3503       this.copyText();
   3504     }
   3505     /**
   3506      * Executes the copy operation based on the current selection.
   3507      */
   3508 
   3509   }, {
   3510     key: "copyText",
   3511     value: function copyText() {
   3512       var succeeded;
   3513 
   3514       try {
   3515         succeeded = document.execCommand(this.action);
   3516       } catch (err) {
   3517         succeeded = false;
   3518       }
   3519 
   3520       this.handleResult(succeeded);
   3521     }
   3522     /**
   3523      * Fires an event based on the copy operation result.
   3524      * @param {Boolean} succeeded
   3525      */
   3526 
   3527   }, {
   3528     key: "handleResult",
   3529     value: function handleResult(succeeded) {
   3530       this.emitter.emit(succeeded ? 'success' : 'error', {
   3531         action: this.action,
   3532         text: this.selectedText,
   3533         trigger: this.trigger,
   3534         clearSelection: this.clearSelection.bind(this)
   3535       });
   3536     }
   3537     /**
   3538      * Moves focus away from `target` and back to the trigger, removes current selection.
   3539      */
   3540 
   3541   }, {
   3542     key: "clearSelection",
   3543     value: function clearSelection() {
   3544       if (this.trigger) {
   3545         this.trigger.focus();
   3546       }
   3547 
   3548       document.activeElement.blur();
   3549       window.getSelection().removeAllRanges();
   3550     }
   3551     /**
   3552      * Sets the `action` to be performed which can be either 'copy' or 'cut'.
   3553      * @param {String} action
   3554      */
   3555 
   3556   }, {
   3557     key: "destroy",
   3558 
   3559     /**
   3560      * Destroy lifecycle.
   3561      */
   3562     value: function destroy() {
   3563       this.removeFake();
   3564     }
   3565   }, {
   3566     key: "action",
   3567     set: function set() {
   3568       var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';
   3569       this._action = action;
   3570 
   3571       if (this._action !== 'copy' && this._action !== 'cut') {
   3572         throw new Error('Invalid "action" value, use either "copy" or "cut"');
   3573       }
   3574     }
   3575     /**
   3576      * Gets the `action` property.
   3577      * @return {String}
   3578      */
   3579     ,
   3580     get: function get() {
   3581       return this._action;
   3582     }
   3583     /**
   3584      * Sets the `target` property using an element
   3585      * that will be have its content copied.
   3586      * @param {Element} target
   3587      */
   3588 
   3589   }, {
   3590     key: "target",
   3591     set: function set(target) {
   3592       if (target !== undefined) {
   3593         if (target && _typeof(target) === 'object' && target.nodeType === 1) {
   3594           if (this.action === 'copy' && target.hasAttribute('disabled')) {
   3595             throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
   3596           }
   3597 
   3598           if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
   3599             throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
   3600           }
   3601 
   3602           this._target = target;
   3603         } else {
   3604           throw new Error('Invalid "target" value, use a valid Element');
   3605         }
   3606       }
   3607     }
   3608     /**
   3609      * Gets the `target` property.
   3610      * @return {String|HTMLElement}
   3611      */
   3612     ,
   3613     get: function get() {
   3614       return this._target;
   3615     }
   3616   }]);
   3617 
   3618   return ClipboardAction;
   3619 }();
   3620 
   3621 /* harmony default export */ var clipboard_action = (ClipboardAction);
   3622 ;// CONCATENATED MODULE: ./src/clipboard.js
   3623 function clipboard_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return clipboard_typeof(obj); }
   3624 
   3625 function clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
   3626 
   3627 function clipboard_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
   3628 
   3629 function clipboard_createClass(Constructor, protoProps, staticProps) { if (protoProps) clipboard_defineProperties(Constructor.prototype, protoProps); if (staticProps) clipboard_defineProperties(Constructor, staticProps); return Constructor; }
   3630 
   3631 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
   3632 
   3633 function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
   3634 
   3635 function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
   3636 
   3637 function _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
   3638 
   3639 function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
   3640 
   3641 function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
   3642 
   3643 function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
   3644 
   3645 
   3646 
   3647 
   3648 /**
   3649  * Helper function to retrieve attribute value.
   3650  * @param {String} suffix
   3651  * @param {Element} element
   3652  */
   3653 
   3654 function getAttributeValue(suffix, element) {
   3655   var attribute = "data-clipboard-".concat(suffix);
   3656 
   3657   if (!element.hasAttribute(attribute)) {
   3658     return;
   3659   }
   3660 
   3661   return element.getAttribute(attribute);
   3662 }
   3663 /**
   3664  * Base class which takes one or more elements, adds event listeners to them,
   3665  * and instantiates a new `ClipboardAction` on each click.
   3666  */
   3667 
   3668 
   3669 var Clipboard = /*#__PURE__*/function (_Emitter) {
   3670   _inherits(Clipboard, _Emitter);
   3671 
   3672   var _super = _createSuper(Clipboard);
   3673 
   3674   /**
   3675    * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
   3676    * @param {Object} options
   3677    */
   3678   function Clipboard(trigger, options) {
   3679     var _this;
   3680 
   3681     clipboard_classCallCheck(this, Clipboard);
   3682 
   3683     _this = _super.call(this);
   3684 
   3685     _this.resolveOptions(options);
   3686 
   3687     _this.listenClick(trigger);
   3688 
   3689     return _this;
   3690   }
   3691   /**
   3692    * Defines if attributes would be resolved using internal setter functions
   3693    * or custom functions that were passed in the constructor.
   3694    * @param {Object} options
   3695    */
   3696 
   3697 
   3698   clipboard_createClass(Clipboard, [{
   3699     key: "resolveOptions",
   3700     value: function resolveOptions() {
   3701       var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
   3702       this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
   3703       this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
   3704       this.text = typeof options.text === 'function' ? options.text : this.defaultText;
   3705       this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;
   3706     }
   3707     /**
   3708      * Adds a click event listener to the passed trigger.
   3709      * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
   3710      */
   3711 
   3712   }, {
   3713     key: "listenClick",
   3714     value: function listenClick(trigger) {
   3715       var _this2 = this;
   3716 
   3717       this.listener = listen_default()(trigger, 'click', function (e) {
   3718         return _this2.onClick(e);
   3719       });
   3720     }
   3721     /**
   3722      * Defines a new `ClipboardAction` on each click event.
   3723      * @param {Event} e
   3724      */
   3725 
   3726   }, {
   3727     key: "onClick",
   3728     value: function onClick(e) {
   3729       var trigger = e.delegateTarget || e.currentTarget;
   3730 
   3731       if (this.clipboardAction) {
   3732         this.clipboardAction = null;
   3733       }
   3734 
   3735       this.clipboardAction = new clipboard_action({
   3736         action: this.action(trigger),
   3737         target: this.target(trigger),
   3738         text: this.text(trigger),
   3739         container: this.container,
   3740         trigger: trigger,
   3741         emitter: this
   3742       });
   3743     }
   3744     /**
   3745      * Default `action` lookup function.
   3746      * @param {Element} trigger
   3747      */
   3748 
   3749   }, {
   3750     key: "defaultAction",
   3751     value: function defaultAction(trigger) {
   3752       return getAttributeValue('action', trigger);
   3753     }
   3754     /**
   3755      * Default `target` lookup function.
   3756      * @param {Element} trigger
   3757      */
   3758 
   3759   }, {
   3760     key: "defaultTarget",
   3761     value: function defaultTarget(trigger) {
   3762       var selector = getAttributeValue('target', trigger);
   3763 
   3764       if (selector) {
   3765         return document.querySelector(selector);
   3766       }
   3767     }
   3768     /**
   3769      * Returns the support of the given action, or all actions if no action is
   3770      * given.
   3771      * @param {String} [action]
   3772      */
   3773 
   3774   }, {
   3775     key: "defaultText",
   3776 
   3777     /**
   3778      * Default `text` lookup function.
   3779      * @param {Element} trigger
   3780      */
   3781     value: function defaultText(trigger) {
   3782       return getAttributeValue('text', trigger);
   3783     }
   3784     /**
   3785      * Destroy lifecycle.
   3786      */
   3787 
   3788   }, {
   3789     key: "destroy",
   3790     value: function destroy() {
   3791       this.listener.destroy();
   3792 
   3793       if (this.clipboardAction) {
   3794         this.clipboardAction.destroy();
   3795         this.clipboardAction = null;
   3796       }
   3797     }
   3798   }], [{
   3799     key: "isSupported",
   3800     value: function isSupported() {
   3801       var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
   3802       var actions = typeof action === 'string' ? [action] : action;
   3803       var support = !!document.queryCommandSupported;
   3804       actions.forEach(function (action) {
   3805         support = support && !!document.queryCommandSupported(action);
   3806       });
   3807       return support;
   3808     }
   3809   }]);
   3810 
   3811   return Clipboard;
   3812 }((tiny_emitter_default()));
   3813 
   3814 /* harmony default export */ var clipboard = (Clipboard);
   3815 
   3816 /***/ }),
   3817 
   3818 /***/ 828:
   3819 /***/ (function(module) {
   3820 
   3821 var DOCUMENT_NODE_TYPE = 9;
   3822 
   3823 /**
   3824  * A polyfill for Element.matches()
   3825  */
   3826 if (typeof Element !== 'undefined' && !Element.prototype.matches) {
   3827     var proto = Element.prototype;
   3828 
   3829     proto.matches = proto.matchesSelector ||
   3830                     proto.mozMatchesSelector ||
   3831                     proto.msMatchesSelector ||
   3832                     proto.oMatchesSelector ||
   3833                     proto.webkitMatchesSelector;
   3834 }
   3835 
   3836 /**
   3837  * Finds the closest parent that matches a selector.
   3838  *
   3839  * @param {Element} element
   3840  * @param {String} selector
   3841  * @return {Function}
   3842  */
   3843 function closest (element, selector) {
   3844     while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
   3845         if (typeof element.matches === 'function' &&
   3846             element.matches(selector)) {
   3847           return element;
   3848         }
   3849         element = element.parentNode;
   3850     }
   3851 }
   3852 
   3853 module.exports = closest;
   3854 
   3855 
   3856 /***/ }),
   3857 
   3858 /***/ 438:
   3859 /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
   3860 
   3861 var closest = __webpack_require__(828);
   3862 
   3863 /**
   3864  * Delegates event to a selector.
   3865  *
   3866  * @param {Element} element
   3867  * @param {String} selector
   3868  * @param {String} type
   3869  * @param {Function} callback
   3870  * @param {Boolean} useCapture
   3871  * @return {Object}
   3872  */
   3873 function _delegate(element, selector, type, callback, useCapture) {
   3874     var listenerFn = listener.apply(this, arguments);
   3875 
   3876     element.addEventListener(type, listenerFn, useCapture);
   3877 
   3878     return {
   3879         destroy: function() {
   3880             element.removeEventListener(type, listenerFn, useCapture);
   3881         }
   3882     }
   3883 }
   3884 
   3885 /**
   3886  * Delegates event to a selector.
   3887  *
   3888  * @param {Element|String|Array} [elements]
   3889  * @param {String} selector
   3890  * @param {String} type
   3891  * @param {Function} callback
   3892  * @param {Boolean} useCapture
   3893  * @return {Object}
   3894  */
   3895 function delegate(elements, selector, type, callback, useCapture) {
   3896     // Handle the regular Element usage
   3897     if (typeof elements.addEventListener === 'function') {
   3898         return _delegate.apply(null, arguments);
   3899     }
   3900 
   3901     // Handle Element-less usage, it defaults to global delegation
   3902     if (typeof type === 'function') {
   3903         // Use `document` as the first parameter, then apply arguments
   3904         // This is a short way to .unshift `arguments` without running into deoptimizations
   3905         return _delegate.bind(null, document).apply(null, arguments);
   3906     }
   3907 
   3908     // Handle Selector-based usage
   3909     if (typeof elements === 'string') {
   3910         elements = document.querySelectorAll(elements);
   3911     }
   3912 
   3913     // Handle Array-like based usage
   3914     return Array.prototype.map.call(elements, function (element) {
   3915         return _delegate(element, selector, type, callback, useCapture);
   3916     });
   3917 }
   3918 
   3919 /**
   3920  * Finds closest match and invokes callback.
   3921  *
   3922  * @param {Element} element
   3923  * @param {String} selector
   3924  * @param {String} type
   3925  * @param {Function} callback
   3926  * @return {Function}
   3927  */
   3928 function listener(element, selector, type, callback) {
   3929     return function(e) {
   3930         e.delegateTarget = closest(e.target, selector);
   3931 
   3932         if (e.delegateTarget) {
   3933             callback.call(element, e);
   3934         }
   3935     }
   3936 }
   3937 
   3938 module.exports = delegate;
   3939 
   3940 
   3941 /***/ }),
   3942 
   3943 /***/ 879:
   3944 /***/ (function(__unused_webpack_module, exports) {
   3945 
   3946 /**
   3947  * Check if argument is a HTML element.
   3948  *
   3949  * @param {Object} value
   3950  * @return {Boolean}
   3951  */
   3952 exports.node = function(value) {
   3953     return value !== undefined
   3954         && value instanceof HTMLElement
   3955         && value.nodeType === 1;
   3956 };
   3957 
   3958 /**
   3959  * Check if argument is a list of HTML elements.
   3960  *
   3961  * @param {Object} value
   3962  * @return {Boolean}
   3963  */
   3964 exports.nodeList = function(value) {
   3965     var type = Object.prototype.toString.call(value);
   3966 
   3967     return value !== undefined
   3968         && (type === '[object NodeList]' || type === '[object HTMLCollection]')
   3969         && ('length' in value)
   3970         && (value.length === 0 || exports.node(value[0]));
   3971 };
   3972 
   3973 /**
   3974  * Check if argument is a string.
   3975  *
   3976  * @param {Object} value
   3977  * @return {Boolean}
   3978  */
   3979 exports.string = function(value) {
   3980     return typeof value === 'string'
   3981         || value instanceof String;
   3982 };
   3983 
   3984 /**
   3985  * Check if argument is a function.
   3986  *
   3987  * @param {Object} value
   3988  * @return {Boolean}
   3989  */
   3990 exports.fn = function(value) {
   3991     var type = Object.prototype.toString.call(value);
   3992 
   3993     return type === '[object Function]';
   3994 };
   3995 
   3996 
   3997 /***/ }),
   3998 
   3999 /***/ 370:
   4000 /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
   4001 
   4002 var is = __webpack_require__(879);
   4003 var delegate = __webpack_require__(438);
   4004 
   4005 /**
   4006  * Validates all params and calls the right
   4007  * listener function based on its target type.
   4008  *
   4009  * @param {String|HTMLElement|HTMLCollection|NodeList} target
   4010  * @param {String} type
   4011  * @param {Function} callback
   4012  * @return {Object}
   4013  */
   4014 function listen(target, type, callback) {
   4015     if (!target && !type && !callback) {
   4016         throw new Error('Missing required arguments');
   4017     }
   4018 
   4019     if (!is.string(type)) {
   4020         throw new TypeError('Second argument must be a String');
   4021     }
   4022 
   4023     if (!is.fn(callback)) {
   4024         throw new TypeError('Third argument must be a Function');
   4025     }
   4026 
   4027     if (is.node(target)) {
   4028         return listenNode(target, type, callback);
   4029     }
   4030     else if (is.nodeList(target)) {
   4031         return listenNodeList(target, type, callback);
   4032     }
   4033     else if (is.string(target)) {
   4034         return listenSelector(target, type, callback);
   4035     }
   4036     else {
   4037         throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
   4038     }
   4039 }
   4040 
   4041 /**
   4042  * Adds an event listener to a HTML element
   4043  * and returns a remove listener function.
   4044  *
   4045  * @param {HTMLElement} node
   4046  * @param {String} type
   4047  * @param {Function} callback
   4048  * @return {Object}
   4049  */
   4050 function listenNode(node, type, callback) {
   4051     node.addEventListener(type, callback);
   4052 
   4053     return {
   4054         destroy: function() {
   4055             node.removeEventListener(type, callback);
   4056         }
   4057     }
   4058 }
   4059 
   4060 /**
   4061  * Add an event listener to a list of HTML elements
   4062  * and returns a remove listener function.
   4063  *
   4064  * @param {NodeList|HTMLCollection} nodeList
   4065  * @param {String} type
   4066  * @param {Function} callback
   4067  * @return {Object}
   4068  */
   4069 function listenNodeList(nodeList, type, callback) {
   4070     Array.prototype.forEach.call(nodeList, function(node) {
   4071         node.addEventListener(type, callback);
   4072     });
   4073 
   4074     return {
   4075         destroy: function() {
   4076             Array.prototype.forEach.call(nodeList, function(node) {
   4077                 node.removeEventListener(type, callback);
   4078             });
   4079         }
   4080     }
   4081 }
   4082 
   4083 /**
   4084  * Add an event listener to a selector
   4085  * and returns a remove listener function.
   4086  *
   4087  * @param {String} selector
   4088  * @param {String} type
   4089  * @param {Function} callback
   4090  * @return {Object}
   4091  */
   4092 function listenSelector(selector, type, callback) {
   4093     return delegate(document.body, selector, type, callback);
   4094 }
   4095 
   4096 module.exports = listen;
   4097 
   4098 
   4099 /***/ }),
   4100 
   4101 /***/ 817:
   4102 /***/ (function(module) {
   4103 
   4104 function select(element) {
   4105     var selectedText;
   4106 
   4107     if (element.nodeName === 'SELECT') {
   4108         element.focus();
   4109 
   4110         selectedText = element.value;
   4111     }
   4112     else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
   4113         var isReadOnly = element.hasAttribute('readonly');
   4114 
   4115         if (!isReadOnly) {
   4116             element.setAttribute('readonly', '');
   4117         }
   4118 
   4119         element.select();
   4120         element.setSelectionRange(0, element.value.length);
   4121 
   4122         if (!isReadOnly) {
   4123             element.removeAttribute('readonly');
   4124         }
   4125 
   4126         selectedText = element.value;
   4127     }
   4128     else {
   4129         if (element.hasAttribute('contenteditable')) {
   4130             element.focus();
   4131         }
   4132 
   4133         var selection = window.getSelection();
   4134         var range = document.createRange();
   4135 
   4136         range.selectNodeContents(element);
   4137         selection.removeAllRanges();
   4138         selection.addRange(range);
   4139 
   4140         selectedText = selection.toString();
   4141     }
   4142 
   4143     return selectedText;
   4144 }
   4145 
   4146 module.exports = select;
   4147 
   4148 
   4149 /***/ }),
   4150 
   4151 /***/ 279:
   4152 /***/ (function(module) {
   4153 
   4154 function E () {
   4155   // Keep this empty so it's easier to inherit from
   4156   // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
   4157 }
   4158 
   4159 E.prototype = {
   4160   on: function (name, callback, ctx) {
   4161     var e = this.e || (this.e = {});
   4162 
   4163     (e[name] || (e[name] = [])).push({
   4164       fn: callback,
   4165       ctx: ctx
   4166     });
   4167 
   4168     return this;
   4169   },
   4170 
   4171   once: function (name, callback, ctx) {
   4172     var self = this;
   4173     function listener () {
   4174       self.off(name, listener);
   4175       callback.apply(ctx, arguments);
   4176     };
   4177 
   4178     listener._ = callback
   4179     return this.on(name, listener, ctx);
   4180   },
   4181 
   4182   emit: function (name) {
   4183     var data = [].slice.call(arguments, 1);
   4184     var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
   4185     var i = 0;
   4186     var len = evtArr.length;
   4187 
   4188     for (i; i < len; i++) {
   4189       evtArr[i].fn.apply(evtArr[i].ctx, data);
   4190     }
   4191 
   4192     return this;
   4193   },
   4194 
   4195   off: function (name, callback) {
   4196     var e = this.e || (this.e = {});
   4197     var evts = e[name];
   4198     var liveEvents = [];
   4199 
   4200     if (evts && callback) {
   4201       for (var i = 0, len = evts.length; i < len; i++) {
   4202         if (evts[i].fn !== callback && evts[i].fn._ !== callback)
   4203           liveEvents.push(evts[i]);
   4204       }
   4205     }
   4206 
   4207     // Remove event from queue to prevent memory leak
   4208     // Suggested by https://github.com/lazd
   4209     // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
   4210 
   4211     (liveEvents.length)
   4212       ? e[name] = liveEvents
   4213       : delete e[name];
   4214 
   4215     return this;
   4216   }
   4217 };
   4218 
   4219 module.exports = E;
   4220 module.exports.TinyEmitter = E;
   4221 
   4222 
   4223 /***/ })
   4224 
   4225 /******/ 	});
   4226 /************************************************************************/
   4227 /******/ 	// The module cache
   4228 /******/ 	var __webpack_module_cache__ = {};
   4229 /******/ 	
   4230 /******/ 	// The require function
   4231 /******/ 	function __webpack_require__(moduleId) {
   4232 /******/ 		// Check if module is in cache
   4233 /******/ 		if(__webpack_module_cache__[moduleId]) {
   4234 /******/ 			return __webpack_module_cache__[moduleId].exports;
   4235 /******/ 		}
   4236 /******/ 		// Create a new module (and put it into the cache)
   4237 /******/ 		var module = __webpack_module_cache__[moduleId] = {
   4238 /******/ 			// no module.id needed
   4239 /******/ 			// no module.loaded needed
   4240 /******/ 			exports: {}
   4241 /******/ 		};
   4242 /******/ 	
   4243 /******/ 		// Execute the module function
   4244 /******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
   4245 /******/ 	
   4246 /******/ 		// Return the exports of the module
   4247 /******/ 		return module.exports;
   4248 /******/ 	}
   4249 /******/ 	
   4250 /************************************************************************/
   4251 /******/ 	/* webpack/runtime/compat get default export */
   4252 /******/ 	!function() {
   4253 /******/ 		// getDefaultExport function for compatibility with non-harmony modules
   4254 /******/ 		__webpack_require__.n = function(module) {
   4255 /******/ 			var getter = module && module.__esModule ?
   4256 /******/ 				function() { return module['default']; } :
   4257 /******/ 				function() { return module; };
   4258 /******/ 			__webpack_require__.d(getter, { a: getter });
   4259 /******/ 			return getter;
   4260 /******/ 		};
   4261 /******/ 	}();
   4262 /******/ 	
   4263 /******/ 	/* webpack/runtime/define property getters */
   4264 /******/ 	!function() {
   4265 /******/ 		// define getter functions for harmony exports
   4266 /******/ 		__webpack_require__.d = function(exports, definition) {
   4267 /******/ 			for(var key in definition) {
   4268 /******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
   4269 /******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
   4270 /******/ 				}
   4271 /******/ 			}
   4272 /******/ 		};
   4273 /******/ 	}();
   4274 /******/ 	
   4275 /******/ 	/* webpack/runtime/hasOwnProperty shorthand */
   4276 /******/ 	!function() {
   4277 /******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
   4278 /******/ 	}();
   4279 /******/ 	
   4280 /************************************************************************/
   4281 /******/ 	// module exports must be returned from runtime so entry inlining is disabled
   4282 /******/ 	// startup
   4283 /******/ 	// Load entry module and return exports
   4284 /******/ 	return __webpack_require__(134);
   4285 /******/ })()
   4286 .default;
   4287 });
   4288 
   4289 /***/ }),
   4290 
   4291 /***/ "wx14":
   4292 /***/ (function(module, __webpack_exports__, __webpack_require__) {
   4293 
   4294 "use strict";
   4295 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
   4296 function _extends() {
   4297   _extends = Object.assign || function (target) {
   4298     for (var i = 1; i < arguments.length; i++) {
   4299       var source = arguments[i];
   4300 
   4301       for (var key in source) {
   4302         if (Object.prototype.hasOwnProperty.call(source, key)) {
   4303           target[key] = source[key];
   4304         }
   4305       }
   4306     }
   4307 
   4308     return target;
   4309   };
   4310 
   4311   return _extends.apply(this, arguments);
   4312 }
   4313 
   4314 /***/ })
   4315 
   4316 /******/ });