/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 20
(__unused_webpack_module, exports, __webpack_require__) {

"use strict";
/**
 * @license React
 * react-jsx-runtime.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
var f=__webpack_require__(677),k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};
function q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;


/***/ },

/***/ 848
(module, __unused_webpack_exports, __webpack_require__) {

"use strict";


if (true) {
  module.exports = __webpack_require__(20);
} else // removed by dead control flow
{}


/***/ },

/***/ 677
(module) {

module.exports = (function() { return this["React"]; }());

/***/ },

/***/ 419
(module) {

module.exports = (function() { return this["lodash"]; }());

/***/ },

/***/ 631
(module) {

module.exports = (function() { return this["wp"]["apiFetch"]; }());

/***/ },

/***/ 89
(module) {

module.exports = (function() { return this["wp"]["blockEditor"]; }());

/***/ },

/***/ 545
(module) {

module.exports = (function() { return this["wp"]["blocks"]; }());

/***/ },

/***/ 959
(module) {

module.exports = (function() { return this["wp"]["components"]; }());

/***/ },

/***/ 987
(module) {

module.exports = (function() { return this["wp"]["data"]; }());

/***/ },

/***/ 2
(module) {

module.exports = (function() { return this["wp"]["editor"]; }());

/***/ },

/***/ 601
(module) {

module.exports = (function() { return this["wp"]["element"]; }());

/***/ },

/***/ 873
(module) {

module.exports = (function() { return this["wp"]["hooks"]; }());

/***/ },

/***/ 75
(module) {

module.exports = (function() { return this["wp"]["i18n"]; }());

/***/ },

/***/ 933
(module) {

module.exports = (function() { return this["wp"]["primitives"]; }());

/***/ }

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	const __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		const cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		const module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			const getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter/value functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			if(Array.isArray(definition)) {
/******/ 				var i = 0;
/******/ 				while(i < definition.length) {
/******/ 					var key = definition[i++];
/******/ 					var binding = definition[i++];
/******/ 					if(!__webpack_require__.o(exports, key)) {
/******/ 						if(binding === 0) {
/******/ 							Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
/******/ 						} else {
/******/ 							Object.defineProperty(exports, key, { enumerable: true, get: binding });
/******/ 						}
/******/ 					} else if(binding === 0) { i++; }
/******/ 				}
/******/ 			} else {
/******/ 				for(var key in definition) {
/******/ 					if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 						Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/************************************************************************/
let __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";

// EXTERNAL MODULE: external {"this":["wp","blocks"]}
var external_this_wp_blocks_ = __webpack_require__(545);
// EXTERNAL MODULE: external {"this":["wp","primitives"]}
var external_this_wp_primitives_ = __webpack_require__(933);
// EXTERNAL MODULE: ./node_modules/react/jsx-runtime.js
var jsx_runtime = __webpack_require__(848);
;// ./node_modules/@wpsyntex/polylang-react-library/build/icons/translation.js
/**
 * Translation icon - translation Dashicon.
 */

/**
 * WordPress dependencies
 */


const isPrimitivesComponents = 'undefined' !== typeof wp.primitives;
const translation = isPrimitivesComponents ? /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_primitives_.SVG, {
  width: "20",
  height: "20",
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 20 20",
  children: /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_primitives_.Path, {
    d: "M11 7H9.49c-.63 0-1.25.3-1.59.7L7 5H4.13l-2.39 7h1.69l.74-2H7v4H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h7c1.1 0 2 .9 2 2v2zM6.51 9H4.49l1-2.93zM10 8h7c1.1 0 2 .9 2 2v7c0 1.1-.9 2-2 2h-7c-1.1 0-2-.9-2-2v-7c0-1.1.9-2 2-2zm7.25 5v-1.08h-3.17V9.75h-1.16v2.17H9.75V13h1.28c.11.85.56 1.85 1.28 2.62-.87.36-1.89.62-2.31.62-.01.02.22.97.2 1.46.84 0 2.21-.5 3.28-1.15 1.09.65 2.48 1.15 3.34 1.15-.02-.49.2-1.44.2-1.46-.43 0-1.49-.27-2.38-.63.7-.77 1.14-1.77 1.25-2.61h1.36zm-3.81 1.93c-.5-.46-.85-1.13-1.01-1.93h2.09c-.17.8-.51 1.47-1 1.93l-.04.03s-.03-.02-.04-.03z"
  })
}) : 'translation';
/* harmony default export */ const icons_translation = (translation);
// EXTERNAL MODULE: external {"this":["wp","i18n"]}
var external_this_wp_i18n_ = __webpack_require__(75);
// EXTERNAL MODULE: external {"this":["wp","blockEditor"]}
var external_this_wp_blockEditor_ = __webpack_require__(89);
// EXTERNAL MODULE: external {"this":["wp","components"]}
var external_this_wp_components_ = __webpack_require__(959);
// EXTERNAL MODULE: external "lodash"
var external_lodash_ = __webpack_require__(419);
;// ./js/src/blocks/language-switcher-edit.js
/**
 * Language switcher block edit.
 */

