customize-widgets.js (100697B)
1 this["wp"] = this["wp"] || {}; this["wp"]["customizeWidgets"] = 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 = "9pbN"); 86 /******/ }) 87 /************************************************************************/ 88 /******/ ({ 89 90 /***/ "1CF3": 91 /***/ (function(module, exports) { 92 93 (function() { module.exports = window["wp"]["dom"]; }()); 94 95 /***/ }), 96 97 /***/ "1ZqX": 98 /***/ (function(module, exports) { 99 100 (function() { module.exports = window["wp"]["data"]; }()); 101 102 /***/ }), 103 104 /***/ "6aBm": 105 /***/ (function(module, exports) { 106 107 (function() { module.exports = window["wp"]["mediaUtils"]; }()); 108 109 /***/ }), 110 111 /***/ "9pbN": 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__, "initialize", function() { return /* binding */ initialize; }); 120 121 // NAMESPACE OBJECT: ./node_modules/@wordpress/customize-widgets/build-module/store/selectors.js 122 var selectors_namespaceObject = {}; 123 __webpack_require__.r(selectors_namespaceObject); 124 __webpack_require__.d(selectors_namespaceObject, "__unstableIsFeatureActive", function() { return __unstableIsFeatureActive; }); 125 __webpack_require__.d(selectors_namespaceObject, "isInserterOpened", function() { return selectors_isInserterOpened; }); 126 __webpack_require__.d(selectors_namespaceObject, "__experimentalGetInsertionPoint", function() { return __experimentalGetInsertionPoint; }); 127 128 // NAMESPACE OBJECT: ./node_modules/@wordpress/customize-widgets/build-module/store/actions.js 129 var actions_namespaceObject = {}; 130 __webpack_require__.r(actions_namespaceObject); 131 __webpack_require__.d(actions_namespaceObject, "__unstableToggleFeature", function() { return __unstableToggleFeature; }); 132 __webpack_require__.d(actions_namespaceObject, "setIsInserterOpened", function() { return actions_setIsInserterOpened; }); 133 134 // EXTERNAL MODULE: external ["wp","element"] 135 var external_wp_element_ = __webpack_require__("GRId"); 136 137 // EXTERNAL MODULE: external ["wp","blockLibrary"] 138 var external_wp_blockLibrary_ = __webpack_require__("QyPg"); 139 140 // EXTERNAL MODULE: external ["wp","widgets"] 141 var external_wp_widgets_ = __webpack_require__("GLVC"); 142 143 // EXTERNAL MODULE: external ["wp","blocks"] 144 var external_wp_blocks_ = __webpack_require__("HSyU"); 145 146 // EXTERNAL MODULE: external ["wp","components"] 147 var external_wp_components_ = __webpack_require__("tI+e"); 148 149 // EXTERNAL MODULE: external ["wp","i18n"] 150 var external_wp_i18n_ = __webpack_require__("l3Sj"); 151 152 // EXTERNAL MODULE: external ["wp","blockEditor"] 153 var external_wp_blockEditor_ = __webpack_require__("axFQ"); 154 155 // EXTERNAL MODULE: external ["wp","compose"] 156 var external_wp_compose_ = __webpack_require__("K9lf"); 157 158 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/error-boundary/index.js 159 160 161 /** 162 * WordPress dependencies 163 */ 164 165 166 167 168 169 170 function CopyButton({ 171 text, 172 children 173 }) { 174 const ref = Object(external_wp_compose_["useCopyToClipboard"])(text); 175 return Object(external_wp_element_["createElement"])(external_wp_components_["Button"], { 176 variant: "secondary", 177 ref: ref 178 }, children); 179 } 180 181 class error_boundary_ErrorBoundary extends external_wp_element_["Component"] { 182 constructor() { 183 super(...arguments); 184 this.state = { 185 error: null 186 }; 187 } 188 189 componentDidCatch(error) { 190 this.setState({ 191 error 192 }); 193 } 194 195 render() { 196 const { 197 error 198 } = this.state; 199 200 if (!error) { 201 return this.props.children; 202 } 203 204 return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["Warning"], { 205 className: "customize-widgets-error-boundary", 206 actions: [Object(external_wp_element_["createElement"])(CopyButton, { 207 key: "copy-error", 208 text: error.stack 209 }, Object(external_wp_i18n_["__"])('Copy Error'))] 210 }, Object(external_wp_i18n_["__"])('The editor has encountered an unexpected error.')); 211 } 212 213 } 214 215 // EXTERNAL MODULE: external "lodash" 216 var external_lodash_ = __webpack_require__("YLtl"); 217 218 // EXTERNAL MODULE: external ["wp","coreData"] 219 var external_wp_coreData_ = __webpack_require__("jZUy"); 220 221 // EXTERNAL MODULE: external ["wp","data"] 222 var external_wp_data_ = __webpack_require__("1ZqX"); 223 224 // EXTERNAL MODULE: external ["wp","mediaUtils"] 225 var external_wp_mediaUtils_ = __webpack_require__("6aBm"); 226 227 // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js 228 var esm_extends = __webpack_require__("wx14"); 229 230 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/block-inspector-button/index.js 231 232 233 234 /** 235 * WordPress dependencies 236 */ 237 238 239 240 241 242 243 function BlockInspectorButton({ 244 inspector, 245 closeMenu, 246 ...props 247 }) { 248 const selectedBlockClientId = Object(external_wp_data_["useSelect"])(select => select(external_wp_blockEditor_["store"]).getSelectedBlockClientId(), []); 249 const selectedBlock = Object(external_wp_element_["useMemo"])(() => document.getElementById(`block-${selectedBlockClientId}`), [selectedBlockClientId]); 250 return Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], Object(esm_extends["a" /* default */])({ 251 onClick: () => { 252 // Open the inspector. 253 inspector.open({ 254 returnFocusWhenClose: selectedBlock 255 }); // Then close the dropdown menu. 256 257 closeMenu(); 258 } 259 }, props), Object(external_wp_i18n_["__"])('Show more settings')); 260 } 261 262 /* harmony default export */ var block_inspector_button = (BlockInspectorButton); 263 264 // EXTERNAL MODULE: ./node_modules/classnames/index.js 265 var classnames = __webpack_require__("TSYQ"); 266 var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); 267 268 // EXTERNAL MODULE: external ["wp","keycodes"] 269 var external_wp_keycodes_ = __webpack_require__("RxS6"); 270 271 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/undo.js 272 var library_undo = __webpack_require__("Ntru"); 273 274 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/redo.js 275 var library_redo = __webpack_require__("K2cm"); 276 277 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/plus.js 278 var plus = __webpack_require__("Q4Sy"); 279 280 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/close-small.js 281 var close_small = __webpack_require__("bWcr"); 282 283 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/defaults.js 284 const PREFERENCES_DEFAULTS = { 285 features: { 286 fixedToolbar: false, 287 welcomeGuide: true 288 } 289 }; 290 291 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/reducer.js 292 /** 293 * External dependencies 294 */ 295 296 /** 297 * WordPress dependencies 298 */ 299 300 301 /** 302 * Internal dependencies 303 */ 304 305 306 /** 307 * Higher-order reducer creator which provides the given initial state for the 308 * original reducer. 309 * 310 * @param {*} initialState Initial state to provide to reducer. 311 * 312 * @return {Function} Higher-order reducer. 313 */ 314 315 const createWithInitialState = initialState => reducer => { 316 return (state = initialState, action) => reducer(state, action); 317 }; 318 /** 319 * Reducer tracking whether the inserter is open. 320 * 321 * @param {boolean|Object} state 322 * @param {Object} action 323 */ 324 325 326 function blockInserterPanel(state = false, action) { 327 switch (action.type) { 328 case 'SET_IS_INSERTER_OPENED': 329 return action.value; 330 } 331 332 return state; 333 } 334 /** 335 * Reducer returning the user preferences. 336 * 337 * @param {Object} state Current state. 338 * @param {Object} action Dispatched action. 339 * 340 * @return {Object} Updated state. 341 */ 342 343 344 const preferences = Object(external_lodash_["flow"])([external_wp_data_["combineReducers"], createWithInitialState(PREFERENCES_DEFAULTS)])({ 345 features(state, action) { 346 if (action.type === 'TOGGLE_FEATURE') { 347 return { ...state, 348 [action.feature]: !state[action.feature] 349 }; 350 } 351 352 return state; 353 } 354 355 }); 356 /* harmony default export */ var reducer = (Object(external_wp_data_["combineReducers"])({ 357 blockInserterPanel, 358 preferences 359 })); 360 361 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/selectors.js 362 /** 363 * External dependencies 364 */ 365 366 /** 367 * Returns whether the given feature is enabled or not. 368 * 369 * This function is unstable, as it is mostly copied from the edit-post 370 * package. Editor features and preferences have a lot of scope for 371 * being generalized and refactored. 372 * 373 * @param {Object} state Global application state. 374 * @param {string} feature Feature slug. 375 * 376 * @return {boolean} Is active. 377 */ 378 379 function __unstableIsFeatureActive(state, feature) { 380 return Object(external_lodash_["get"])(state.preferences.features, [feature], false); 381 } 382 /** 383 * Returns true if the inserter is opened. 384 * 385 * @param {Object} state Global application state. 386 * 387 * @return {boolean} Whether the inserter is opened. 388 */ 389 390 function selectors_isInserterOpened(state) { 391 return !!state.blockInserterPanel; 392 } 393 /** 394 * Get the insertion point for the inserter. 395 * 396 * @param {Object} state Global application state. 397 * 398 * @return {Object} The root client ID and index to insert at. 399 */ 400 401 function __experimentalGetInsertionPoint(state) { 402 const { 403 rootClientId, 404 insertionIndex 405 } = state.blockInserterPanel; 406 return { 407 rootClientId, 408 insertionIndex 409 }; 410 } 411 412 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/actions.js 413 /** 414 * Returns an action object used to toggle a feature flag. 415 * 416 * This function is unstable, as it is mostly copied from the edit-post 417 * package. Editor features and preferences have a lot of scope for 418 * being generalized and refactored. 419 * 420 * @param {string} feature Feature name. 421 * 422 * @return {Object} Action object. 423 */ 424 function __unstableToggleFeature(feature) { 425 return { 426 type: 'TOGGLE_FEATURE', 427 feature 428 }; 429 } 430 /** 431 * Returns an action object used to open/close the inserter. 432 * 433 * @param {boolean|Object} value Whether the inserter should be 434 * opened (true) or closed (false). 435 * To specify an insertion point, 436 * use an object. 437 * @param {string} value.rootClientId The root client ID to insert at. 438 * @param {number} value.insertionIndex The index to insert at. 439 * 440 * @return {Object} Action object. 441 */ 442 443 function actions_setIsInserterOpened(value) { 444 return { 445 type: 'SET_IS_INSERTER_OPENED', 446 value 447 }; 448 } 449 450 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/constants.js 451 /** 452 * Module Constants 453 */ 454 const STORE_NAME = 'core/customize-widgets'; 455 456 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/index.js 457 /** 458 * WordPress dependencies 459 */ 460 461 /** 462 * Internal dependencies 463 */ 464 465 466 467 468 469 /** 470 * Block editor data store configuration. 471 * 472 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore 473 * 474 * @type {Object} 475 */ 476 477 const storeConfig = { 478 reducer: reducer, 479 selectors: selectors_namespaceObject, 480 actions: actions_namespaceObject, 481 persist: ['preferences'] 482 }; 483 /** 484 * Store definition for the edit widgets namespace. 485 * 486 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore 487 * 488 * @type {Object} 489 */ 490 491 const store = Object(external_wp_data_["createReduxStore"])(STORE_NAME, storeConfig); // Once we build a more generic persistence plugin that works across types of stores 492 // we'd be able to replace this with a register call. 493 494 Object(external_wp_data_["registerStore"])(STORE_NAME, storeConfig); 495 496 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/inserter/index.js 497 498 499 /** 500 * WordPress dependencies 501 */ 502 503 504 505 506 507 508 /** 509 * Internal dependencies 510 */ 511 512 513 514 function Inserter({ 515 setIsOpened 516 }) { 517 const inserterTitleId = Object(external_wp_compose_["useInstanceId"])(Inserter, 'customize-widget-layout__inserter-panel-title'); 518 const insertionPoint = Object(external_wp_data_["useSelect"])(select => select(store).__experimentalGetInsertionPoint()); 519 return Object(external_wp_element_["createElement"])("div", { 520 className: "customize-widgets-layout__inserter-panel", 521 "aria-labelledby": inserterTitleId 522 }, Object(external_wp_element_["createElement"])("div", { 523 className: "customize-widgets-layout__inserter-panel-header" 524 }, Object(external_wp_element_["createElement"])("h2", { 525 id: inserterTitleId, 526 className: "customize-widgets-layout__inserter-panel-header-title" 527 }, Object(external_wp_i18n_["__"])('Add a block')), Object(external_wp_element_["createElement"])(external_wp_components_["Button"], { 528 className: "customize-widgets-layout__inserter-panel-header-close-button", 529 icon: close_small["a" /* default */], 530 onClick: () => setIsOpened(false), 531 "aria-label": Object(external_wp_i18n_["__"])('Close inserter') 532 })), Object(external_wp_element_["createElement"])("div", { 533 className: "customize-widgets-layout__inserter-panel-content" 534 }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["__experimentalLibrary"], { 535 rootClientId: insertionPoint.rootClientId, 536 __experimentalInsertionIndex: insertionPoint.insertionIndex, 537 showInserterHelpPanel: true, 538 onSelect: () => setIsOpened(false) 539 }))); 540 } 541 542 /* harmony default export */ var components_inserter = (Inserter); 543 544 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/more-vertical.js 545 var more_vertical = __webpack_require__("VKE3"); 546 547 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/external.js 548 var external = __webpack_require__("K+tz"); 549 550 // EXTERNAL MODULE: external ["wp","keyboardShortcuts"] 551 var external_wp_keyboardShortcuts_ = __webpack_require__("hF7m"); 552 553 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/check.js 554 var check = __webpack_require__("RMJe"); 555 556 // EXTERNAL MODULE: external ["wp","a11y"] 557 var external_wp_a11y_ = __webpack_require__("gdqT"); 558 559 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/more-menu/feature-toggle.js 560 561 562 /** 563 * WordPress dependencies 564 */ 565 566 567 568 569 570 /** 571 * Internal dependencies 572 */ 573 574 575 function FeatureToggle({ 576 label, 577 info, 578 messageActivated, 579 messageDeactivated, 580 shortcut, 581 feature 582 }) { 583 const isActive = Object(external_wp_data_["useSelect"])(select => select(store).__unstableIsFeatureActive(feature), [feature]); 584 const { 585 __unstableToggleFeature: toggleFeature 586 } = Object(external_wp_data_["useDispatch"])(store); 587 588 const speakMessage = () => { 589 if (isActive) { 590 Object(external_wp_a11y_["speak"])(messageDeactivated || Object(external_wp_i18n_["__"])('Feature deactivated')); 591 } else { 592 Object(external_wp_a11y_["speak"])(messageActivated || Object(external_wp_i18n_["__"])('Feature activated')); 593 } 594 }; 595 596 return Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], { 597 icon: isActive && check["a" /* default */], 598 isSelected: isActive, 599 onClick: () => { 600 toggleFeature(feature); 601 speakMessage(); 602 }, 603 role: "menuitemcheckbox", 604 info: info, 605 shortcut: shortcut 606 }, label); 607 } 608 609 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/config.js 610 /** 611 * WordPress dependencies 612 */ 613 614 const textFormattingShortcuts = [{ 615 keyCombination: { 616 modifier: 'primary', 617 character: 'b' 618 }, 619 description: Object(external_wp_i18n_["__"])('Make the selected text bold.') 620 }, { 621 keyCombination: { 622 modifier: 'primary', 623 character: 'i' 624 }, 625 description: Object(external_wp_i18n_["__"])('Make the selected text italic.') 626 }, { 627 keyCombination: { 628 modifier: 'primary', 629 character: 'k' 630 }, 631 description: Object(external_wp_i18n_["__"])('Convert the selected text into a link.') 632 }, { 633 keyCombination: { 634 modifier: 'primaryShift', 635 character: 'k' 636 }, 637 description: Object(external_wp_i18n_["__"])('Remove a link.') 638 }, { 639 keyCombination: { 640 modifier: 'primary', 641 character: 'u' 642 }, 643 description: Object(external_wp_i18n_["__"])('Underline the selected text.') 644 }]; 645 646 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/shortcut.js 647 648 649 /** 650 * External dependencies 651 */ 652 653 /** 654 * WordPress dependencies 655 */ 656 657 658 659 660 function KeyCombination({ 661 keyCombination, 662 forceAriaLabel 663 }) { 664 const shortcut = keyCombination.modifier ? external_wp_keycodes_["displayShortcutList"][keyCombination.modifier](keyCombination.character) : keyCombination.character; 665 const ariaLabel = keyCombination.modifier ? external_wp_keycodes_["shortcutAriaLabel"][keyCombination.modifier](keyCombination.character) : keyCombination.character; 666 return Object(external_wp_element_["createElement"])("kbd", { 667 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination", 668 "aria-label": forceAriaLabel || ariaLabel 669 }, Object(external_lodash_["castArray"])(shortcut).map((character, index) => { 670 if (character === '+') { 671 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], { 672 key: index 673 }, character); 674 } 675 676 return Object(external_wp_element_["createElement"])("kbd", { 677 key: index, 678 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-key" 679 }, character); 680 })); 681 } 682 683 function Shortcut({ 684 description, 685 keyCombination, 686 aliases = [], 687 ariaLabel 688 }) { 689 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])("div", { 690 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-description" 691 }, description), Object(external_wp_element_["createElement"])("div", { 692 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-term" 693 }, Object(external_wp_element_["createElement"])(KeyCombination, { 694 keyCombination: keyCombination, 695 forceAriaLabel: ariaLabel 696 }), aliases.map((alias, index) => Object(external_wp_element_["createElement"])(KeyCombination, { 697 keyCombination: alias, 698 forceAriaLabel: ariaLabel, 699 key: index 700 })))); 701 } 702 703 /* harmony default export */ var keyboard_shortcut_help_modal_shortcut = (Shortcut); 704 705 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js 706 707 708 /** 709 * WordPress dependencies 710 */ 711 712 713 /** 714 * Internal dependencies 715 */ 716 717 718 719 function DynamicShortcut({ 720 name 721 }) { 722 const { 723 keyCombination, 724 description, 725 aliases 726 } = Object(external_wp_data_["useSelect"])(select => { 727 const { 728 getShortcutKeyCombination, 729 getShortcutDescription, 730 getShortcutAliases 731 } = select(external_wp_keyboardShortcuts_["store"]); 732 return { 733 keyCombination: getShortcutKeyCombination(name), 734 aliases: getShortcutAliases(name), 735 description: getShortcutDescription(name) 736 }; 737 }); 738 739 if (!keyCombination) { 740 return null; 741 } 742 743 return Object(external_wp_element_["createElement"])(keyboard_shortcut_help_modal_shortcut, { 744 keyCombination: keyCombination, 745 description: description, 746 aliases: aliases 747 }); 748 } 749 750 /* harmony default export */ var dynamic_shortcut = (DynamicShortcut); 751 752 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/index.js 753 754 755 /** 756 * External dependencies 757 */ 758 759 760 /** 761 * WordPress dependencies 762 */ 763 764 765 766 767 768 /** 769 * Internal dependencies 770 */ 771 772 773 774 775 776 const ShortcutList = ({ 777 shortcuts 778 }) => 779 /* 780 * Disable reason: The `list` ARIA role is redundant but 781 * Safari+VoiceOver won't announce the list otherwise. 782 */ 783 784 /* eslint-disable jsx-a11y/no-redundant-roles */ 785 Object(external_wp_element_["createElement"])("ul", { 786 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-list", 787 role: "list" 788 }, shortcuts.map((shortcut, index) => Object(external_wp_element_["createElement"])("li", { 789 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut", 790 key: index 791 }, Object(external_lodash_["isString"])(shortcut) ? Object(external_wp_element_["createElement"])(dynamic_shortcut, { 792 name: shortcut 793 }) : Object(external_wp_element_["createElement"])(keyboard_shortcut_help_modal_shortcut, shortcut)))) 794 /* eslint-enable jsx-a11y/no-redundant-roles */ 795 ; 796 797 const ShortcutSection = ({ 798 title, 799 shortcuts, 800 className 801 }) => Object(external_wp_element_["createElement"])("section", { 802 className: classnames_default()('customize-widgets-keyboard-shortcut-help-modal__section', className) 803 }, !!title && Object(external_wp_element_["createElement"])("h2", { 804 className: "customize-widgets-keyboard-shortcut-help-modal__section-title" 805 }, title), Object(external_wp_element_["createElement"])(ShortcutList, { 806 shortcuts: shortcuts 807 })); 808 809 const ShortcutCategorySection = ({ 810 title, 811 categoryName, 812 additionalShortcuts = [] 813 }) => { 814 const categoryShortcuts = Object(external_wp_data_["useSelect"])(select => { 815 return select(external_wp_keyboardShortcuts_["store"]).getCategoryShortcuts(categoryName); 816 }, [categoryName]); 817 return Object(external_wp_element_["createElement"])(ShortcutSection, { 818 title: title, 819 shortcuts: categoryShortcuts.concat(additionalShortcuts) 820 }); 821 }; 822 823 function KeyboardShortcutHelpModal({ 824 isModalActive, 825 toggleModal 826 }) { 827 const { 828 registerShortcut 829 } = Object(external_wp_data_["useDispatch"])(external_wp_keyboardShortcuts_["store"]); 830 registerShortcut({ 831 name: 'core/customize-widgets/keyboard-shortcuts', 832 category: 'main', 833 description: Object(external_wp_i18n_["__"])('Display these keyboard shortcuts.'), 834 keyCombination: { 835 modifier: 'access', 836 character: 'h' 837 } 838 }); 839 Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/keyboard-shortcuts', toggleModal, { 840 bindGlobal: true 841 }); 842 843 if (!isModalActive) { 844 return null; 845 } 846 847 return Object(external_wp_element_["createElement"])(external_wp_components_["Modal"], { 848 className: "customize-widgets-keyboard-shortcut-help-modal", 849 title: Object(external_wp_i18n_["__"])('Keyboard shortcuts'), 850 closeLabel: Object(external_wp_i18n_["__"])('Close'), 851 onRequestClose: toggleModal 852 }, Object(external_wp_element_["createElement"])(ShortcutSection, { 853 className: "customize-widgets-keyboard-shortcut-help-modal__main-shortcuts", 854 shortcuts: ['core/customize-widgets/keyboard-shortcuts'] 855 }), Object(external_wp_element_["createElement"])(ShortcutCategorySection, { 856 title: Object(external_wp_i18n_["__"])('Global shortcuts'), 857 categoryName: "global" 858 }), Object(external_wp_element_["createElement"])(ShortcutCategorySection, { 859 title: Object(external_wp_i18n_["__"])('Selection shortcuts'), 860 categoryName: "selection" 861 }), Object(external_wp_element_["createElement"])(ShortcutCategorySection, { 862 title: Object(external_wp_i18n_["__"])('Block shortcuts'), 863 categoryName: "block", 864 additionalShortcuts: [{ 865 keyCombination: { 866 character: '/' 867 }, 868 description: Object(external_wp_i18n_["__"])('Change the block type after adding a new paragraph.'), 869 870 /* translators: The forward-slash character. e.g. '/'. */ 871 ariaLabel: Object(external_wp_i18n_["__"])('Forward-slash') 872 }] 873 }), Object(external_wp_element_["createElement"])(ShortcutSection, { 874 title: Object(external_wp_i18n_["__"])('Text formatting'), 875 shortcuts: textFormattingShortcuts 876 })); 877 } 878 879 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/more-menu/index.js 880 881 882 /** 883 * WordPress dependencies 884 */ 885 886 887 888 889 890 891 /** 892 * Internal dependencies 893 */ 894 895 896 897 const POPOVER_PROPS = { 898 className: 'customize-widgets-more-menu__content', 899 position: 'bottom left' 900 }; 901 const TOGGLE_PROPS = { 902 tooltipPosition: 'bottom' 903 }; 904 function MoreMenu() { 905 const [isKeyboardShortcutsModalActive, setIsKeyboardShortcutsModalVisible] = Object(external_wp_element_["useState"])(false); 906 907 const toggleKeyboardShortcutsModal = () => setIsKeyboardShortcutsModalVisible(!isKeyboardShortcutsModalActive); 908 909 Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/keyboard-shortcuts', toggleKeyboardShortcutsModal, { 910 bindGlobal: true 911 }); 912 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarDropdownMenu"], { 913 className: "customize-widgets-more-menu", 914 icon: more_vertical["a" /* default */] 915 /* translators: button label text should, if possible, be under 16 characters. */ 916 , 917 label: Object(external_wp_i18n_["__"])('Options'), 918 popoverProps: POPOVER_PROPS, 919 toggleProps: TOGGLE_PROPS 920 }, () => Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], { 921 label: Object(external_wp_i18n_["_x"])('View', 'noun') 922 }, Object(external_wp_element_["createElement"])(FeatureToggle, { 923 feature: "fixedToolbar", 924 label: Object(external_wp_i18n_["__"])('Top toolbar'), 925 info: Object(external_wp_i18n_["__"])('Access all block and document tools in a single place'), 926 messageActivated: Object(external_wp_i18n_["__"])('Top toolbar activated'), 927 messageDeactivated: Object(external_wp_i18n_["__"])('Top toolbar deactivated') 928 })), Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], { 929 label: Object(external_wp_i18n_["__"])('Tools') 930 }, Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], { 931 onClick: () => { 932 setIsKeyboardShortcutsModalVisible(true); 933 }, 934 shortcut: external_wp_keycodes_["displayShortcut"].access('h') 935 }, Object(external_wp_i18n_["__"])('Keyboard shortcuts')), Object(external_wp_element_["createElement"])(FeatureToggle, { 936 feature: "welcomeGuide", 937 label: Object(external_wp_i18n_["__"])('Welcome Guide') 938 }), Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], { 939 role: "menuitem", 940 icon: external["a" /* default */], 941 href: Object(external_wp_i18n_["__"])('https://wordpress.org/support/article/block-based-widgets-editor/'), 942 target: "_blank", 943 rel: "noopener noreferrer" 944 }, Object(external_wp_i18n_["__"])('Help'), Object(external_wp_element_["createElement"])(external_wp_components_["VisuallyHidden"], { 945 as: "span" 946 }, 947 /* translators: accessibility text */ 948 Object(external_wp_i18n_["__"])('(opens in a new tab)')))), Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], { 949 label: Object(external_wp_i18n_["__"])('Preferences') 950 }, Object(external_wp_element_["createElement"])(FeatureToggle, { 951 feature: "keepCaretInsideBlock", 952 label: Object(external_wp_i18n_["__"])('Contain text cursor inside block'), 953 info: Object(external_wp_i18n_["__"])('Aids screen readers by stopping text caret from leaving blocks.'), 954 messageActivated: Object(external_wp_i18n_["__"])('Contain text cursor inside block activated'), 955 messageDeactivated: Object(external_wp_i18n_["__"])('Contain text cursor inside block deactivated') 956 })))), Object(external_wp_element_["createElement"])(KeyboardShortcutHelpModal, { 957 isModalActive: isKeyboardShortcutsModalActive, 958 toggleModal: toggleKeyboardShortcutsModal 959 })); 960 } 961 962 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/header/index.js 963 964 965 /** 966 * External dependencies 967 */ 968 969 /** 970 * WordPress dependencies 971 */ 972 973 974 975 976 977 978 979 /** 980 * Internal dependencies 981 */ 982 983 984 985 986 function Header({ 987 sidebar, 988 inserter, 989 isInserterOpened, 990 setIsInserterOpened, 991 isFixedToolbarActive 992 }) { 993 const [[hasUndo, hasRedo], setUndoRedo] = Object(external_wp_element_["useState"])([sidebar.hasUndo(), sidebar.hasRedo()]); 994 Object(external_wp_element_["useEffect"])(() => { 995 return sidebar.subscribeHistory(() => { 996 setUndoRedo([sidebar.hasUndo(), sidebar.hasRedo()]); 997 }); 998 }, [sidebar]); 999 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])("div", { 1000 className: classnames_default()('customize-widgets-header', { 1001 'is-fixed-toolbar-active': isFixedToolbarActive 1002 }) 1003 }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["NavigableToolbar"], { 1004 className: "customize-widgets-header-toolbar", 1005 "aria-label": Object(external_wp_i18n_["__"])('Document tools') 1006 }, Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], { 1007 icon: !Object(external_wp_i18n_["isRTL"])() ? library_undo["a" /* default */] : library_redo["a" /* default */] 1008 /* translators: button label text should, if possible, be under 16 characters. */ 1009 , 1010 label: Object(external_wp_i18n_["__"])('Undo'), 1011 shortcut: external_wp_keycodes_["displayShortcut"].primary('z') // If there are no undo levels we don't want to actually disable this 1012 // button, because it will remove focus for keyboard users. 1013 // See: https://github.com/WordPress/gutenberg/issues/3486 1014 , 1015 "aria-disabled": !hasUndo, 1016 onClick: sidebar.undo, 1017 className: "customize-widgets-editor-history-button undo-button" 1018 }), Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], { 1019 icon: !Object(external_wp_i18n_["isRTL"])() ? library_redo["a" /* default */] : library_undo["a" /* default */] 1020 /* translators: button label text should, if possible, be under 16 characters. */ 1021 , 1022 label: Object(external_wp_i18n_["__"])('Redo'), 1023 shortcut: external_wp_keycodes_["displayShortcut"].primaryShift('z') // If there are no undo levels we don't want to actually disable this 1024 // button, because it will remove focus for keyboard users. 1025 // See: https://github.com/WordPress/gutenberg/issues/3486 1026 , 1027 "aria-disabled": !hasRedo, 1028 onClick: sidebar.redo, 1029 className: "customize-widgets-editor-history-button redo-button" 1030 }), Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], { 1031 className: "customize-widgets-header-toolbar__inserter-toggle", 1032 isPressed: isInserterOpened, 1033 isPrimary: true, 1034 icon: plus["a" /* default */], 1035 label: Object(external_wp_i18n_["_x"])('Add block', 'Generic label for block inserter button'), 1036 onClick: () => { 1037 setIsInserterOpened(isOpen => !isOpen); 1038 } 1039 }), Object(external_wp_element_["createElement"])(MoreMenu, null))), Object(external_wp_element_["createPortal"])(Object(external_wp_element_["createElement"])(components_inserter, { 1040 setIsOpened: setIsInserterOpened 1041 }), inserter.contentContainer[0])); 1042 } 1043 1044 /* harmony default export */ var header = (Header); 1045 1046 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/inserter/use-inserter.js 1047 /** 1048 * WordPress dependencies 1049 */ 1050 1051 1052 /** 1053 * Internal dependencies 1054 */ 1055 1056 1057 function useInserter(inserter) { 1058 const isInserterOpened = Object(external_wp_data_["useSelect"])(select => select(store).isInserterOpened()); 1059 const { 1060 setIsInserterOpened 1061 } = Object(external_wp_data_["useDispatch"])(store); 1062 Object(external_wp_element_["useEffect"])(() => { 1063 if (isInserterOpened) { 1064 inserter.open(); 1065 } else { 1066 inserter.close(); 1067 } 1068 }, [inserter, isInserterOpened]); 1069 return [isInserterOpened, Object(external_wp_element_["useCallback"])(updater => { 1070 let isOpen = updater; 1071 1072 if (typeof updater === 'function') { 1073 isOpen = updater(Object(external_wp_data_["select"])(store).isInserterOpened()); 1074 } 1075 1076 setIsInserterOpened(isOpen); 1077 }, [setIsInserterOpened])]; 1078 } 1079 1080 // EXTERNAL MODULE: external ["wp","isShallowEqual"] 1081 var external_wp_isShallowEqual_ = __webpack_require__("rl8x"); 1082 var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_); 1083 1084 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/utils.js 1085 // @ts-check 1086 1087 /** 1088 * WordPress dependencies 1089 */ 1090 1091 1092 /** 1093 * External dependencies 1094 */ 1095 1096 1097 /** 1098 * Convert settingId to widgetId. 1099 * 1100 * @param {string} settingId The setting id. 1101 * @return {string} The widget id. 1102 */ 1103 1104 function settingIdToWidgetId(settingId) { 1105 const matches = settingId.match(/^widget_(.+)(?:\[(\d+)\])$/); 1106 1107 if (matches) { 1108 const idBase = matches[1]; 1109 const number = parseInt(matches[2], 10); 1110 return `${idBase}-${number}`; 1111 } 1112 1113 return settingId; 1114 } 1115 /** 1116 * Transform a block to a customizable widget. 1117 * 1118 * @param {WPBlock} block The block to be transformed from. 1119 * @param {Object} existingWidget The widget to be extended from. 1120 * @return {Object} The transformed widget. 1121 */ 1122 1123 function blockToWidget(block, existingWidget = null) { 1124 let widget; 1125 const isValidLegacyWidgetBlock = block.name === 'core/legacy-widget' && (block.attributes.id || block.attributes.instance); 1126 1127 if (isValidLegacyWidgetBlock) { 1128 if (block.attributes.id) { 1129 // Widget that does not extend WP_Widget. 1130 widget = { 1131 id: block.attributes.id 1132 }; 1133 } else { 1134 const { 1135 encoded, 1136 hash, 1137 raw, 1138 ...rest 1139 } = block.attributes.instance; // Widget that extends WP_Widget. 1140 1141 widget = { 1142 idBase: block.attributes.idBase, 1143 instance: { ...(existingWidget === null || existingWidget === void 0 ? void 0 : existingWidget.instance), 1144 // Required only for the customizer. 1145 is_widget_customizer_js_value: true, 1146 encoded_serialized_instance: encoded, 1147 instance_hash_key: hash, 1148 raw_instance: raw, 1149 ...rest 1150 } 1151 }; 1152 } 1153 } else { 1154 const instance = { 1155 content: Object(external_wp_blocks_["serialize"])(block) 1156 }; 1157 widget = { 1158 idBase: 'block', 1159 widgetClass: 'WP_Widget_Block', 1160 instance: { 1161 raw_instance: instance 1162 } 1163 }; 1164 } 1165 1166 return { ...Object(external_lodash_["omit"])(existingWidget, ['form', 'rendered']), 1167 ...widget 1168 }; 1169 } 1170 /** 1171 * Transform a widget to a block. 1172 * 1173 * @param {Object} widget The widget to be transformed from. 1174 * @param {string} widget.id The widget id. 1175 * @param {string} widget.idBase The id base of the widget. 1176 * @param {number} widget.number The number/index of the widget. 1177 * @param {Object} widget.instance The instance of the widget. 1178 * @return {WPBlock} The transformed block. 1179 */ 1180 1181 function widgetToBlock({ 1182 id, 1183 idBase, 1184 number, 1185 instance 1186 }) { 1187 let block; 1188 const { 1189 encoded_serialized_instance: encoded, 1190 instance_hash_key: hash, 1191 raw_instance: raw, 1192 ...rest 1193 } = instance; 1194 1195 if (idBase === 'block') { 1196 const parsedBlocks = Object(external_wp_blocks_["parse"])(raw.content); 1197 block = parsedBlocks.length ? parsedBlocks[0] : Object(external_wp_blocks_["createBlock"])('core/paragraph', {}); 1198 } else if (number) { 1199 // Widget that extends WP_Widget. 1200 block = Object(external_wp_blocks_["createBlock"])('core/legacy-widget', { 1201 idBase, 1202 instance: { 1203 encoded, 1204 hash, 1205 raw, 1206 ...rest 1207 } 1208 }); 1209 } else { 1210 // Widget that does not extend WP_Widget. 1211 block = Object(external_wp_blocks_["createBlock"])('core/legacy-widget', { 1212 id 1213 }); 1214 } 1215 1216 return Object(external_wp_widgets_["addWidgetIdToBlock"])(block, id); 1217 } 1218 1219 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/use-sidebar-block-editor.js 1220 /** 1221 * External dependencies 1222 */ 1223 1224 /** 1225 * WordPress dependencies 1226 */ 1227 1228 1229 1230 1231 /** 1232 * Internal dependencies 1233 */ 1234 1235 1236 1237 function widgetsToBlocks(widgets) { 1238 return widgets.map(widget => widgetToBlock(widget)); 1239 } 1240 1241 function useSidebarBlockEditor(sidebar) { 1242 const [blocks, setBlocks] = Object(external_wp_element_["useState"])(() => widgetsToBlocks(sidebar.getWidgets())); 1243 Object(external_wp_element_["useEffect"])(() => { 1244 return sidebar.subscribe((prevWidgets, nextWidgets) => { 1245 setBlocks(prevBlocks => { 1246 const prevWidgetsMap = new Map(prevWidgets.map(widget => [widget.id, widget])); 1247 const prevBlocksMap = new Map(prevBlocks.map(block => [Object(external_wp_widgets_["getWidgetIdFromBlock"])(block), block])); 1248 const nextBlocks = nextWidgets.map(nextWidget => { 1249 const prevWidget = prevWidgetsMap.get(nextWidget.id); // Bail out updates. 1250 1251 if (prevWidget && prevWidget === nextWidget) { 1252 return prevBlocksMap.get(nextWidget.id); 1253 } 1254 1255 return widgetToBlock(nextWidget); 1256 }); // Bail out updates. 1257 1258 if (external_wp_isShallowEqual_default()(prevBlocks, nextBlocks)) { 1259 return prevBlocks; 1260 } 1261 1262 return nextBlocks; 1263 }); 1264 }); 1265 }, [sidebar]); 1266 const onChangeBlocks = Object(external_wp_element_["useCallback"])(nextBlocks => { 1267 setBlocks(prevBlocks => { 1268 if (external_wp_isShallowEqual_default()(prevBlocks, nextBlocks)) { 1269 return prevBlocks; 1270 } 1271 1272 const prevBlocksMap = new Map(prevBlocks.map(block => [Object(external_wp_widgets_["getWidgetIdFromBlock"])(block), block])); 1273 const nextWidgets = nextBlocks.map(nextBlock => { 1274 const widgetId = Object(external_wp_widgets_["getWidgetIdFromBlock"])(nextBlock); // Update existing widgets. 1275 1276 if (widgetId && prevBlocksMap.has(widgetId)) { 1277 const prevBlock = prevBlocksMap.get(widgetId); 1278 const prevWidget = sidebar.getWidget(widgetId); // Bail out updates by returning the previous widgets. 1279 // Deep equality is necessary until the block editor's internals changes. 1280 1281 if (Object(external_lodash_["isEqual"])(nextBlock, prevBlock) && prevWidget) { 1282 return prevWidget; 1283 } 1284 1285 return blockToWidget(nextBlock, prevWidget); 1286 } // Add a new widget. 1287 1288 1289 return blockToWidget(nextBlock); 1290 }); // Bail out updates if the updated widgets are the same. 1291 1292 if (external_wp_isShallowEqual_default()(sidebar.getWidgets(), nextWidgets)) { 1293 return prevBlocks; 1294 } 1295 1296 const addedWidgetIds = sidebar.setWidgets(nextWidgets); 1297 return nextBlocks.reduce((updatedNextBlocks, nextBlock, index) => { 1298 const addedWidgetId = addedWidgetIds[index]; 1299 1300 if (addedWidgetId !== null) { 1301 // Only create a new instance if necessary to prevent 1302 // the whole editor from re-rendering on every edit. 1303 if (updatedNextBlocks === nextBlocks) { 1304 updatedNextBlocks = nextBlocks.slice(); 1305 } 1306 1307 updatedNextBlocks[index] = Object(external_wp_widgets_["addWidgetIdToBlock"])(nextBlock, addedWidgetId); 1308 } 1309 1310 return updatedNextBlocks; 1311 }, nextBlocks); 1312 }); 1313 }, [sidebar]); 1314 return [blocks, onChangeBlocks, onChangeBlocks]; 1315 } 1316 1317 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/focus-control/index.js 1318 1319 1320 /** 1321 * WordPress dependencies 1322 */ 1323 1324 /** 1325 * Internal dependencies 1326 */ 1327 1328 1329 const FocusControlContext = Object(external_wp_element_["createContext"])(); 1330 function FocusControl({ 1331 api, 1332 sidebarControls, 1333 children 1334 }) { 1335 const [focusedWidgetIdRef, setFocusedWidgetIdRef] = Object(external_wp_element_["useState"])({ 1336 current: null 1337 }); 1338 const focusWidget = Object(external_wp_element_["useCallback"])(widgetId => { 1339 for (const sidebarControl of sidebarControls) { 1340 const widgets = sidebarControl.setting.get(); 1341 1342 if (widgets.includes(widgetId)) { 1343 sidebarControl.sectionInstance.expand({ 1344 // Schedule it after the complete callback so that 1345 // it won't be overridden by the "Back" button focus. 1346 completeCallback() { 1347 // Create a "ref-like" object every time to ensure 1348 // the same widget id can also triggers the focus control. 1349 setFocusedWidgetIdRef({ 1350 current: widgetId 1351 }); 1352 } 1353 1354 }); 1355 break; 1356 } 1357 } 1358 }, [sidebarControls]); 1359 Object(external_wp_element_["useEffect"])(() => { 1360 function handleFocus(settingId) { 1361 const widgetId = settingIdToWidgetId(settingId); 1362 focusWidget(widgetId); 1363 } 1364 1365 function handleReady() { 1366 api.previewer.preview.bind('focus-control-for-setting', handleFocus); 1367 } 1368 1369 api.previewer.bind('ready', handleReady); 1370 return () => { 1371 api.previewer.unbind('ready', handleReady); 1372 api.previewer.preview.unbind('focus-control-for-setting', handleFocus); 1373 }; 1374 }, [api, focusWidget]); 1375 const context = Object(external_wp_element_["useMemo"])(() => [focusedWidgetIdRef, focusWidget], [focusedWidgetIdRef, focusWidget]); 1376 return Object(external_wp_element_["createElement"])(FocusControlContext.Provider, { 1377 value: context 1378 }, children); 1379 } 1380 const useFocusControl = () => Object(external_wp_element_["useContext"])(FocusControlContext); 1381 1382 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/focus-control/use-blocks-focus-control.js 1383 /** 1384 * WordPress dependencies 1385 */ 1386 1387 1388 1389 1390 /** 1391 * Internal dependencies 1392 */ 1393 1394 1395 function useBlocksFocusControl(blocks) { 1396 const { 1397 selectBlock 1398 } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]); 1399 const [focusedWidgetIdRef] = useFocusControl(); 1400 const blocksRef = Object(external_wp_element_["useRef"])(blocks); 1401 Object(external_wp_element_["useEffect"])(() => { 1402 blocksRef.current = blocks; 1403 }, [blocks]); 1404 Object(external_wp_element_["useEffect"])(() => { 1405 if (focusedWidgetIdRef.current) { 1406 const focusedBlock = blocksRef.current.find(block => Object(external_wp_widgets_["getWidgetIdFromBlock"])(block) === focusedWidgetIdRef.current); 1407 1408 if (focusedBlock) { 1409 selectBlock(focusedBlock.clientId); // If the block is already being selected, the DOM node won't 1410 // get focused again automatically. 1411 // We select the DOM and focus it manually here. 1412 1413 const blockNode = document.querySelector(`[data-block="${focusedBlock.clientId}"]`); 1414 blockNode === null || blockNode === void 0 ? void 0 : blockNode.focus(); 1415 } 1416 } 1417 }, [focusedWidgetIdRef, selectBlock]); 1418 } 1419 1420 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/sidebar-editor-provider.js 1421 1422 1423 /** 1424 * WordPress dependencies 1425 */ 1426 1427 /** 1428 * Internal dependencies 1429 */ 1430 1431 1432 1433 function SidebarEditorProvider({ 1434 sidebar, 1435 settings, 1436 children 1437 }) { 1438 const [blocks, onInput, onChange] = useSidebarBlockEditor(sidebar); 1439 useBlocksFocusControl(blocks); 1440 return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockEditorProvider"], { 1441 value: blocks, 1442 onInput: onInput, 1443 onChange: onChange, 1444 settings: settings, 1445 useSubRegistry: false 1446 }, children); 1447 } 1448 1449 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/welcome-guide/index.js 1450 1451 1452 /** 1453 * WordPress dependencies 1454 */ 1455 1456 1457 1458 /** 1459 * Internal dependencies 1460 */ 1461 1462 1463 function WelcomeGuide({ 1464 sidebar 1465 }) { 1466 const { 1467 __unstableToggleFeature: toggleFeature 1468 } = Object(external_wp_data_["useDispatch"])(store); 1469 const isEntirelyBlockWidgets = sidebar.getWidgets().every(widget => widget.id.startsWith('block-')); 1470 return Object(external_wp_element_["createElement"])("div", { 1471 className: "customize-widgets-welcome-guide" 1472 }, Object(external_wp_element_["createElement"])("div", { 1473 className: "customize-widgets-welcome-guide__image__wrapper" 1474 }, Object(external_wp_element_["createElement"])("picture", null, Object(external_wp_element_["createElement"])("source", { 1475 srcSet: "https://s.w.org/images/block-editor/welcome-editor.svg", 1476 media: "(prefers-reduced-motion: reduce)" 1477 }), Object(external_wp_element_["createElement"])("img", { 1478 className: "customize-widgets-welcome-guide__image", 1479 src: "https://s.w.org/images/block-editor/welcome-editor.gif", 1480 width: "312", 1481 height: "240", 1482 alt: "" 1483 }))), Object(external_wp_element_["createElement"])("h1", { 1484 className: "customize-widgets-welcome-guide__heading" 1485 }, Object(external_wp_i18n_["__"])('Welcome to block Widgets')), Object(external_wp_element_["createElement"])("p", { 1486 className: "customize-widgets-welcome-guide__text" 1487 }, isEntirelyBlockWidgets ? Object(external_wp_i18n_["__"])('Your theme provides different “block” areas for you to add and edit content. Try adding a search bar, social icons, or other types of blocks here and see how they’ll look on your site.') : Object(external_wp_i18n_["__"])('You can now add any block to your site’s widget areas. Don’t worry, all of your favorite widgets still work flawlessly.')), Object(external_wp_element_["createElement"])(external_wp_components_["Button"], { 1488 className: "customize-widgets-welcome-guide__button", 1489 isPrimary: true, 1490 onClick: () => toggleFeature('welcomeGuide') 1491 }, Object(external_wp_i18n_["__"])('Got it')), Object(external_wp_element_["createElement"])("hr", { 1492 className: "customize-widgets-welcome-guide__separator" 1493 }), !isEntirelyBlockWidgets && Object(external_wp_element_["createElement"])("p", { 1494 className: "customize-widgets-welcome-guide__more-info" 1495 }, Object(external_wp_i18n_["__"])('Want to stick with the old widgets?'), Object(external_wp_element_["createElement"])("br", null), Object(external_wp_element_["createElement"])(external_wp_components_["ExternalLink"], { 1496 href: Object(external_wp_i18n_["__"])('https://wordpress.org/plugins/classic-widgets/') 1497 }, Object(external_wp_i18n_["__"])('Get the Classic Widgets plugin.'))), Object(external_wp_element_["createElement"])("p", { 1498 className: "customize-widgets-welcome-guide__more-info" 1499 }, Object(external_wp_i18n_["__"])('New to the block editor?'), Object(external_wp_element_["createElement"])("br", null), Object(external_wp_element_["createElement"])(external_wp_components_["ExternalLink"], { 1500 href: Object(external_wp_i18n_["__"])('https://wordpress.org/support/article/wordpress-editor/') 1501 }, Object(external_wp_i18n_["__"])("Here's a detailed guide.")))); 1502 } 1503 1504 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcuts/index.js 1505 /** 1506 * WordPress dependencies 1507 */ 1508 1509 1510 1511 1512 1513 function KeyboardShortcuts({ 1514 undo, 1515 redo, 1516 save 1517 }) { 1518 Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/undo', event => { 1519 undo(); 1520 event.preventDefault(); 1521 }, { 1522 bindGlobal: true 1523 }); 1524 Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/redo', event => { 1525 redo(); 1526 event.preventDefault(); 1527 }, { 1528 bindGlobal: true 1529 }); 1530 Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/save', event => { 1531 event.preventDefault(); 1532 save(); 1533 }, { 1534 bindGlobal: true 1535 }); 1536 return null; 1537 } 1538 1539 function KeyboardShortcutsRegister() { 1540 const { 1541 registerShortcut, 1542 unregisterShortcut 1543 } = Object(external_wp_data_["useDispatch"])(external_wp_keyboardShortcuts_["store"]); 1544 Object(external_wp_element_["useEffect"])(() => { 1545 registerShortcut({ 1546 name: 'core/customize-widgets/undo', 1547 category: 'global', 1548 description: Object(external_wp_i18n_["__"])('Undo your last changes.'), 1549 keyCombination: { 1550 modifier: 'primary', 1551 character: 'z' 1552 } 1553 }); 1554 registerShortcut({ 1555 name: 'core/customize-widgets/redo', 1556 category: 'global', 1557 description: Object(external_wp_i18n_["__"])('Redo your last undo.'), 1558 keyCombination: { 1559 modifier: 'primaryShift', 1560 character: 'z' 1561 } 1562 }); 1563 registerShortcut({ 1564 name: 'core/customize-widgets/save', 1565 category: 'global', 1566 description: Object(external_wp_i18n_["__"])('Save your changes.'), 1567 keyCombination: { 1568 modifier: 'primary', 1569 character: 's' 1570 } 1571 }); 1572 return () => { 1573 unregisterShortcut('core/customize-widgets/undo'); 1574 unregisterShortcut('core/customize-widgets/redo'); 1575 unregisterShortcut('core/customize-widgets/save'); 1576 }; 1577 }, [registerShortcut]); 1578 return null; 1579 } 1580 1581 KeyboardShortcuts.Register = KeyboardShortcutsRegister; 1582 /* harmony default export */ var keyboard_shortcuts = (KeyboardShortcuts); 1583 1584 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/block-appender/index.js 1585 1586 1587 1588 /** 1589 * WordPress dependencies 1590 */ 1591 1592 1593 1594 function BlockAppender(props) { 1595 const ref = Object(external_wp_element_["useRef"])(); 1596 const isBlocksListEmpty = Object(external_wp_data_["useSelect"])(select => select(external_wp_blockEditor_["store"]).getBlockCount() === 0); // Move the focus to the block appender to prevent focus from 1597 // being lost when emptying the widget area. 1598 1599 Object(external_wp_element_["useEffect"])(() => { 1600 if (isBlocksListEmpty && ref.current) { 1601 const { 1602 ownerDocument 1603 } = ref.current; 1604 1605 if (!ownerDocument.activeElement || ownerDocument.activeElement === ownerDocument.body) { 1606 ref.current.focus(); 1607 } 1608 } 1609 }, [isBlocksListEmpty]); 1610 return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["ButtonBlockAppender"], Object(esm_extends["a" /* default */])({}, props, { 1611 ref: ref 1612 })); 1613 } 1614 1615 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/index.js 1616 1617 1618 /** 1619 * External dependencies 1620 */ 1621 1622 /** 1623 * WordPress dependencies 1624 */ 1625 1626 1627 1628 1629 1630 1631 /** 1632 * Internal dependencies 1633 */ 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 function SidebarBlockEditor({ 1644 blockEditorSettings, 1645 sidebar, 1646 inserter, 1647 inspector 1648 }) { 1649 const [isInserterOpened, setIsInserterOpened] = useInserter(inserter); 1650 const { 1651 hasUploadPermissions, 1652 isFixedToolbarActive, 1653 keepCaretInsideBlock, 1654 isWelcomeGuideActive 1655 } = Object(external_wp_data_["useSelect"])(select => { 1656 return { 1657 hasUploadPermissions: Object(external_lodash_["defaultTo"])(select(external_wp_coreData_["store"]).canUser('create', 'media'), true), 1658 isFixedToolbarActive: select(store).__unstableIsFeatureActive('fixedToolbar'), 1659 keepCaretInsideBlock: select(store).__unstableIsFeatureActive('keepCaretInsideBlock'), 1660 isWelcomeGuideActive: select(store).__unstableIsFeatureActive('welcomeGuide') 1661 }; 1662 }, []); 1663 const settings = Object(external_wp_element_["useMemo"])(() => { 1664 let mediaUploadBlockEditor; 1665 1666 if (hasUploadPermissions) { 1667 mediaUploadBlockEditor = ({ 1668 onError, 1669 ...argumentsObject 1670 }) => { 1671 Object(external_wp_mediaUtils_["uploadMedia"])({ 1672 wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes, 1673 onError: ({ 1674 message 1675 }) => onError(message), 1676 ...argumentsObject 1677 }); 1678 }; 1679 } 1680 1681 return { ...blockEditorSettings, 1682 __experimentalSetIsInserterOpened: setIsInserterOpened, 1683 mediaUpload: mediaUploadBlockEditor, 1684 hasFixedToolbar: isFixedToolbarActive, 1685 keepCaretInsideBlock, 1686 __unstableHasCustomAppender: true 1687 }; 1688 }, [hasUploadPermissions, blockEditorSettings, isFixedToolbarActive, keepCaretInsideBlock, setIsInserterOpened]); 1689 1690 if (isWelcomeGuideActive) { 1691 return Object(external_wp_element_["createElement"])(WelcomeGuide, { 1692 sidebar: sidebar 1693 }); 1694 } 1695 1696 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockEditorKeyboardShortcuts"].Register, null), Object(external_wp_element_["createElement"])(keyboard_shortcuts.Register, null), Object(external_wp_element_["createElement"])(SidebarEditorProvider, { 1697 sidebar: sidebar, 1698 settings: settings 1699 }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockEditorKeyboardShortcuts"], null), Object(external_wp_element_["createElement"])(keyboard_shortcuts, { 1700 undo: sidebar.undo, 1701 redo: sidebar.redo, 1702 save: sidebar.save 1703 }), Object(external_wp_element_["createElement"])(header, { 1704 sidebar: sidebar, 1705 inserter: inserter, 1706 isInserterOpened: isInserterOpened, 1707 setIsInserterOpened: setIsInserterOpened, 1708 isFixedToolbarActive: isFixedToolbarActive 1709 }), Object(external_wp_element_["createElement"])(external_wp_blockEditor_["CopyHandler"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockTools"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockSelectionClearer"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["WritingFlow"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["ObserveTyping"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockList"], { 1710 renderAppender: BlockAppender 1711 })))))), Object(external_wp_element_["createPortal"])( // This is a temporary hack to prevent button component inside <BlockInspector> 1712 // from submitting form when type="button" is not specified. 1713 Object(external_wp_element_["createElement"])("form", { 1714 onSubmit: event => event.preventDefault() 1715 }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockInspector"], null)), inspector.contentContainer[0])), Object(external_wp_element_["createElement"])(external_wp_blockEditor_["__unstableBlockSettingsMenuFirstItem"], null, ({ 1716 onClose 1717 }) => Object(external_wp_element_["createElement"])(block_inspector_button, { 1718 inspector: inspector, 1719 closeMenu: onClose 1720 }))); 1721 } 1722 1723 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-controls/index.js 1724 1725 1726 /** 1727 * WordPress dependencies 1728 */ 1729 1730 const SidebarControlsContext = Object(external_wp_element_["createContext"])(); 1731 function SidebarControls({ 1732 sidebarControls, 1733 activeSidebarControl, 1734 children 1735 }) { 1736 const context = Object(external_wp_element_["useMemo"])(() => ({ 1737 sidebarControls, 1738 activeSidebarControl 1739 }), [sidebarControls, activeSidebarControl]); 1740 return Object(external_wp_element_["createElement"])(SidebarControlsContext.Provider, { 1741 value: context 1742 }, children); 1743 } 1744 function useSidebarControls() { 1745 const { 1746 sidebarControls 1747 } = Object(external_wp_element_["useContext"])(SidebarControlsContext); 1748 return sidebarControls; 1749 } 1750 function useActiveSidebarControl() { 1751 const { 1752 activeSidebarControl 1753 } = Object(external_wp_element_["useContext"])(SidebarControlsContext); 1754 return activeSidebarControl; 1755 } 1756 1757 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/customize-widgets/use-clear-selected-block.js 1758 /** 1759 * WordPress dependencies 1760 */ 1761 1762 1763 1764 /** 1765 * We can't just use <BlockSelectionClearer> because the customizer has 1766 * many root nodes rather than just one in the post editor. 1767 * We need to listen to the focus events in all those roots, and also in 1768 * the preview iframe. 1769 * This hook will clear the selected block when focusing outside the editor, 1770 * with a few exceptions: 1771 * 1. Focusing on popovers. 1772 * 2. Focusing on the inspector. 1773 * 3. Focusing on any modals/dialogs. 1774 * These cases are normally triggered by user interactions from the editor, 1775 * not by explicitly focusing outside the editor, hence no need for clearing. 1776 * 1777 * @param {Object} sidebarControl The sidebar control instance. 1778 * @param {Object} popoverRef The ref object of the popover node container. 1779 */ 1780 1781 function useClearSelectedBlock(sidebarControl, popoverRef) { 1782 const { 1783 hasSelectedBlock, 1784 hasMultiSelection 1785 } = Object(external_wp_data_["useSelect"])(external_wp_blockEditor_["store"]); 1786 const { 1787 clearSelectedBlock 1788 } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]); 1789 Object(external_wp_element_["useEffect"])(() => { 1790 if (popoverRef.current && sidebarControl) { 1791 const inspector = sidebarControl.inspector; 1792 const container = sidebarControl.container[0]; 1793 const ownerDocument = container.ownerDocument; 1794 const ownerWindow = ownerDocument.defaultView; 1795 1796 function handleClearSelectedBlock(element) { 1797 if ( // 1. Make sure there are blocks being selected. 1798 (hasSelectedBlock() || hasMultiSelection()) && // 2. The element should exist in the DOM (not deleted). 1799 element && ownerDocument.contains(element) && // 3. It should also not exist in the container, the popover, nor the dialog. 1800 !container.contains(element) && !popoverRef.current.contains(element) && !element.closest('[role="dialog"]') && // 4. The inspector should not be opened. 1801 !inspector.expanded()) { 1802 clearSelectedBlock(); 1803 } 1804 } // Handle mouse down in the same document. 1805 1806 1807 function handleMouseDown(event) { 1808 handleClearSelectedBlock(event.target); 1809 } // Handle focusing outside the current document, like to iframes. 1810 1811 1812 function handleBlur() { 1813 handleClearSelectedBlock(ownerDocument.activeElement); 1814 } 1815 1816 ownerDocument.addEventListener('mousedown', handleMouseDown); 1817 ownerWindow.addEventListener('blur', handleBlur); 1818 return () => { 1819 ownerDocument.removeEventListener('mousedown', handleMouseDown); 1820 ownerWindow.removeEventListener('blur', handleBlur); 1821 }; 1822 } 1823 }, [popoverRef, sidebarControl, hasSelectedBlock, hasMultiSelection, clearSelectedBlock]); 1824 } 1825 1826 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/customize-widgets/index.js 1827 1828 1829 /** 1830 * WordPress dependencies 1831 */ 1832 1833 1834 /** 1835 * Internal dependencies 1836 */ 1837 1838 1839 1840 1841 1842 1843 function CustomizeWidgets({ 1844 api, 1845 sidebarControls, 1846 blockEditorSettings 1847 }) { 1848 const [activeSidebarControl, setActiveSidebarControl] = Object(external_wp_element_["useState"])(null); 1849 const parentContainer = document.getElementById('customize-theme-controls'); 1850 const popoverRef = Object(external_wp_element_["useRef"])(); 1851 useClearSelectedBlock(activeSidebarControl, popoverRef); 1852 Object(external_wp_element_["useEffect"])(() => { 1853 const unsubscribers = sidebarControls.map(sidebarControl => sidebarControl.subscribe(expanded => { 1854 if (expanded) { 1855 setActiveSidebarControl(sidebarControl); 1856 } 1857 })); 1858 return () => { 1859 unsubscribers.forEach(unsubscriber => unsubscriber()); 1860 }; 1861 }, [sidebarControls]); 1862 const activeSidebar = activeSidebarControl && Object(external_wp_element_["createPortal"])(Object(external_wp_element_["createElement"])(error_boundary_ErrorBoundary, null, Object(external_wp_element_["createElement"])(SidebarBlockEditor, { 1863 key: activeSidebarControl.id, 1864 blockEditorSettings: blockEditorSettings, 1865 sidebar: activeSidebarControl.sidebarAdapter, 1866 inserter: activeSidebarControl.inserter, 1867 inspector: activeSidebarControl.inspector 1868 })), activeSidebarControl.container[0]); // We have to portal this to the parent of both the editor and the inspector, 1869 // so that the popovers will appear above both of them. 1870 1871 const popover = parentContainer && Object(external_wp_element_["createPortal"])(Object(external_wp_element_["createElement"])("div", { 1872 className: "customize-widgets-popover", 1873 ref: popoverRef 1874 }, Object(external_wp_element_["createElement"])(external_wp_components_["Popover"].Slot, null)), parentContainer); 1875 return Object(external_wp_element_["createElement"])(external_wp_components_["SlotFillProvider"], null, Object(external_wp_element_["createElement"])(SidebarControls, { 1876 sidebarControls: sidebarControls, 1877 activeSidebarControl: activeSidebarControl 1878 }, Object(external_wp_element_["createElement"])(FocusControl, { 1879 api: api, 1880 sidebarControls: sidebarControls 1881 }, activeSidebar, popover))); 1882 } 1883 1884 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/inspector-section.js 1885 function getInspectorSection() { 1886 const { 1887 wp: { 1888 customize 1889 } 1890 } = window; 1891 return class InspectorSection extends customize.Section { 1892 constructor(id, options) { 1893 super(id, options); 1894 this.parentSection = options.parentSection; 1895 this.returnFocusWhenClose = null; 1896 } 1897 1898 ready() { 1899 this.contentContainer[0].classList.add('customize-widgets-layout__inspector'); 1900 } 1901 1902 onChangeExpanded(expanded, args) { 1903 super.onChangeExpanded(expanded, args); 1904 1905 if (this.parentSection && !args.unchanged) { 1906 if (expanded) { 1907 this.parentSection.collapse({ 1908 manualTransition: true 1909 }); 1910 } else { 1911 this.parentSection.expand({ 1912 manualTransition: true, 1913 completeCallback: () => { 1914 // Return focus after finishing the transition. 1915 if (this.returnFocusWhenClose && !this.contentContainer[0].contains(this.returnFocusWhenClose)) { 1916 this.returnFocusWhenClose.focus(); 1917 } 1918 } 1919 }); 1920 } 1921 } 1922 } 1923 1924 open({ 1925 returnFocusWhenClose 1926 } = {}) { 1927 this.returnFocusWhenClose = returnFocusWhenClose; 1928 this.expand({ 1929 allowMultiple: true 1930 }); 1931 } 1932 1933 close() { 1934 this.collapse({ 1935 allowMultiple: true 1936 }); 1937 } 1938 1939 }; 1940 } 1941 1942 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/sidebar-section.js 1943 /** 1944 * WordPress dependencies 1945 */ 1946 1947 /** 1948 * Internal dependencies 1949 */ 1950 1951 1952 1953 const getInspectorSectionId = sidebarId => `widgets-inspector-${sidebarId}`; 1954 1955 function getSidebarSection() { 1956 const { 1957 wp: { 1958 customize 1959 } 1960 } = window; 1961 return class SidebarSection extends customize.Section { 1962 ready() { 1963 const InspectorSection = getInspectorSection(); 1964 this.inspector = new InspectorSection(getInspectorSectionId(this.id), { 1965 title: Object(external_wp_i18n_["__"])('Block Settings'), 1966 parentSection: this, 1967 customizeAction: [Object(external_wp_i18n_["__"])('Customizing'), Object(external_wp_i18n_["__"])('Widgets'), this.params.title].join(' ▸ ') 1968 }); 1969 customize.section.add(this.inspector); 1970 this.contentContainer[0].classList.add('customize-widgets__sidebar-section'); 1971 } 1972 1973 hasSubSectionOpened() { 1974 return this.inspector.expanded(); 1975 } 1976 1977 onChangeExpanded(expanded, _args) { 1978 const controls = this.controls(); 1979 const args = { ..._args, 1980 1981 completeCallback() { 1982 var _args$completeCallbac; 1983 1984 controls.forEach(control => { 1985 var _control$onChangeSect; 1986 1987 (_control$onChangeSect = control.onChangeSectionExpanded) === null || _control$onChangeSect === void 0 ? void 0 : _control$onChangeSect.call(control, expanded, args); 1988 }); 1989 (_args$completeCallbac = _args.completeCallback) === null || _args$completeCallbac === void 0 ? void 0 : _args$completeCallbac.call(_args); 1990 } 1991 1992 }; 1993 1994 if (args.manualTransition) { 1995 if (expanded) { 1996 this.contentContainer.addClass(['busy', 'open']); 1997 this.contentContainer.removeClass('is-sub-section-open'); 1998 this.contentContainer.closest('.wp-full-overlay').addClass('section-open'); 1999 this.contentContainer.one('transitionend', () => { 2000 this.contentContainer.removeClass('busy'); 2001 args.completeCallback(); 2002 }); 2003 } else { 2004 this.contentContainer.addClass(['busy', 'is-sub-section-open']); 2005 this.contentContainer.closest('.wp-full-overlay').addClass('section-open'); 2006 this.contentContainer.removeClass('open'); 2007 this.contentContainer.one('transitionend', () => { 2008 this.contentContainer.removeClass('busy'); 2009 args.completeCallback(); 2010 }); 2011 } 2012 } else { 2013 super.onChangeExpanded(expanded, args); 2014 } 2015 } 2016 2017 }; 2018 } 2019 2020 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/sidebar-adapter.js 2021 /** 2022 * Internal dependencies 2023 */ 2024 2025 const { 2026 wp 2027 } = window; 2028 2029 function parseWidgetId(widgetId) { 2030 const matches = widgetId.match(/^(.+)-(\d+)$/); 2031 2032 if (matches) { 2033 return { 2034 idBase: matches[1], 2035 number: parseInt(matches[2], 10) 2036 }; 2037 } // Likely an old single widget. 2038 2039 2040 return { 2041 idBase: widgetId 2042 }; 2043 } 2044 2045 function widgetIdToSettingId(widgetId) { 2046 const { 2047 idBase, 2048 number 2049 } = parseWidgetId(widgetId); 2050 2051 if (number) { 2052 return `widget_${idBase}[${number}]`; 2053 } 2054 2055 return `widget_${idBase}`; 2056 } 2057 /** 2058 * This is a custom debounce function to call different callbacks depending on 2059 * whether it's the _leading_ call or not. 2060 * 2061 * @param {Function} leading The callback that gets called first. 2062 * @param {Function} callback The callback that gets called after the first time. 2063 * @param {number} timeout The debounced time in milliseconds. 2064 * @return {Function} The debounced function. 2065 */ 2066 2067 2068 function debounce(leading, callback, timeout) { 2069 let isLeading = false; 2070 let timerID; 2071 2072 function debounced(...args) { 2073 const result = (isLeading ? callback : leading).apply(this, args); 2074 isLeading = true; 2075 clearTimeout(timerID); 2076 timerID = setTimeout(() => { 2077 isLeading = false; 2078 }, timeout); 2079 return result; 2080 } 2081 2082 debounced.cancel = () => { 2083 isLeading = false; 2084 clearTimeout(timerID); 2085 }; 2086 2087 return debounced; 2088 } 2089 2090 class sidebar_adapter_SidebarAdapter { 2091 constructor(setting, api) { 2092 this.setting = setting; 2093 this.api = api; 2094 this.locked = false; 2095 this.widgetsCache = new WeakMap(); 2096 this.subscribers = new Set(); 2097 this.history = [this._getWidgetIds().map(widgetId => this.getWidget(widgetId))]; 2098 this.historyIndex = 0; 2099 this.historySubscribers = new Set(); // Debounce the input for 1 second. 2100 2101 this._debounceSetHistory = debounce(this._pushHistory, this._replaceHistory, 1000); 2102 this.setting.bind(this._handleSettingChange.bind(this)); 2103 this.api.bind('change', this._handleAllSettingsChange.bind(this)); 2104 this.undo = this.undo.bind(this); 2105 this.redo = this.redo.bind(this); 2106 this.save = this.save.bind(this); 2107 } 2108 2109 subscribe(callback) { 2110 this.subscribers.add(callback); 2111 return () => { 2112 this.subscribers.delete(callback); 2113 }; 2114 } 2115 2116 getWidgets() { 2117 return this.history[this.historyIndex]; 2118 } 2119 2120 _emit(...args) { 2121 for (const callback of this.subscribers) { 2122 callback(...args); 2123 } 2124 } 2125 2126 _getWidgetIds() { 2127 return this.setting.get(); 2128 } 2129 2130 _pushHistory() { 2131 this.history = [...this.history.slice(0, this.historyIndex + 1), this._getWidgetIds().map(widgetId => this.getWidget(widgetId))]; 2132 this.historyIndex += 1; 2133 this.historySubscribers.forEach(listener => listener()); 2134 } 2135 2136 _replaceHistory() { 2137 this.history[this.historyIndex] = this._getWidgetIds().map(widgetId => this.getWidget(widgetId)); 2138 } 2139 2140 _handleSettingChange() { 2141 if (this.locked) { 2142 return; 2143 } 2144 2145 const prevWidgets = this.getWidgets(); 2146 2147 this._pushHistory(); 2148 2149 this._emit(prevWidgets, this.getWidgets()); 2150 } 2151 2152 _handleAllSettingsChange(setting) { 2153 if (this.locked) { 2154 return; 2155 } 2156 2157 if (!setting.id.startsWith('widget_')) { 2158 return; 2159 } 2160 2161 const widgetId = settingIdToWidgetId(setting.id); 2162 2163 if (!this.setting.get().includes(widgetId)) { 2164 return; 2165 } 2166 2167 const prevWidgets = this.getWidgets(); 2168 2169 this._pushHistory(); 2170 2171 this._emit(prevWidgets, this.getWidgets()); 2172 } 2173 2174 _createWidget(widget) { 2175 const widgetModel = wp.customize.Widgets.availableWidgets.findWhere({ 2176 id_base: widget.idBase 2177 }); 2178 let number = widget.number; 2179 2180 if (widgetModel.get('is_multi') && !number) { 2181 widgetModel.set('multi_number', widgetModel.get('multi_number') + 1); 2182 number = widgetModel.get('multi_number'); 2183 } 2184 2185 const settingId = number ? `widget_${widget.idBase}[${number}]` : `widget_${widget.idBase}`; 2186 const settingArgs = { 2187 transport: wp.customize.Widgets.data.selectiveRefreshableWidgets[widgetModel.get('id_base')] ? 'postMessage' : 'refresh', 2188 previewer: this.setting.previewer 2189 }; 2190 const setting = this.api.create(settingId, settingId, '', settingArgs); 2191 setting.set(widget.instance); 2192 const widgetId = settingIdToWidgetId(settingId); 2193 return widgetId; 2194 } 2195 2196 _removeWidget(widget) { 2197 const settingId = widgetIdToSettingId(widget.id); 2198 const setting = this.api(settingId); 2199 2200 if (setting) { 2201 const instance = setting.get(); 2202 this.widgetsCache.delete(instance); 2203 } 2204 2205 this.api.remove(settingId); 2206 } 2207 2208 _updateWidget(widget) { 2209 const prevWidget = this.getWidget(widget.id); // Bail out update if nothing changed. 2210 2211 if (prevWidget === widget) { 2212 return widget.id; 2213 } // Update existing setting if only the widget's instance changed. 2214 2215 2216 if (prevWidget.idBase && widget.idBase && prevWidget.idBase === widget.idBase) { 2217 const settingId = widgetIdToSettingId(widget.id); 2218 this.api(settingId).set(widget.instance); 2219 return widget.id; 2220 } // Otherwise delete and re-create. 2221 2222 2223 this._removeWidget(widget); 2224 2225 return this._createWidget(widget); 2226 } 2227 2228 getWidget(widgetId) { 2229 if (!widgetId) { 2230 return null; 2231 } 2232 2233 const { 2234 idBase, 2235 number 2236 } = parseWidgetId(widgetId); 2237 const settingId = widgetIdToSettingId(widgetId); 2238 const setting = this.api(settingId); 2239 2240 if (!setting) { 2241 return null; 2242 } 2243 2244 const instance = setting.get(); 2245 2246 if (this.widgetsCache.has(instance)) { 2247 return this.widgetsCache.get(instance); 2248 } 2249 2250 const widget = { 2251 id: widgetId, 2252 idBase, 2253 number, 2254 instance 2255 }; 2256 this.widgetsCache.set(instance, widget); 2257 return widget; 2258 } 2259 2260 _updateWidgets(nextWidgets) { 2261 this.locked = true; 2262 const addedWidgetIds = []; 2263 const nextWidgetIds = nextWidgets.map(nextWidget => { 2264 if (nextWidget.id && this.getWidget(nextWidget.id)) { 2265 addedWidgetIds.push(null); 2266 return this._updateWidget(nextWidget); 2267 } 2268 2269 const widgetId = this._createWidget(nextWidget); 2270 2271 addedWidgetIds.push(widgetId); 2272 return widgetId; 2273 }); 2274 const deletedWidgets = this.getWidgets().filter(widget => !nextWidgetIds.includes(widget.id)); 2275 deletedWidgets.forEach(widget => this._removeWidget(widget)); 2276 this.setting.set(nextWidgetIds); 2277 this.locked = false; 2278 return addedWidgetIds; 2279 } 2280 2281 setWidgets(nextWidgets) { 2282 const addedWidgetIds = this._updateWidgets(nextWidgets); 2283 2284 this._debounceSetHistory(); 2285 2286 return addedWidgetIds; 2287 } 2288 /** 2289 * Undo/Redo related features 2290 */ 2291 2292 2293 hasUndo() { 2294 return this.historyIndex > 0; 2295 } 2296 2297 hasRedo() { 2298 return this.historyIndex < this.history.length - 1; 2299 } 2300 2301 _seek(historyIndex) { 2302 const currentWidgets = this.getWidgets(); 2303 this.historyIndex = historyIndex; 2304 const widgets = this.history[this.historyIndex]; 2305 2306 this._updateWidgets(widgets); 2307 2308 this._emit(currentWidgets, this.getWidgets()); 2309 2310 this.historySubscribers.forEach(listener => listener()); 2311 2312 this._debounceSetHistory.cancel(); 2313 } 2314 2315 undo() { 2316 if (!this.hasUndo()) { 2317 return; 2318 } 2319 2320 this._seek(this.historyIndex - 1); 2321 } 2322 2323 redo() { 2324 if (!this.hasRedo()) { 2325 return; 2326 } 2327 2328 this._seek(this.historyIndex + 1); 2329 } 2330 2331 subscribeHistory(listener) { 2332 this.historySubscribers.add(listener); 2333 return () => { 2334 this.historySubscribers.delete(listener); 2335 }; 2336 } 2337 2338 save() { 2339 this.api.previewer.save(); 2340 } 2341 2342 } 2343 2344 // EXTERNAL MODULE: external ["wp","dom"] 2345 var external_wp_dom_ = __webpack_require__("1CF3"); 2346 2347 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/inserter-outer-section.js 2348 /** 2349 * WordPress dependencies 2350 */ 2351 2352 2353 2354 /** 2355 * Internal dependencies 2356 */ 2357 2358 2359 function getInserterOuterSection() { 2360 const { 2361 wp: { 2362 customize 2363 } 2364 } = window; 2365 const OuterSection = customize.OuterSection; // Override the OuterSection class to handle multiple outer sections. 2366 // It closes all the other outer sections whenever one is opened. 2367 // The result is that at most one outer section can be opened at the same time. 2368 2369 customize.OuterSection = class extends OuterSection { 2370 onChangeExpanded(expanded, args) { 2371 if (expanded) { 2372 customize.section.each(section => { 2373 if (section.params.type === 'outer' && section.id !== this.id) { 2374 if (section.expanded()) { 2375 section.collapse(); 2376 } 2377 } 2378 }); 2379 } 2380 2381 return super.onChangeExpanded(expanded, args); 2382 } 2383 2384 }; // Handle constructor so that "params.type" can be correctly pointed to "outer". 2385 2386 customize.sectionConstructor.outer = customize.OuterSection; 2387 return class InserterOuterSection extends customize.OuterSection { 2388 constructor(...args) { 2389 super(...args); // This is necessary since we're creating a new class which is not identical to the original OuterSection. 2390 // @See https://github.com/WordPress/wordpress-develop/blob/42b05c397c50d9dc244083eff52991413909d4bd/src/js/_enqueues/wp/customize/controls.js#L1427-L1436 2391 2392 this.params.type = 'outer'; 2393 this.activeElementBeforeExpanded = null; 2394 const ownerWindow = this.contentContainer[0].ownerDocument.defaultView; // Handle closing the inserter when pressing the Escape key. 2395 2396 ownerWindow.addEventListener('keydown', event => { 2397 if (this.expanded() && (event.keyCode === external_wp_keycodes_["ESCAPE"] || event.code === 'Escape')) { 2398 event.stopPropagation(); 2399 Object(external_wp_data_["dispatch"])(store).setIsInserterOpened(false); 2400 } 2401 }, // Use capture mode to make this run before other event listeners. 2402 true); 2403 this.contentContainer.addClass('widgets-inserter'); // Set a flag if the state is being changed from open() or close(). 2404 // Don't propagate the event if it's an internal action to prevent infinite loop. 2405 2406 this.isFromInternalAction = false; 2407 this.expanded.bind(() => { 2408 if (!this.isFromInternalAction) { 2409 // Propagate the event to React to sync the state. 2410 Object(external_wp_data_["dispatch"])(store).setIsInserterOpened(this.expanded()); 2411 } 2412 2413 this.isFromInternalAction = false; 2414 }); 2415 } 2416 2417 open() { 2418 if (!this.expanded()) { 2419 const contentContainer = this.contentContainer[0]; 2420 this.activeElementBeforeExpanded = contentContainer.ownerDocument.activeElement; 2421 this.isFromInternalAction = true; 2422 this.expand({ 2423 completeCallback() { 2424 // We have to do this in a "completeCallback" or else the elements will not yet be visible/tabbable. 2425 // The first one should be the close button, 2426 // we want to skip it and choose the second one instead, which is the search box. 2427 const searchBox = external_wp_dom_["focus"].tabbable.find(contentContainer)[1]; 2428 2429 if (searchBox) { 2430 searchBox.focus(); 2431 } 2432 } 2433 2434 }); 2435 } 2436 } 2437 2438 close() { 2439 if (this.expanded()) { 2440 const contentContainer = this.contentContainer[0]; 2441 const activeElement = contentContainer.ownerDocument.activeElement; 2442 this.isFromInternalAction = true; 2443 this.collapse({ 2444 completeCallback() { 2445 // Return back the focus when closing the inserter. 2446 // Only do this if the active element which triggers the action is inside the inserter, 2447 // (the close button for instance). In that case the focus will be lost. 2448 // Otherwise, we don't hijack the focus when the user is focusing on other elements 2449 // (like the quick inserter). 2450 if (contentContainer.contains(activeElement)) { 2451 // Return back the focus when closing the inserter. 2452 if (this.activeElementBeforeExpanded) { 2453 this.activeElementBeforeExpanded.focus(); 2454 } 2455 } 2456 } 2457 2458 }); 2459 } 2460 } 2461 2462 }; 2463 } 2464 2465 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/sidebar-control.js 2466 /** 2467 * WordPress dependencies 2468 */ 2469 2470 /** 2471 * Internal dependencies 2472 */ 2473 2474 2475 2476 2477 2478 const getInserterId = controlId => `widgets-inserter-${controlId}`; 2479 2480 function getSidebarControl() { 2481 const { 2482 wp: { 2483 customize 2484 } 2485 } = window; 2486 return class SidebarControl extends customize.Control { 2487 constructor(...args) { 2488 super(...args); 2489 this.subscribers = new Set(); 2490 } 2491 2492 ready() { 2493 const InserterOuterSection = getInserterOuterSection(); 2494 this.inserter = new InserterOuterSection(getInserterId(this.id), {}); 2495 customize.section.add(this.inserter); 2496 this.sectionInstance = customize.section(this.section()); 2497 this.inspector = this.sectionInstance.inspector; 2498 this.sidebarAdapter = new sidebar_adapter_SidebarAdapter(this.setting, customize); 2499 } 2500 2501 subscribe(callback) { 2502 this.subscribers.add(callback); 2503 return () => { 2504 this.subscribers.delete(callback); 2505 }; 2506 } 2507 2508 onChangeSectionExpanded(expanded, args) { 2509 if (!args.unchanged) { 2510 // Close the inserter when the section collapses. 2511 if (!expanded) { 2512 Object(external_wp_data_["dispatch"])(store).setIsInserterOpened(false); 2513 } 2514 2515 this.subscribers.forEach(subscriber => subscriber(expanded, args)); 2516 } 2517 } 2518 2519 }; 2520 } 2521 2522 // EXTERNAL MODULE: external ["wp","hooks"] 2523 var external_wp_hooks_ = __webpack_require__("g56x"); 2524 2525 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/move-to-sidebar.js 2526 2527 2528 /** 2529 * External dependencies 2530 */ 2531 2532 /** 2533 * WordPress dependencies 2534 */ 2535 2536 2537 2538 2539 2540 2541 /** 2542 * Internal dependencies 2543 */ 2544 2545 2546 2547 2548 const withMoveToSidebarToolbarItem = Object(external_wp_compose_["createHigherOrderComponent"])(BlockEdit => props => { 2549 let widgetId = Object(external_wp_widgets_["getWidgetIdFromBlock"])(props); 2550 const sidebarControls = useSidebarControls(); 2551 const activeSidebarControl = useActiveSidebarControl(); 2552 const hasMultipleSidebars = (sidebarControls === null || sidebarControls === void 0 ? void 0 : sidebarControls.length) > 1; 2553 const blockName = props.name; 2554 const clientId = props.clientId; 2555 const canInsertBlockInSidebar = Object(external_wp_data_["useSelect"])(select => { 2556 // Use an empty string to represent the root block list, which 2557 // in the customizer editor represents a sidebar/widget area. 2558 return select(external_wp_blockEditor_["store"]).canInsertBlockType(blockName, ''); 2559 }, [blockName]); 2560 const block = Object(external_wp_data_["useSelect"])(select => select(external_wp_blockEditor_["store"]).getBlock(clientId), [clientId]); 2561 const { 2562 removeBlock 2563 } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]); 2564 const [, focusWidget] = useFocusControl(); 2565 2566 function moveToSidebar(sidebarControlId) { 2567 const newSidebarControl = sidebarControls.find(sidebarControl => sidebarControl.id === sidebarControlId); 2568 2569 if (widgetId) { 2570 /** 2571 * If there's a widgetId, move it to the other sidebar. 2572 */ 2573 const oldSetting = activeSidebarControl.setting; 2574 const newSetting = newSidebarControl.setting; 2575 oldSetting(Object(external_lodash_["without"])(oldSetting(), widgetId)); 2576 newSetting([...newSetting(), widgetId]); 2577 } else { 2578 /** 2579 * If there isn't a widgetId, it's most likely a inner block. 2580 * First, remove the block in the original sidebar, 2581 * then, create a new widget in the new sidebar and get back its widgetId. 2582 */ 2583 const sidebarAdapter = newSidebarControl.sidebarAdapter; 2584 removeBlock(clientId); 2585 const addedWidgetIds = sidebarAdapter.setWidgets([...sidebarAdapter.getWidgets(), blockToWidget(block)]); // The last non-null id is the added widget's id. 2586 2587 widgetId = addedWidgetIds.reverse().find(id => !!id); 2588 } // Move focus to the moved widget and expand the sidebar. 2589 2590 2591 focusWidget(widgetId); 2592 } 2593 2594 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(BlockEdit, props), hasMultipleSidebars && canInsertBlockInSidebar && Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockControls"], null, Object(external_wp_element_["createElement"])(external_wp_widgets_["MoveToWidgetArea"], { 2595 widgetAreas: sidebarControls.map(sidebarControl => ({ 2596 id: sidebarControl.id, 2597 name: sidebarControl.params.label, 2598 description: sidebarControl.params.description 2599 })), 2600 currentWidgetAreaId: activeSidebarControl === null || activeSidebarControl === void 0 ? void 0 : activeSidebarControl.id, 2601 onSelect: moveToSidebar 2602 }))); 2603 }, 'withMoveToSidebarToolbarItem'); 2604 Object(external_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/customize-widgets/block-edit', withMoveToSidebarToolbarItem); 2605 2606 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/replace-media-upload.js 2607 /** 2608 * WordPress dependencies 2609 */ 2610 2611 2612 2613 const replaceMediaUpload = () => external_wp_mediaUtils_["MediaUpload"]; 2614 2615 Object(external_wp_hooks_["addFilter"])('editor.MediaUpload', 'core/edit-widgets/replace-media-upload', replaceMediaUpload); 2616 2617 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/wide-widget-display.js 2618 2619 2620 2621 /** 2622 * WordPress dependencies 2623 */ 2624 2625 2626 const { 2627 wp: wide_widget_display_wp 2628 } = window; 2629 const withWideWidgetDisplay = Object(external_wp_compose_["createHigherOrderComponent"])(BlockEdit => props => { 2630 var _wp$customize$Widgets, _wp$customize$Widgets2; 2631 2632 const { 2633 idBase 2634 } = props.attributes; 2635 const isWide = (_wp$customize$Widgets = (_wp$customize$Widgets2 = wide_widget_display_wp.customize.Widgets.data.availableWidgets.find(widget => widget.id_base === idBase)) === null || _wp$customize$Widgets2 === void 0 ? void 0 : _wp$customize$Widgets2.is_wide) !== null && _wp$customize$Widgets !== void 0 ? _wp$customize$Widgets : false; 2636 return Object(external_wp_element_["createElement"])(BlockEdit, Object(esm_extends["a" /* default */])({}, props, { 2637 isWide: isWide 2638 })); 2639 }, 'withWideWidgetDisplay'); 2640 Object(external_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/customize-widgets/wide-widget-display', withWideWidgetDisplay); 2641 2642 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/index.js 2643 /** 2644 * Internal dependencies 2645 */ 2646 2647 2648 2649 2650 // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/index.js 2651 2652 2653 /** 2654 * WordPress dependencies 2655 */ 2656 2657 2658 2659 2660 /** 2661 * Internal dependencies 2662 */ 2663 2664 2665 2666 2667 2668 const { 2669 wp: build_module_wp 2670 } = window; 2671 const DISABLED_BLOCKS = ['core/more', 'core/block', 'core/freeform']; 2672 const ENABLE_EXPERIMENTAL_FSE_BLOCKS = false; 2673 /** 2674 * Initializes the widgets block editor in the customizer. 2675 * 2676 * @param {string} editorName The editor name. 2677 * @param {Object} blockEditorSettings Block editor settings. 2678 */ 2679 2680 function initialize(editorName, blockEditorSettings) { 2681 const coreBlocks = Object(external_wp_blockLibrary_["__experimentalGetCoreBlocks"])().filter(block => { 2682 return !(DISABLED_BLOCKS.includes(block.name) || block.name.startsWith('core/post') || block.name.startsWith('core/query') || block.name.startsWith('core/site')); 2683 }); 2684 2685 Object(external_wp_blockLibrary_["registerCoreBlocks"])(coreBlocks); 2686 Object(external_wp_widgets_["registerLegacyWidgetBlock"])(); 2687 2688 if (false) {} 2689 2690 Object(external_wp_widgets_["registerLegacyWidgetVariations"])(blockEditorSettings); // As we are unregistering `core/freeform` to avoid the Classic block, we must 2691 // replace it with something as the default freeform content handler. Failure to 2692 // do this will result in errors in the default block parser. 2693 // see: https://github.com/WordPress/gutenberg/issues/33097 2694 2695 Object(external_wp_blocks_["setFreeformContentHandlerName"])('core/html'); 2696 const SidebarControl = getSidebarControl(blockEditorSettings); 2697 build_module_wp.customize.sectionConstructor.sidebar = getSidebarSection(); 2698 build_module_wp.customize.controlConstructor.sidebar_block_editor = SidebarControl; 2699 const container = document.createElement('div'); 2700 document.body.appendChild(container); 2701 build_module_wp.customize.bind('ready', () => { 2702 const sidebarControls = []; 2703 build_module_wp.customize.control.each(control => { 2704 if (control instanceof SidebarControl) { 2705 sidebarControls.push(control); 2706 } 2707 }); 2708 Object(external_wp_element_["render"])(Object(external_wp_element_["createElement"])(CustomizeWidgets, { 2709 api: build_module_wp.customize, 2710 sidebarControls: sidebarControls, 2711 blockEditorSettings: blockEditorSettings 2712 }), container); 2713 }); 2714 } 2715 2716 2717 /***/ }), 2718 2719 /***/ "GLVC": 2720 /***/ (function(module, exports) { 2721 2722 (function() { module.exports = window["wp"]["widgets"]; }()); 2723 2724 /***/ }), 2725 2726 /***/ "GRId": 2727 /***/ (function(module, exports) { 2728 2729 (function() { module.exports = window["wp"]["element"]; }()); 2730 2731 /***/ }), 2732 2733 /***/ "HSyU": 2734 /***/ (function(module, exports) { 2735 2736 (function() { module.exports = window["wp"]["blocks"]; }()); 2737 2738 /***/ }), 2739 2740 /***/ "K+tz": 2741 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2742 2743 "use strict"; 2744 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 2745 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 2746 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 2747 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 2748 2749 2750 /** 2751 * WordPress dependencies 2752 */ 2753 2754 const external = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2755 xmlns: "http://www.w3.org/2000/svg", 2756 viewBox: "0 0 24 24" 2757 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2758 d: "M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z" 2759 })); 2760 /* harmony default export */ __webpack_exports__["a"] = (external); 2761 2762 2763 /***/ }), 2764 2765 /***/ "K2cm": 2766 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2767 2768 "use strict"; 2769 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 2770 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 2771 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 2772 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 2773 2774 2775 /** 2776 * WordPress dependencies 2777 */ 2778 2779 const redo = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2780 xmlns: "http://www.w3.org/2000/svg", 2781 viewBox: "0 0 24 24" 2782 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2783 d: "M15.6 6.5l-1.1 1 2.9 3.3H8c-.9 0-1.7.3-2.3.9-1.4 1.5-1.4 4.2-1.4 5.6v.2h1.5v-.3c0-1.1 0-3.5 1-4.5.3-.3.7-.5 1.3-.5h9.2L14.5 15l1.1 1.1 4.6-4.6-4.6-5z" 2784 })); 2785 /* harmony default export */ __webpack_exports__["a"] = (redo); 2786 2787 2788 /***/ }), 2789 2790 /***/ "K9lf": 2791 /***/ (function(module, exports) { 2792 2793 (function() { module.exports = window["wp"]["compose"]; }()); 2794 2795 /***/ }), 2796 2797 /***/ "Ntru": 2798 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2799 2800 "use strict"; 2801 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 2802 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 2803 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 2804 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 2805 2806 2807 /** 2808 * WordPress dependencies 2809 */ 2810 2811 const undo = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2812 xmlns: "http://www.w3.org/2000/svg", 2813 viewBox: "0 0 24 24" 2814 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2815 d: "M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z" 2816 })); 2817 /* harmony default export */ __webpack_exports__["a"] = (undo); 2818 2819 2820 /***/ }), 2821 2822 /***/ "Q4Sy": 2823 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2824 2825 "use strict"; 2826 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 2827 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 2828 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 2829 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 2830 2831 2832 /** 2833 * WordPress dependencies 2834 */ 2835 2836 const plus = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2837 xmlns: "http://www.w3.org/2000/svg", 2838 viewBox: "0 0 24 24" 2839 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2840 d: "M18 11.2h-5.2V6h-1.6v5.2H6v1.6h5.2V18h1.6v-5.2H18z" 2841 })); 2842 /* harmony default export */ __webpack_exports__["a"] = (plus); 2843 2844 2845 /***/ }), 2846 2847 /***/ "QyPg": 2848 /***/ (function(module, exports) { 2849 2850 (function() { module.exports = window["wp"]["blockLibrary"]; }()); 2851 2852 /***/ }), 2853 2854 /***/ "RMJe": 2855 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2856 2857 "use strict"; 2858 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 2859 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 2860 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 2861 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 2862 2863 2864 /** 2865 * WordPress dependencies 2866 */ 2867 2868 const check = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2869 xmlns: "http://www.w3.org/2000/svg", 2870 viewBox: "0 0 24 24" 2871 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2872 d: "M18.3 5.6L9.9 16.9l-4.6-3.4-.9 1.2 5.8 4.3 9.3-12.6z" 2873 })); 2874 /* harmony default export */ __webpack_exports__["a"] = (check); 2875 2876 2877 /***/ }), 2878 2879 /***/ "RxS6": 2880 /***/ (function(module, exports) { 2881 2882 (function() { module.exports = window["wp"]["keycodes"]; }()); 2883 2884 /***/ }), 2885 2886 /***/ "TSYQ": 2887 /***/ (function(module, exports, __webpack_require__) { 2888 2889 var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 2890 Copyright (c) 2018 Jed Watson. 2891 Licensed under the MIT License (MIT), see 2892 http://jedwatson.github.io/classnames 2893 */ 2894 /* global define */ 2895 2896 (function () { 2897 'use strict'; 2898 2899 var hasOwn = {}.hasOwnProperty; 2900 2901 function classNames() { 2902 var classes = []; 2903 2904 for (var i = 0; i < arguments.length; i++) { 2905 var arg = arguments[i]; 2906 if (!arg) continue; 2907 2908 var argType = typeof arg; 2909 2910 if (argType === 'string' || argType === 'number') { 2911 classes.push(arg); 2912 } else if (Array.isArray(arg)) { 2913 if (arg.length) { 2914 var inner = classNames.apply(null, arg); 2915 if (inner) { 2916 classes.push(inner); 2917 } 2918 } 2919 } else if (argType === 'object') { 2920 if (arg.toString === Object.prototype.toString) { 2921 for (var key in arg) { 2922 if (hasOwn.call(arg, key) && arg[key]) { 2923 classes.push(key); 2924 } 2925 } 2926 } else { 2927 classes.push(arg.toString()); 2928 } 2929 } 2930 } 2931 2932 return classes.join(' '); 2933 } 2934 2935 if ( true && module.exports) { 2936 classNames.default = classNames; 2937 module.exports = classNames; 2938 } else if (true) { 2939 // register as 'classnames', consistent with npm package name 2940 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { 2941 return classNames; 2942 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 2943 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 2944 } else {} 2945 }()); 2946 2947 2948 /***/ }), 2949 2950 /***/ "Tqx9": 2951 /***/ (function(module, exports) { 2952 2953 (function() { module.exports = window["wp"]["primitives"]; }()); 2954 2955 /***/ }), 2956 2957 /***/ "VKE3": 2958 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2959 2960 "use strict"; 2961 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 2962 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 2963 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 2964 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 2965 2966 2967 /** 2968 * WordPress dependencies 2969 */ 2970 2971 const moreVertical = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 2972 xmlns: "http://www.w3.org/2000/svg", 2973 viewBox: "0 0 24 24" 2974 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 2975 d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" 2976 })); 2977 /* harmony default export */ __webpack_exports__["a"] = (moreVertical); 2978 2979 2980 /***/ }), 2981 2982 /***/ "YLtl": 2983 /***/ (function(module, exports) { 2984 2985 (function() { module.exports = window["lodash"]; }()); 2986 2987 /***/ }), 2988 2989 /***/ "axFQ": 2990 /***/ (function(module, exports) { 2991 2992 (function() { module.exports = window["wp"]["blockEditor"]; }()); 2993 2994 /***/ }), 2995 2996 /***/ "bWcr": 2997 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2998 2999 "use strict"; 3000 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 3001 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 3002 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 3003 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 3004 3005 3006 /** 3007 * WordPress dependencies 3008 */ 3009 3010 const closeSmall = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 3011 xmlns: "http://www.w3.org/2000/svg", 3012 viewBox: "0 0 24 24" 3013 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 3014 d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" 3015 })); 3016 /* harmony default export */ __webpack_exports__["a"] = (closeSmall); 3017 3018 3019 /***/ }), 3020 3021 /***/ "g56x": 3022 /***/ (function(module, exports) { 3023 3024 (function() { module.exports = window["wp"]["hooks"]; }()); 3025 3026 /***/ }), 3027 3028 /***/ "gdqT": 3029 /***/ (function(module, exports) { 3030 3031 (function() { module.exports = window["wp"]["a11y"]; }()); 3032 3033 /***/ }), 3034 3035 /***/ "hF7m": 3036 /***/ (function(module, exports) { 3037 3038 (function() { module.exports = window["wp"]["keyboardShortcuts"]; }()); 3039 3040 /***/ }), 3041 3042 /***/ "jZUy": 3043 /***/ (function(module, exports) { 3044 3045 (function() { module.exports = window["wp"]["coreData"]; }()); 3046 3047 /***/ }), 3048 3049 /***/ "l3Sj": 3050 /***/ (function(module, exports) { 3051 3052 (function() { module.exports = window["wp"]["i18n"]; }()); 3053 3054 /***/ }), 3055 3056 /***/ "rl8x": 3057 /***/ (function(module, exports) { 3058 3059 (function() { module.exports = window["wp"]["isShallowEqual"]; }()); 3060 3061 /***/ }), 3062 3063 /***/ "tI+e": 3064 /***/ (function(module, exports) { 3065 3066 (function() { module.exports = window["wp"]["components"]; }()); 3067 3068 /***/ }), 3069 3070 /***/ "wx14": 3071 /***/ (function(module, __webpack_exports__, __webpack_require__) { 3072 3073 "use strict"; 3074 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; }); 3075 function _extends() { 3076 _extends = Object.assign || function (target) { 3077 for (var i = 1; i < arguments.length; i++) { 3078 var source = arguments[i]; 3079 3080 for (var key in source) { 3081 if (Object.prototype.hasOwnProperty.call(source, key)) { 3082 target[key] = source[key]; 3083 } 3084 } 3085 } 3086 3087 return target; 3088 }; 3089 3090 return _extends.apply(this, arguments); 3091 } 3092 3093 /***/ }) 3094 3095 /******/ });