/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


const i18nAttributeStrings = pll_block_editor_blocks_settings;
function createLanguageSwitcherEdit(props) {
  const createToggleAttribute = function (propName) {
    return () => {
      const value = props.attributes[propName];
      const {
        setAttributes
      } = props;
      let updatedAttributes = {
        [propName]: !value
      };
      let forcedAttributeName;
      let forcedAttributeUnchecked;

      // Both show_names and show_flags attributes can't be unchecked together.
      switch (propName) {
        case 'show_names':
          forcedAttributeName = 'show_flags';
          forcedAttributeUnchecked = !props.attributes[forcedAttributeName];
          break;
        case 'show_flags':
          forcedAttributeName = 'show_names';
          forcedAttributeUnchecked = !props.attributes[forcedAttributeName];
          break;
      }
      if ('show_names' === propName || 'show_flags' === propName) {
        if (value && forcedAttributeUnchecked) {
          updatedAttributes = (0,external_lodash_.assign)(updatedAttributes, {
            [forcedAttributeName]: forcedAttributeUnchecked
          });
        }
      }
      setAttributes(updatedAttributes);
    };
  };
  const toggleDropdown = createToggleAttribute('dropdown');
  const toggleShowNames = createToggleAttribute('show_names');
  const toggleShowFlags = createToggleAttribute('show_flags');
  const toggleForceHome = createToggleAttribute('force_home');
  const toggleHideCurrent = createToggleAttribute('hide_current');
  const toggleHideIfNoTranslation = createToggleAttribute('hide_if_no_translation');
  const {
    dropdown,
    show_names,
    show_flags,
    force_home,
    hide_current,
    hide_if_no_translation
  } = props.attributes;
  function ToggleControlDropdown() {
    return /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.ToggleControl, {
      label: i18nAttributeStrings.dropdown,
      checked: dropdown,
      onChange: toggleDropdown
    });
  }
  function ToggleControlShowNames() {
    return /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.ToggleControl, {
      label: i18nAttributeStrings.show_names,
      checked: show_names // eslint-disable-line camelcase
      ,
      onChange: toggleShowNames
    });
  }
  function ToggleControlShowFlags() {
    return /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.ToggleControl, {
      label: i18nAttributeStrings.show_flags,
      checked: show_flags // eslint-disable-line camelcase
      ,
      onChange: toggleShowFlags
    });
  }
  function ToggleControlForceHome() {
    return /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.ToggleControl, {
      label: i18nAttributeStrings.force_home,
      checked: force_home // eslint-disable-line camelcase
      ,
      onChange: toggleForceHome
    });
  }
  function ToggleControlHideCurrent() {
    return /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.ToggleControl, {
      label: i18nAttributeStrings.hide_current,
      checked: hide_current // eslint-disable-line camelcase
      ,
      onChange: toggleHideCurrent
    });
  }
  function ToggleControlHideIfNoTranslations() {
    return /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.ToggleControl, {
      label: i18nAttributeStrings.hide_if_no_translation,
      checked: hide_if_no_translation // eslint-disable-line camelcase
      ,
      onChange: toggleHideIfNoTranslation
    });
  }
  return {
    ToggleControlDropdown,
    ToggleControlShowNames,
    ToggleControlShowFlags,
    ToggleControlForceHome,
    ToggleControlHideCurrent,
    ToggleControlHideIfNoTranslations
  };
}
// EXTERNAL MODULE: external {"this":["wp","element"]}
var external_this_wp_element_ = __webpack_require__(601);
;// ./js/src/blocks/languages-context.js
/**
 * WordPress dependencies.
 */


/**
 * Context for the languages.
 *
 * @type {React.Context<null>}
 */
const LanguagesContext = (0,external_this_wp_element_.createContext)(null);
;// ./js/src/blocks/hooks/use-memoized-switcher-label.js
/**
 * WordPress dependencies
 */
// '@wordpress/element' is provided by WordPress core.
// eslint-disable-next-line import/no-extraneous-dependencies


/**
 * Hook to memoize the switcher label.
 *
 * @param {Object}  language  The language object.
 * @param {boolean} showFlags Whether to show the flags.
 * @param {boolean} showNames Whether to show the names.
 * @return {Object} The memoized switcher label containing the text and the flag.
 */
const useMemoizedSwitcherLabel = (language, showFlags, showNames) => {
  const {
    text,
    flag
  } = (0,external_this_wp_element_.useMemo)(() => {
    let memoizedText = '';
    if (showNames) {
      if (showFlags) {
        memoizedText = ` ${language.name}`;
      } else {
        memoizedText = language.name;
      }
    }
    const memoizedFlag = showFlags ? language.flag : '';
    return {
      text: memoizedText,
      flag: memoizedFlag
    };
  }, [language, showFlags, showNames]);
  return {
    text,
    flag
  };
};
;// ./js/src/blocks/language-switcher/components/switcher-list-element.js
/**
 * Internal dependencies
 */


/**
 * Switcher list element component.
 *
 * @param {Object}  props           Component props.
 * @param {Object}  props.language  Language object.
 * @param {boolean} props.showFlags Whether to show the flags.
 * @param {boolean} props.showNames Whether to show the names.
 * @return {ReactElement}            The Switcher element component.
 */

const SwitcherListElement = ({
  language,
  showFlags,
  showNames
}) => {
  const {
    text,
    flag
  } = useMemoizedSwitcherLabel(language, showFlags, showNames);
  return /*#__PURE__*/(0,jsx_runtime.jsxs)("li", {
    children: [/*#__PURE__*/(0,jsx_runtime.jsx)("span", {
      dangerouslySetInnerHTML: {
        __html: flag
      }
    }), " ", text, " "]
  });
};
;// ./js/src/blocks/language-switcher/components/switcher-ui.js
/**
 * Internal dependencies
 */


/**
 * Switcher UI component.
 *
 * @param {Object}  props            The component props.
 * @param {Array}   props.languages  The languages to display.
 * @param {boolean} props.showFlags  Whether to show the flags.
 * @param {boolean} props.showNames  Whether to show the names.
 * @param {boolean} props.isDropdown Whether to show the dropdown.
 * @return {ReactElement} The Switcher UI component.
 */

const SwitcherUI = ({
  languages,
  showFlags,
  showNames,
  isDropdown
}) => {
  if (isDropdown) {
    return /*#__PURE__*/(0,jsx_runtime.jsx)("select", {
      children: languages.map(language => {
        return /*#__PURE__*/(0,jsx_runtime.jsx)("option", {
          value: language.slug,
          children: language.name
        }, language.slug);
      })
    });
  }
  return /*#__PURE__*/(0,jsx_runtime.jsx)("ul", {
    children: languages.map(language => {
      return /*#__PURE__*/(0,jsx_runtime.jsx)(SwitcherListElement, {
        language: language,
        showFlags: showFlags,
        showNames: showNames
      }, language.slug);
    })
  });
};
// EXTERNAL MODULE: external {"this":["wp","data"]}
var external_this_wp_data_ = __webpack_require__(987);
// EXTERNAL MODULE: external {"this":["wp","editor"]}
var external_this_wp_editor_ = __webpack_require__(2);
;// ./node_modules/@wpsyntex/polylang-react-library/build/hooks/use-current-language.js
/**
 * WordPress dependencies
 */

// This package is not found in `@wordpress/scripts` like others (peer dependency).
// eslint-disable-next-line import/no-unresolved


/**
 * Custom hook to get the current language from the editor.
 *
 * @param {Array} languages The languages list.
 * @return {Object|null} The current language, `null` if not found.
 */
const useCurrentLanguage = languages => {
  const currentPost = (0,external_this_wp_data_.useSelect)(select => select(external_this_wp_editor_.store).getCurrentPost());
  if (!languages || !currentPost) {
    return null;
  }
  const currentLanguageSlug = currentPost.lang ?? pllEditorCurrentLanguageSlug; // eslint-disable-line no-undef

  const currentLanguage = languages.find(language => {
    return language.slug === currentLanguageSlug;
  });
  return currentLanguage ? currentLanguage : null;
};
;// ./node_modules/@wpsyntex/polylang-react-library/build/hooks/use-curated-languages.js
/**
 * WordPress dependencies
 */


/**
 * Hook to curate the languages.
 * Returns an array of languages ensuring that the current language is always the first one.
 *
 * @param {Object[]} languages       The languages.
 * @param {Object}   currentLanguage The current language.
 * @param {boolean}  reduceToOneItem Whether to reduce the languages to one item.
 * @return {Object[]} The curated languages.
 */
const useCuratedLanguages = (languages, currentLanguage, reduceToOneItem) => {
  const curatedLanguages = (0,external_this_wp_element_.useMemo)(() => {
    if (!currentLanguage) {
      return [];
    }
    if (reduceToOneItem) {
      return [currentLanguage];
    }
    return [currentLanguage, ...languages.filter(language => {
      return language.slug !== currentLanguage.slug;
    })];
  }, [languages, currentLanguage, reduceToOneItem]);
  return curatedLanguages;
};
;// ./js/src/blocks/language-switcher/components/switcher-container.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */




/**
 * Switcher container component.
 *
 * @param {Object} props            The component props.
 * @param {Object} props.attributes The block attributes.
 * @return {ReactElement} The Switcher component.
 */

const SwitcherContainer = ({
  attributes
}) => {
  const {
    dropdown,
    show_flags,
    show_names
  } = attributes;
  const {
    languages
  } = (0,external_this_wp_element_.useContext)(LanguagesContext);
  const currentLanguage = useCurrentLanguage(languages);
  const curatedLanguages = useCuratedLanguages(languages, currentLanguage, dropdown);
  return /*#__PURE__*/(0,jsx_runtime.jsx)(SwitcherUI, {
    languages: curatedLanguages,
    showFlags: show_flags,
    showNames: show_names,
    isDropdown: dropdown
  });
};
// EXTERNAL MODULE: external {"this":["wp","apiFetch"]}
var external_this_wp_apiFetch_ = __webpack_require__(631);
var external_this_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_this_wp_apiFetch_);
;// ./node_modules/@wpsyntex/polylang-react-library/build/hooks/use-languages-list.js
/**
 * WordPress dependencies
 */



/**
 * Custom hook to get the languages list.
 *
 * @return {Array|null} The languages list, `null` if not loaded yet.
 */
const useLanguagesList = () => {
  const [languages, setLanguages] = (0,external_this_wp_element_.useState)(null);
  (0,external_this_wp_element_.useEffect)(() => {
    external_this_wp_apiFetch_default()({
      path: '/pll/v1/languages',
      method: 'GET'
    }).then(response => setLanguages(response));
  }, []);
  return languages;
};
;// ./js/src/blocks/language-switcher/edit.js
/**
 * Edit callback for language switcher block.
 */

/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */





/**
 * Edit callback for language switcher block.
 *
 * @param {Object} props Block properties.
 * @return {ReactElement} The block content and controls.
 */

const Edit = props => {
  const {
    dropdown
  } = props.attributes;
  const languages = useLanguagesList();
  const {
    ToggleControlDropdown,
    ToggleControlShowNames,
    ToggleControlShowFlags,
    ToggleControlForceHome,
    ToggleControlHideCurrent,
    ToggleControlHideIfNoTranslations
  } = createLanguageSwitcherEdit(props);
  return /*#__PURE__*/(0,jsx_runtime.jsxs)("div", {
    ...(0,external_this_wp_blockEditor_.useBlockProps)(),
    children: [/*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_blockEditor_.InspectorControls, {
      children: /*#__PURE__*/(0,jsx_runtime.jsxs)(external_this_wp_components_.PanelBody, {
        title: (0,external_this_wp_i18n_.__)('Language switcher settings', 'polylang'),
        children: [/*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlDropdown, {}), !dropdown && /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlShowNames, {}), !dropdown && /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlShowFlags, {}), /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlForceHome, {}), !dropdown && /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlHideCurrent, {}), /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlHideIfNoTranslations, {})]
      })
    }), /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.Disabled, {
      children: /*#__PURE__*/(0,jsx_runtime.jsx)(LanguagesContext.Provider, {
        value: {
          languages
        },
        children: /*#__PURE__*/(0,jsx_runtime.jsx)(SwitcherContainer, {
          attributes: props.attributes
        })
      })
    })]
  });
};
;// ./src/modules/Blocks/Language_Switcher/Standard/block.json
const block_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"polylang/language-switcher"}');
;// ./js/src/blocks/language-switcher/index.js
/**
 * Register language switcher block.
 */

/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



(0,external_this_wp_blocks_.registerBlockType)(block_namespaceObject.UU, {
  icon: icons_translation,
  edit: Edit
});
// EXTERNAL MODULE: external {"this":["wp","hooks"]}
var external_this_wp_hooks_ = __webpack_require__(873);
;// ./js/src/blocks/navigation-language-switcher/components/switcher-link-element.js
/**
 * Internal dependencies
 */


/**
 * Switcher link element component.
 *
 * @param {Object}  props            Component props.
 * @param {Object}  props.language   Language object.
 * @param {boolean} props.isTopLevel Whether the language is the top level language.
 * @param {boolean} props.showFlags  Whether to show the flags.
 * @param {boolean} props.showNames  Whether to show the names.
 * @return {ReactElement}            The Switcher element component.
 */

const SwitcherLinkElement = ({
  language,
  isTopLevel,
  showFlags,
  showNames
}) => {
  const {
    text,
    flag
  } = useMemoizedSwitcherLabel(language, showFlags, showNames);
  const prefix = isTopLevel ? '' : ' ';
  return (
    /*#__PURE__*/
    // eslint-disable-next-line jsx-a11y/anchor-is-valid
    (0,jsx_runtime.jsxs)("a", {
      href: '#',
      children: [prefix, /*#__PURE__*/(0,jsx_runtime.jsx)("span", {
        dangerouslySetInnerHTML: {
          __html: flag
        }
      }), " ", text, " "]
    })
  );
};
;// ./node_modules/@wpsyntex/polylang-react-library/build/icons/submenu.js
/**
 * Submenu icon
 */

/**
 * WordPress dependencies
 */


const submenu_isPrimitivesComponents = 'undefined' !== typeof wp.primitives;
const SubmenuIcon = () => submenu_isPrimitivesComponents ? /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_primitives_.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  width: "12",
  height: "12",
  viewBox: "0 0 12 12",
  fill: "none",
  children: /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_primitives_.Path, {
    d: "M1.50002 4L6.00002 8L10.5 4",
    strokeWidth: "1.5"
  })
}) : 'submenu';
/* harmony default export */ const submenu = (SubmenuIcon);
;// ./js/src/blocks/navigation-language-switcher/components/switcher-ui.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



/**
 * Switcher UI component.
 *
 * @param {Object}  props                 The component props.
 * @param {Array}   props.languages       The languages to display.
 * @param {boolean} props.showFlags       Whether to show the flags.
 * @param {boolean} props.showNames       Whether to show the names.
 * @param {boolean} props.withSubmenuIcon Whether to show the submenu icon.
 * @return {ReactElement} The Switcher UI component.
 */

const switcher_ui_SwitcherUI = ({
  languages,
  showFlags,
  showNames,
  withSubmenuIcon
}) => {
  return /*#__PURE__*/(0,jsx_runtime.jsx)(jsx_runtime.Fragment, {
    children: languages && languages.map(language => {
      return /*#__PURE__*/(0,jsx_runtime.jsxs)(external_this_wp_element_.Fragment, {
        children: [/*#__PURE__*/(0,jsx_runtime.jsx)(SwitcherLinkElement, {
          language: language,
          isTopLevel: languages.indexOf(language) === 0,
          showFlags: showFlags,
          showNames: showNames
        }), withSubmenuIcon && /*#__PURE__*/(0,jsx_runtime.jsx)("span", {
          className: "wp-block-navigation__submenu-icon",
          children: /*#__PURE__*/(0,jsx_runtime.jsx)(submenu, {})
        })]
      }, language.slug);
    })
  });
};
;// ./js/src/blocks/navigation-language-switcher/components/navigation-switcher-container.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */




/**
 * Switcher container component.
 *
 * @param {Object} props            The component props.
 * @param {Object} props.attributes The block attributes.
 * @param {Object} props.context    The block context.
 * @return {ReactElement} The Switcher component.
 */

const NavigationSwitcherContainer = ({
  attributes,
  context
}) => {
  const {
    dropdown,
    show_flags,
    show_names
  } = attributes;
  const {
    showSubmenuIcon,
    openSubmenusOnClick
  } = context;
  const {
    languages
  } = (0,external_this_wp_element_.useContext)(LanguagesContext);
  const currentLanguage = useCurrentLanguage(languages);
  const curatedLanguages = useCuratedLanguages(languages, currentLanguage, dropdown);
  return /*#__PURE__*/(0,jsx_runtime.jsx)(switcher_ui_SwitcherUI, {
    languages: curatedLanguages,
    showFlags: Boolean(show_flags),
    showNames: Boolean(show_names),
    withSubmenuIcon: Boolean((showSubmenuIcon || openSubmenusOnClick) && dropdown)
  });
};
;// ./js/src/blocks/navigation-language-switcher/edit.js
/**
 * Edit callback for navigation language switcher block.
 */

/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */





/**
 * Edit callback for navigation language switcher block.
 *
 * @param {Object} props Block properties.
 * @return {ReactElement} The block content and controls.
 */

const edit_Edit = props => {
  const {
    dropdown
  } = props.attributes;
  const languages = useLanguagesList();
  const {
    ToggleControlDropdown,
    ToggleControlShowNames,
    ToggleControlShowFlags,
    ToggleControlForceHome,
    ToggleControlHideCurrent,
    ToggleControlHideIfNoTranslations
  } = createLanguageSwitcherEdit(props);
  return /*#__PURE__*/(0,jsx_runtime.jsxs)("div", {
    ...(0,external_this_wp_blockEditor_.useBlockProps)(),
    children: [/*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_blockEditor_.InspectorControls, {
      children: /*#__PURE__*/(0,jsx_runtime.jsxs)(external_this_wp_components_.PanelBody, {
        title: (0,external_this_wp_i18n_.__)('Language switcher settings', 'polylang'),
        children: [/*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlDropdown, {}), /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlShowNames, {}), /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlShowFlags, {}), /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlForceHome, {}), !dropdown && /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlHideCurrent, {}), /*#__PURE__*/(0,jsx_runtime.jsx)(ToggleControlHideIfNoTranslations, {})]
      })
    }), /*#__PURE__*/(0,jsx_runtime.jsx)(external_this_wp_components_.Disabled, {
      children: /*#__PURE__*/(0,jsx_runtime.jsx)(LanguagesContext.Provider, {
        value: {
          languages
        },
        children: /*#__PURE__*/(0,jsx_runtime.jsx)(NavigationSwitcherContainer, {
          attributes: props.attributes,
          context: props.context
        })
      })
    })]
  });
};
;// ./src/modules/Blocks/Language_Switcher/Navigation/block.json
const Navigation_block_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"polylang/navigation-language-switcher"}');
;// ./js/src/blocks/navigation-language-switcher/menu-items-converter.js
/**
 * Menu items converter
 */

/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * Apply a callback function on each block of the blocks list.
 *
 * @param {Array}  blocks        The list of blocks to process.
 * @param {Array}  menuItems     The initial menu items from where the blocks are converted to.
 * @param {Object} blocksMapping The mapping between the menu items and their corresponding blocks.
 * @param {mapper} mapper        A callback to change the converted block by another one if necessary
 * @return {Array} Array of blocks updated.
 */
function mapBlockTree(blocks, menuItems, blocksMapping, mapper) {
  /**
   * A function to apply to each block to convert it if necessary by applying the `mapper` filter.
   *
   * @param {Object} block The block to replace or not.
   * @return {Object} The new block potentially replaced by the `mapper`.
   */
  const convertBlock = block => ({
    ...mapper(block, menuItems, blocksMapping),
    innerBlocks: mapBlockTree(block.innerBlocks, menuItems, blocksMapping, mapper)
  });
  return blocks.map(convertBlock);
}

/**
 * A filter to detect the `core/navigation-link` block not correctly converted from the language switcher menu item
 * and convert it to its corresponding `polylang/navigation-language-switcher` block.
 *
 * @callback mapper
 * @param {Object} block         The block converted from the menu item.
 * @param {Array}  menuItems     The initial menu items from where the blocks are converted to.
 * @param {Object} blocksMapping The mapping between the menu items and their corresponding blocks.
 * @return {Object} The block correctly converted.
 */
const blocksFilter = (block, menuItems, blocksMapping) => {
  if (block.name === 'core/navigation-link' && block.attributes?.url === '#pll_switcher') {
    const menuItem = menuItems.find(item => item.url === '#pll_switcher'); // Get the corresponding menu item.
    const attributes = menuItem.meta._pll_menu_item; // Get its options.
    const newBlock = (0,external_this_wp_blocks_.createBlock)(Navigation_block_namespaceObject.UU, attributes);
    blocksMapping[menuItem.id] = newBlock.clientId; // Update the blocks mapping.
    return newBlock;
  }
  return block;
};

/**
 * A filter callback hooked to `blocks.navigation.__unstableMenuItemsToBlocks`.
 *
 * @param {Array} blocks    The list of blocks to process.
 * @param {Array} menuItems The initial menu items from where the blocks are converted to.
 * @return {Array} Array of blocks updated.
 */
const menuItemsToBlocksFilter = (blocks, menuItems) => ({
  ...blocks,
  innerBlocks: mapBlockTree(blocks.innerBlocks, menuItems, blocks.mapping, blocksFilter)
});
;// ./js/src/blocks/navigation-language-switcher/index.js
/**
 * Register navigation language switcher block.
 */

/**
 * WordPress Dependencies
 */



/**
 * Internal dependencies
 */




(0,external_this_wp_blocks_.registerBlockType)(Navigation_block_namespaceObject.UU, {
  icon: icons_translation,
  transforms: {
    from: [{
      type: 'block',
      blocks: ['core/navigation-link'],
      transform: () => (0,external_this_wp_blocks_.createBlock)(Navigation_block_namespaceObject.UU)
    }]
  },
  edit: edit_Edit
});

/**
 * Hooks to the classic menu conversion to core/navigation block to be able to convert
 * the language switcher menu item to its corresponding block.
 */
(0,external_this_wp_hooks_.addFilter)('blocks.navigation.__unstableMenuItemsToBlocks', 'polylang/include-language-switcher', menuItemsToBlocksFilter);
;// ./js/src/blocks/index.js
/**
 * Registers Polylang blocks in the editors and enables attributes controls.
 */


})();

this.polylang = __webpack_exports__;
/******/ })()
;